pub const MAX_PROTOCOL_CHAIN: DWORD = 7;
-pub const TOKEN_READ: DWORD = 0x20008;
pub const MAXIMUM_REPARSE_DATA_BUFFER_SIZE: usize = 16 * 1024;
pub const FSCTL_GET_REPARSE_POINT: DWORD = 0x900a8;
pub const IO_REPARSE_TAG_SYMLINK: DWORD = 0xa000000c;
if #[cfg(not(target_vendor = "uwp"))] {
pub const HANDLE_FLAG_INHERIT: DWORD = 0x00000001;
+ pub const TOKEN_READ: DWORD = 0x20008;
+
extern "system" {
#[link_name = "SystemFunction036"]
pub fn RtlGenRandom(RandomBuffer: *mut u8, RandomBufferLength: ULONG) -> BOOLEAN;
+ // Allowed but unused by UWP
+ pub fn OpenProcessToken(ProcessHandle: HANDLE,
+ DesiredAccess: DWORD,
+ TokenHandle: *mut HANDLE) -> BOOL;
+ pub fn GetUserProfileDirectoryW(hToken: HANDLE,
+ lpProfileDir: LPWSTR,
+ lpcchSize: *mut DWORD) -> BOOL;
pub fn SetHandleInformation(hObject: HANDLE,
dwMask: DWORD,
dwFlags: DWORD) -> BOOL;
pub fn GetCommandLineW() -> *mut LPCWSTR;
pub fn GetTempPathW(nBufferLength: DWORD,
lpBuffer: LPCWSTR) -> DWORD;
- pub fn OpenProcessToken(ProcessHandle: HANDLE,
- DesiredAccess: DWORD,
- TokenHandle: *mut HANDLE) -> BOOL;
pub fn GetCurrentProcess() -> HANDLE;
pub fn GetCurrentThread() -> HANDLE;
pub fn GetStdHandle(which: DWORD) -> HANDLE;
pub fn SwitchToThread() -> BOOL;
pub fn Sleep(dwMilliseconds: DWORD);
pub fn GetProcessId(handle: HANDLE) -> DWORD;
- pub fn GetUserProfileDirectoryW(hToken: HANDLE,
- lpProfileDir: LPWSTR,
- lpcchSize: *mut DWORD) -> BOOL;
pub fn CopyFileExW(lpExistingFileName: LPCWSTR,
lpNewFileName: LPCWSTR,
lpProgressRoutine: LPPROGRESS_ROUTINE,
use crate::ptr;
use crate::slice;
use crate::sys::{c, cvt};
-use crate::sys::handle::Handle;
use super::to_u16s;
}, super::os2path).unwrap()
}
-pub fn home_dir() -> Option<PathBuf> {
- crate::env::var_os("HOME").or_else(|| {
- crate::env::var_os("USERPROFILE")
- }).map(PathBuf::from).or_else(|| unsafe {
+#[cfg(not(target_vendor = "uwp"))]
+fn home_dir_crt() -> Option<PathBuf> {
+ unsafe {
+ use crate::sys::handle::Handle;
+
let me = c::GetCurrentProcess();
let mut token = ptr::null_mut();
if c::OpenProcessToken(me, c::TOKEN_READ, &mut token) == 0 {
_ => sz - 1, // sz includes the null terminator
}
}, super::os2path).ok()
- })
+ }
+}
+
+#[cfg(target_vendor = "uwp")]
+fn home_dir_crt() -> Option<PathBuf> {
+ None
+}
+
+pub fn home_dir() -> Option<PathBuf> {
+ crate::env::var_os("HOME").or_else(|| {
+ crate::env::var_os("USERPROFILE")
+ }).map(PathBuf::from).or_else(|| home_dir_crt())
}
pub fn exit(code: i32) -> ! {