Well, I tried to get hold of a list of a list of removable drives by using the two functions on Windows API as above, but was confused as
pub unsafe extern "system" fn GetDriveTypeW(lpRootPathName: LPCWSTR])->UINT//requires a *const u16
and the other requires a *const i8. I simply do not know how to creat a *const u16 or *const i8 in Rust. What parameter shall I provide?
Thank you for any thoughts.
You can get pointer from *const u8 and convert it easily to i8
The problem is that for W version of function you need to re-encode your text from UTF-8 to shitty WTF-16.
Use this function https://doc.rust-lang.org/std/ffi/struct.OsStr.html#method.encode_wide and collect it into vec. Then use Vec::as_ptr to get pointer and cast it to i16
In case of A version encoding depends on your system code page.
You should set it to UTF-8 for simplicty sake, but in general you should prefer to use W version of function as it is independent of environment, albeit sub-par performance wise due to a need for conversion.