| // Licensed under the Apache License, Version 2.0 |
| // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license |
| // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. |
| // All files in the project carrying such notice may not be copied, modified, or distributed |
| // except according to those terms. |
| //! This module defines the 32-Bit Windows Base APIs |
| use ctypes::{c_char, c_int, c_long, c_void}; |
| use shared::basetsd::{ |
| DWORD64, DWORD_PTR, LONG_PTR, PDWORD64, PDWORD_PTR, PSIZE_T, PULONG_PTR, SIZE_T, UINT_PTR, |
| ULONG_PTR, |
| }; |
| use shared::guiddef::GUID; |
| use shared::minwindef::{ |
| ATOM, BOOL, BYTE, DWORD, FARPROC, FILETIME, HFILE, HGLOBAL, HLOCAL, HMODULE, HRSRC, LPBOOL, |
| LPBYTE, LPCVOID, LPDWORD, LPFILETIME, LPVOID, LPWORD, PBOOL, PDWORD, PUCHAR, PULONG, PUSHORT, |
| UCHAR, UINT, ULONG, USHORT, WORD, |
| }; |
| use shared::windef::HWND; |
| use um::cfgmgr32::MAX_PROFILE_LEN; |
| use um::fileapi::STREAM_INFO_LEVELS; |
| use um::libloaderapi::{ |
| ENUMRESLANGPROCA, ENUMRESLANGPROCW, ENUMRESNAMEPROCA, ENUMRESTYPEPROCA, ENUMRESTYPEPROCW, |
| }; |
| use um::minwinbase::{ |
| FILE_INFO_BY_HANDLE_CLASS, FINDEX_INFO_LEVELS, FINDEX_SEARCH_OPS, GET_FILEEX_INFO_LEVELS, |
| LPOVERLAPPED, LPOVERLAPPED_COMPLETION_ROUTINE, LPSECURITY_ATTRIBUTES, PREASON_CONTEXT, |
| }; |
| use um::processthreadsapi::{ |
| LPPROCESS_INFORMATION, LPPROC_THREAD_ATTRIBUTE_LIST, LPSTARTUPINFOA, LPSTARTUPINFOW, |
| STARTUPINFOA, STARTUPINFOW, |
| }; |
| use um::winnt::{ |
| BOOLEAN, CHAR, DWORDLONG, EXECUTION_STATE, FILE_ID_128, HANDLE, HRESULT, INT, LANGID, |
| LARGE_INTEGER, LATENCY_TIME, LONG, LPCCH, LPCH, LPCSTR, LPCWSTR, LPOSVERSIONINFOEXA, |
| LPOSVERSIONINFOEXW, LPSTR, LPWSTR, MAXLONG, PBOOLEAN, PCONTEXT, PCWSTR, PFIRMWARE_TYPE, |
| PHANDLE, PIO_COUNTERS, PJOB_SET_ARRAY, PLUID, POWER_REQUEST_TYPE, PPERFORMANCE_DATA, |
| PPROCESSOR_NUMBER, PQUOTA_LIMITS, PRTL_UMS_SCHEDULER_ENTRY_POINT, |
| PSECURE_MEMORY_CACHE_CALLBACK, PSID, PSID_NAME_USE, PULONGLONG, PVOID, PWOW64_CONTEXT, |
| PWOW64_LDT_ENTRY, PWSTR, RTL_UMS_THREAD_INFO_CLASS, STATUS_ABANDONED_WAIT_0, STATUS_USER_APC, |
| STATUS_WAIT_0, SecurityAnonymous, SecurityDelegation, SecurityIdentification, |
| SecurityImpersonation, THREAD_BASE_PRIORITY_IDLE, THREAD_BASE_PRIORITY_LOWRT, |
| THREAD_BASE_PRIORITY_MAX, THREAD_BASE_PRIORITY_MIN, ULARGE_INTEGER, VOID, WAITORTIMERCALLBACK, |
| WCHAR, WOW64_CONTEXT, |
| }; |
| #[cfg(target_arch = "x86")] |
| use um::winnt::PLDT_ENTRY; |
| use vc::vadefs::va_list; |
| pub const FILE_BEGIN: DWORD = 0; |
| pub const FILE_CURRENT: DWORD = 1; |
| pub const FILE_END: DWORD = 2; |
| pub const WAIT_FAILED: DWORD = 0xFFFFFFFF; |
| pub const WAIT_OBJECT_0: DWORD = STATUS_WAIT_0 as u32; |
| pub const WAIT_ABANDONED: DWORD = STATUS_ABANDONED_WAIT_0 as u32; |
| pub const WAIT_ABANDONED_0: DWORD = STATUS_ABANDONED_WAIT_0 as u32; |
| pub const WAIT_IO_COMPLETION: DWORD = STATUS_USER_APC as u32; |
| pub const FILE_FLAG_WRITE_THROUGH: DWORD = 0x80000000; |
| pub const FILE_FLAG_OVERLAPPED: DWORD = 0x40000000; |
| pub const FILE_FLAG_NO_BUFFERING: DWORD = 0x20000000; |
| pub const FILE_FLAG_RANDOM_ACCESS: DWORD = 0x10000000; |
| pub const FILE_FLAG_SEQUENTIAL_SCAN: DWORD = 0x08000000; |
| pub const FILE_FLAG_DELETE_ON_CLOSE: DWORD = 0x04000000; |
| pub const FILE_FLAG_BACKUP_SEMANTICS: DWORD = 0x02000000; |
| pub const FILE_FLAG_POSIX_SEMANTICS: DWORD = 0x01000000; |
| pub const FILE_FLAG_SESSION_AWARE: DWORD = 0x00800000; |
| pub const FILE_FLAG_OPEN_REPARSE_POINT: DWORD = 0x00200000; |
| pub const FILE_FLAG_OPEN_NO_RECALL: DWORD = 0x00100000; |
| pub const FILE_FLAG_FIRST_PIPE_INSTANCE: DWORD = 0x00080000; |
| pub const FILE_FLAG_OPEN_REQUIRING_OPLOCK: DWORD = 0x00040000; |
| pub const PROGRESS_CONTINUE: DWORD = 0; |
| pub const PROGRESS_CANCEL: DWORD = 1; |
| pub const PROGRESS_STOP: DWORD = 2; |
| pub const PROGRESS_QUIET: DWORD = 3; |
| pub const CALLBACK_CHUNK_FINISHED: DWORD = 0x00000000; |
| pub const CALLBACK_STREAM_SWITCH: DWORD = 0x00000001; |
| pub const COPY_FILE_FAIL_IF_EXISTS: DWORD = 0x00000001; |
| pub const COPY_FILE_RESTARTABLE: DWORD = 0x00000002; |
| pub const COPY_FILE_OPEN_SOURCE_FOR_WRITE: DWORD = 0x00000004; |
| pub const COPY_FILE_ALLOW_DECRYPTED_DESTINATION: DWORD = 0x00000008; |
| pub const COPY_FILE_COPY_SYMLINK: DWORD = 0x00000800; |
| pub const COPY_FILE_NO_BUFFERING: DWORD = 0x00001000; |
| pub const COPY_FILE_REQUEST_SECURITY_PRIVILEGES: DWORD = 0x00002000; |
| pub const COPY_FILE_RESUME_FROM_PAUSE: DWORD = 0x00004000; |
| pub const COPY_FILE_NO_OFFLOAD: DWORD = 0x00040000; |
| pub const COPY_FILE_IGNORE_EDP_BLOCK: DWORD = 0x00400000; |
| pub const COPY_FILE_IGNORE_SOURCE_ENCRYPTION: DWORD = 0x00800000; |
| pub const REPLACEFILE_WRITE_THROUGH: DWORD = 0x00000001; |
| pub const REPLACEFILE_IGNORE_MERGE_ERRORS: DWORD = 0x00000002; |
| pub const REPLACEFILE_IGNORE_ACL_ERRORS: DWORD = 0x00000004; |
| pub const PIPE_ACCESS_INBOUND: DWORD = 0x00000001; |
| pub const PIPE_ACCESS_OUTBOUND: DWORD = 0x00000002; |
| pub const PIPE_ACCESS_DUPLEX: DWORD = 0x00000003; |
| pub const PIPE_CLIENT_END: DWORD = 0x00000000; |
| pub const PIPE_SERVER_END: DWORD = 0x00000001; |
| pub const PIPE_WAIT: DWORD = 0x00000000; |
| pub const PIPE_NOWAIT: DWORD = 0x00000001; |
| pub const PIPE_READMODE_BYTE: DWORD = 0x00000000; |
| pub const PIPE_READMODE_MESSAGE: DWORD = 0x00000002; |
| pub const PIPE_TYPE_BYTE: DWORD = 0x00000000; |
| pub const PIPE_TYPE_MESSAGE: DWORD = 0x00000004; |
| pub const PIPE_ACCEPT_REMOTE_CLIENTS: DWORD = 0x00000000; |
| pub const PIPE_REJECT_REMOTE_CLIENTS: DWORD = 0x00000008; |
| pub const PIPE_UNLIMITED_INSTANCES: DWORD = 255; |
| pub const SECURITY_ANONYMOUS: DWORD = SecurityAnonymous << 16; |
| pub const SECURITY_IDENTIFICATION: DWORD = SecurityIdentification << 16; |
| pub const SECURITY_IMPERSONATION: DWORD = SecurityImpersonation << 16; |
| pub const SECURITY_DELEGATION: DWORD = SecurityDelegation << 16; |
| pub const SECURITY_CONTEXT_TRACKING: DWORD = 0x00040000; |
| pub const SECURITY_EFFECTIVE_ONLY: DWORD = 0x00080000; |
| pub const SECURITY_SQOS_PRESENT: DWORD = 0x00100000; |
| pub const SECURITY_VALID_SQOS_FLAGS: DWORD = 0x001F0000; |
| FN!{stdcall PFIBER_START_ROUTINE( |
| lpFiberParameter: LPVOID, |
| ) -> ()} |
| pub type LPFIBER_START_ROUTINE = PFIBER_START_ROUTINE; |
| FN!{stdcall PFIBER_CALLOUT_ROUTINE( |
| lpParameter: LPVOID, |
| ) -> LPVOID} |
| // FAIL_FAST_* |
| #[cfg(target_arch = "x86")] |
| pub type LPLDT_ENTRY = PLDT_ENTRY; |
| #[cfg(not(target_arch = "x86"))] |
| pub type LPLDT_ENTRY = LPVOID; // TODO - fix this for 32-bit |
| //SP_SERIALCOMM |
| //PST_* |
| // PCF_* |
| // SP_* |
| // BAUD_* |
| // DATABITS_* |
| // STOPBITS_* |
| // PARITY_* |
| STRUCT!{struct COMMPROP { |
| wPacketLength: WORD, |
| wPacketVersion: WORD, |
| dwServiceMask: DWORD, |
| dwReserved1: DWORD, |
| dwMaxTxQueue: DWORD, |
| dwMaxRxQueue: DWORD, |
| dwMaxBaud: DWORD, |
| dwProvSubType: DWORD, |
| dwProvCapabilities: DWORD, |
| dwSettableParams: DWORD, |
| dwSettableBaud: DWORD, |
| wSettableData: WORD, |
| wSettableStopParity: WORD, |
| dwCurrentTxQueue: DWORD, |
| dwCurrentRxQueue: DWORD, |
| dwProvSpec1: DWORD, |
| dwProvSpec2: DWORD, |
| wcProvChar: [WCHAR; 1], |
| }} |
| pub type LPCOMMPROP = *mut COMMPROP; |
| STRUCT!{struct COMSTAT { |
| BitFields: DWORD, |
| cbInQue: DWORD, |
| cbOutQue: DWORD, |
| }} |
| BITFIELD!{COMSTAT BitFields: DWORD [ |
| fCtsHold set_fCtsHold[0..1], |
| fDsrHold set_fDsrHold[1..2], |
| fRlsdHold set_fRlsdHold[2..3], |
| fXoffHold set_fXoffHold[3..4], |
| fXoffSent set_fXoffSent[4..5], |
| fEof set_fEof[5..6], |
| fTxim set_fTxim[6..7], |
| fReserved set_fReserved[7..32], |
| ]} |
| pub type LPCOMSTAT = *mut COMSTAT; |
| pub const DTR_CONTROL_DISABLE: DWORD = 0x00; |
| pub const DTR_CONTROL_ENABLE: DWORD = 0x01; |
| pub const DTR_CONTROL_HANDSHAKE: DWORD = 0x02; |
| pub const RTS_CONTROL_DISABLE: DWORD = 0x00; |
| pub const RTS_CONTROL_ENABLE: DWORD = 0x01; |
| pub const RTS_CONTROL_HANDSHAKE: DWORD = 0x02; |
| pub const RTS_CONTROL_TOGGLE: DWORD = 0x03; |
| STRUCT!{struct DCB { |
| DCBlength: DWORD, |
| BaudRate: DWORD, |
| BitFields: DWORD, |
| wReserved: WORD, |
| XonLim: WORD, |
| XoffLim: WORD, |
| ByteSize: BYTE, |
| Parity: BYTE, |
| StopBits: BYTE, |
| XonChar: c_char, |
| XoffChar: c_char, |
| ErrorChar: c_char, |
| EofChar: c_char, |
| EvtChar: c_char, |
| wReserved1: WORD, |
| }} |
| BITFIELD!{DCB BitFields: DWORD [ |
| fBinary set_fBinary[0..1], |
| fParity set_fParity[1..2], |
| fOutxCtsFlow set_fOutxCtsFlow[2..3], |
| fOutxDsrFlow set_fOutxDsrFlow[3..4], |
| fDtrControl set_fDtrControl[4..6], |
| fDsrSensitivity set_fDsrSensitivity[6..7], |
| fTXContinueOnXoff set_fTXContinueOnXoff[7..8], |
| fOutX set_fOutX[8..9], |
| fInX set_fInX[9..10], |
| fErrorChar set_fErrorChar[10..11], |
| fNull set_fNull[11..12], |
| fRtsControl set_fRtsControl[12..14], |
| fAbortOnError set_fAbortOnError[14..15], |
| fDummy2 set_fDummy2[15..32], |
| ]} |
| pub type LPDCB = *mut DCB; |
| STRUCT!{struct COMMTIMEOUTS { |
| ReadIntervalTimeout: DWORD, |
| ReadTotalTimeoutMultiplier: DWORD, |
| ReadTotalTimeoutConstant: DWORD, |
| WriteTotalTimeoutMultiplier: DWORD, |
| WriteTotalTimeoutConstant: DWORD, |
| }} |
| pub type LPCOMMTIMEOUTS = *mut COMMTIMEOUTS; |
| STRUCT!{struct COMMCONFIG { |
| dwSize: DWORD, |
| wVersion: WORD, |
| wReserved: WORD, |
| dcb: DCB, |
| dwProviderSubType: DWORD, |
| dwProviderOffset: DWORD, |
| dwProviderSize: DWORD, |
| wcProviderData: [WCHAR; 1], |
| }} |
| pub type LPCOMMCONFIG = *mut COMMCONFIG; |
| pub const GMEM_FIXED: UINT = 0x0000; |
| pub const GMEM_MOVEABLE: UINT = 0x0002; |
| pub const GMEM_NOCOMPACT: UINT = 0x0010; |
| pub const GMEM_NODISCARD: UINT = 0x0020; |
| pub const GMEM_ZEROINIT: UINT = 0x0040; |
| pub const GMEM_MODIFY: UINT = 0x0080; |
| pub const GMEM_DISCARDABLE: UINT = 0x0100; |
| pub const GMEM_NOT_BANKED: UINT = 0x1000; |
| pub const GMEM_SHARE: UINT = 0x2000; |
| pub const GMEM_DDESHARE: UINT = 0x2000; |
| pub const GMEM_NOTIFY: UINT = 0x4000; |
| pub const GMEM_LOWER: UINT = GMEM_NOT_BANKED; |
| pub const GMEM_VALID_FLAGS: UINT = 0x7F72; |
| pub const GMEM_INVALID_HANDLE: UINT = 0x8000; |
| pub const GHND: UINT = GMEM_MOVEABLE | GMEM_ZEROINIT; |
| pub const GPTR: UINT = GMEM_FIXED | GMEM_ZEROINIT; |
| pub const GMEM_DISCARDED: UINT = 0x4000; |
| pub const GMEM_LOCKCOUNT: UINT = 0x00FF; |
| STRUCT!{struct MEMORYSTATUS { |
| dwLength: DWORD, |
| dwMemoryLoad: DWORD, |
| dwTotalPhys: SIZE_T, |
| dwAvailPhys: SIZE_T, |
| dwTotalPageFile: SIZE_T, |
| dwAvailPageFile: SIZE_T, |
| dwTotalVirtual: SIZE_T, |
| dwAvailVirtual: SIZE_T, |
| }} |
| pub type LPMEMORYSTATUS = *mut MEMORYSTATUS; |
| // NUMA_NO_PREFERRED_NODE |
| pub const DEBUG_PROCESS: DWORD = 0x00000001; |
| pub const DEBUG_ONLY_THIS_PROCESS: DWORD = 0x00000002; |
| pub const CREATE_SUSPENDED: DWORD = 0x00000004; |
| pub const DETACHED_PROCESS: DWORD = 0x00000008; |
| pub const CREATE_NEW_CONSOLE: DWORD = 0x00000010; |
| pub const NORMAL_PRIORITY_CLASS: DWORD = 0x00000020; |
| pub const IDLE_PRIORITY_CLASS: DWORD = 0x00000040; |
| pub const HIGH_PRIORITY_CLASS: DWORD = 0x00000080; |
| pub const REALTIME_PRIORITY_CLASS: DWORD = 0x00000100; |
| pub const CREATE_NEW_PROCESS_GROUP: DWORD = 0x00000200; |
| pub const CREATE_UNICODE_ENVIRONMENT: DWORD = 0x00000400; |
| pub const CREATE_SEPARATE_WOW_VDM: DWORD = 0x00000800; |
| pub const CREATE_SHARED_WOW_VDM: DWORD = 0x00001000; |
| pub const CREATE_FORCEDOS: DWORD = 0x00002000; |
| pub const BELOW_NORMAL_PRIORITY_CLASS: DWORD = 0x00004000; |
| pub const ABOVE_NORMAL_PRIORITY_CLASS: DWORD = 0x00008000; |
| pub const INHERIT_PARENT_AFFINITY: DWORD = 0x00010000; |
| pub const INHERIT_CALLER_PRIORITY: DWORD = 0x00020000; |
| pub const CREATE_PROTECTED_PROCESS: DWORD = 0x00040000; |
| pub const EXTENDED_STARTUPINFO_PRESENT: DWORD = 0x00080000; |
| pub const PROCESS_MODE_BACKGROUND_BEGIN: DWORD = 0x00100000; |
| pub const PROCESS_MODE_BACKGROUND_END: DWORD = 0x00200000; |
| pub const CREATE_BREAKAWAY_FROM_JOB: DWORD = 0x01000000; |
| pub const CREATE_PRESERVE_CODE_AUTHZ_LEVEL: DWORD = 0x02000000; |
| pub const CREATE_DEFAULT_ERROR_MODE: DWORD = 0x04000000; |
| pub const CREATE_NO_WINDOW: DWORD = 0x08000000; |
| pub const PROFILE_USER: DWORD = 0x10000000; |
| pub const PROFILE_KERNEL: DWORD = 0x20000000; |
| pub const PROFILE_SERVER: DWORD = 0x40000000; |
| pub const CREATE_IGNORE_SYSTEM_DEFAULT: DWORD = 0x80000000; |
| // STACK_SIZE_PARAM_IS_A_RESERVATION |
| pub const THREAD_PRIORITY_LOWEST: DWORD = THREAD_BASE_PRIORITY_MIN; |
| pub const THREAD_PRIORITY_BELOW_NORMAL: DWORD = THREAD_PRIORITY_LOWEST + 1; |
| pub const THREAD_PRIORITY_NORMAL: DWORD = 0; |
| pub const THREAD_PRIORITY_HIGHEST: DWORD = THREAD_BASE_PRIORITY_MAX; |
| pub const THREAD_PRIORITY_ABOVE_NORMAL: DWORD = THREAD_PRIORITY_HIGHEST - 1; |
| pub const THREAD_PRIORITY_ERROR_RETURN: DWORD = MAXLONG as u32; |
| pub const THREAD_PRIORITY_TIME_CRITICAL: DWORD = THREAD_BASE_PRIORITY_LOWRT; |
| pub const THREAD_PRIORITY_IDLE: DWORD = THREAD_BASE_PRIORITY_IDLE; |
| pub const THREAD_MODE_BACKGROUND_BEGIN: DWORD = 0x00010000; |
| pub const THREAD_MODE_BACKGROUND_END: DWORD = 0x00020000; |
| pub const VOLUME_NAME_DOS: DWORD = 0x0; |
| // VOLUME_NAME_* |
| // FILE_NAME_* |
| // JIT_DEBUG_* |
| pub const DRIVE_UNKNOWN: DWORD = 0; |
| pub const DRIVE_NO_ROOT_DIR: DWORD = 1; |
| pub const DRIVE_REMOVABLE: DWORD = 2; |
| pub const DRIVE_FIXED: DWORD = 3; |
| pub const DRIVE_REMOTE: DWORD = 4; |
| pub const DRIVE_CDROM: DWORD = 5; |
| pub const DRIVE_RAMDISK: DWORD = 6; |
| // pub fn GetFreeSpace(); |
| pub const FILE_TYPE_UNKNOWN: DWORD = 0x0000; |
| pub const FILE_TYPE_DISK: DWORD = 0x0001; |
| pub const FILE_TYPE_CHAR: DWORD = 0x0002; |
| pub const FILE_TYPE_PIPE: DWORD = 0x0003; |
| pub const FILE_TYPE_REMOTE: DWORD = 0x8000; |
| pub const STD_INPUT_HANDLE: DWORD = -10i32 as u32; |
| pub const STD_OUTPUT_HANDLE: DWORD = -11i32 as u32; |
| pub const STD_ERROR_HANDLE: DWORD = -12i32 as u32; |
| pub const NOPARITY: BYTE = 0; |
| pub const ODDPARITY: BYTE = 1; |
| pub const EVENPARITY: BYTE = 2; |
| pub const MARKPARITY: BYTE = 3; |
| pub const SPACEPARITY: BYTE = 4; |
| pub const ONESTOPBIT: BYTE = 0; |
| pub const ONE5STOPBITS: BYTE = 1; |
| pub const TWOSTOPBITS: BYTE = 2; |
| pub const IGNORE: DWORD = 0; |
| pub const INFINITE: DWORD = 0xFFFFFFFF; |
| pub const CBR_110: DWORD = 110; |
| pub const CBR_300: DWORD = 300; |
| pub const CBR_600: DWORD = 600; |
| pub const CBR_1200: DWORD = 1200; |
| pub const CBR_2400: DWORD = 2400; |
| pub const CBR_4800: DWORD = 4800; |
| pub const CBR_9600: DWORD = 9600; |
| pub const CBR_14400: DWORD = 14400; |
| pub const CBR_19200: DWORD = 19200; |
| pub const CBR_38400: DWORD = 38400; |
| pub const CBR_56000: DWORD = 56000; |
| pub const CBR_57600: DWORD = 57600; |
| pub const CBR_115200: DWORD = 115200; |
| pub const CBR_128000: DWORD = 128000; |
| pub const CBR_256000: DWORD = 256000; |
| // CE_* |
| // IE_* |
| // EV_* |
| pub const SETXOFF: DWORD = 1; |
| pub const SETXON: DWORD = 2; |
| pub const SETRTS: DWORD = 3; |
| pub const CLRRTS: DWORD = 4; |
| pub const SETDTR: DWORD = 5; |
| pub const CLRDTR: DWORD = 6; |
| pub const RESETDEV: DWORD = 7; |
| pub const SETBREAK: DWORD = 8; |
| pub const CLRBREAK: DWORD = 9; |
| pub const PURGE_TXABORT: DWORD = 0x0001; |
| pub const PURGE_RXABORT: DWORD = 0x0002; |
| pub const PURGE_TXCLEAR: DWORD = 0x0004; |
| pub const PURGE_RXCLEAR: DWORD = 0x0008; |
| pub const MS_CTS_ON: DWORD = 0x0010; |
| pub const MS_DSR_ON: DWORD = 0x0020; |
| pub const MS_RING_ON: DWORD = 0x0040; |
| pub const MS_RLSD_ON: DWORD = 0x0080; |
| // S_* |
| // NMPWAIT_* |
| // FS_* |
| // OF_* |
| pub const OFS_MAXPATHNAME: usize = 128; |
| STRUCT!{struct OFSTRUCT { |
| cBytes: BYTE, |
| fFixedDisk: BYTE, |
| nErrCode: WORD, |
| Reserved1: WORD, |
| Reserved2: WORD, |
| szPathName: [CHAR; OFS_MAXPATHNAME], |
| }} |
| pub type POFSTRUCT = *mut OFSTRUCT; |
| pub type LPOFSTRUCT = *mut OFSTRUCT; |
| extern "system" { |
| pub fn GlobalAlloc( |
| uFlags: UINT, |
| dwBytes: SIZE_T, |
| ) -> HGLOBAL; |
| pub fn GlobalReAlloc( |
| hMem: HGLOBAL, |
| dwBytes: SIZE_T, |
| uFlags: UINT, |
| ) -> HGLOBAL; |
| pub fn GlobalSize( |
| hMem: HGLOBAL, |
| ) -> SIZE_T; |
| pub fn GlobalFlags( |
| hMem: HGLOBAL, |
| ) -> UINT; |
| pub fn GlobalLock( |
| hMem: HGLOBAL, |
| ) -> LPVOID; |
| pub fn GlobalHandle( |
| pMem: LPCVOID, |
| ) -> HGLOBAL; |
| pub fn GlobalUnlock( |
| hMem: HGLOBAL, |
| ) -> BOOL; |
| pub fn GlobalFree( |
| hMem: HGLOBAL, |
| ) -> HGLOBAL; |
| pub fn GlobalCompact( |
| dwMinFree: DWORD, |
| ) -> SIZE_T; |
| pub fn GlobalFix( |
| hMem: HGLOBAL, |
| ); |
| pub fn GlobalUnfix( |
| hMem: HGLOBAL, |
| ); |
| pub fn GlobalWire( |
| hMem: HGLOBAL, |
| ) -> LPVOID; |
| pub fn GlobalUnWire( |
| hMem: HGLOBAL, |
| ) -> BOOL; |
| pub fn GlobalMemoryStatus( |
| lpBuffer: LPMEMORYSTATUS, |
| ); |
| pub fn LocalAlloc( |
| uFlags: UINT, |
| uBytes: SIZE_T, |
| ) -> HLOCAL; |
| pub fn LocalReAlloc( |
| hMem: HLOCAL, |
| uBytes: SIZE_T, |
| uFlags: UINT, |
| ) -> HLOCAL; |
| pub fn LocalLock( |
| hMem: HLOCAL, |
| ) -> LPVOID; |
| pub fn LocalHandle( |
| pMem: LPCVOID, |
| ) -> HLOCAL; |
| pub fn LocalUnlock( |
| hMem: HLOCAL, |
| ) -> BOOL; |
| pub fn LocalSize( |
| hMem: HLOCAL, |
| ) -> SIZE_T; |
| pub fn LocalFlags( |
| hMem: HLOCAL, |
| ) -> UINT; |
| pub fn LocalFree( |
| hMem: HLOCAL, |
| ) -> HLOCAL; |
| pub fn LocalShrink( |
| hMem: HLOCAL, |
| cbNewSize: UINT, |
| ) -> SIZE_T; |
| pub fn LocalCompact( |
| uMinFree: UINT, |
| ) -> SIZE_T; |
| } |
| // SCS_* |
| extern "system" { |
| pub fn GetBinaryTypeA( |
| lpApplicationName: LPCSTR, |
| lpBinaryType: LPDWORD, |
| ) -> BOOL; |
| pub fn GetBinaryTypeW( |
| lpApplicationName: LPCWSTR, |
| lpBinaryType: LPDWORD, |
| ) -> BOOL; |
| pub fn GetShortPathNameA( |
| lpszLongPath: LPCSTR, |
| lpszShortPath: LPSTR, |
| cchBuffer: DWORD, |
| ) -> DWORD; |
| pub fn GetLongPathNameTransactedA( |
| lpszShortPath: LPCSTR, |
| lpszLongPath: LPSTR, |
| cchBuffer: DWORD, |
| hTransaction: HANDLE, |
| ) -> DWORD; |
| pub fn GetLongPathNameTransactedW( |
| lpszShortPath: LPCWSTR, |
| lpszLongPath: LPWSTR, |
| cchBuffer: DWORD, |
| hTransaction: HANDLE, |
| ) -> DWORD; |
| pub fn GetProcessAffinityMask( |
| hProcess: HANDLE, |
| lpProcessAffinityMask: PDWORD_PTR, |
| lpSystemAffinityMask: PDWORD_PTR, |
| ) -> BOOL; |
| pub fn SetProcessAffinityMask( |
| hProcess: HANDLE, |
| dwProcessAffinityMask: DWORD, |
| ) -> BOOL; |
| pub fn GetProcessIoCounters( |
| hProcess: HANDLE, |
| lpIoCounters: PIO_COUNTERS, |
| ) -> BOOL; |
| pub fn GetProcessWorkingSetSize( |
| hProcess: HANDLE, |
| lpMinimumWorkingSetSize: PSIZE_T, |
| lpMaximumWorkingSetSize: PSIZE_T, |
| ) -> BOOL; |
| pub fn SetProcessWorkingSetSize( |
| hProcess: HANDLE, |
| dwMinimumWorkingSetSize: SIZE_T, |
| dwMaximumWorkingSetSize: SIZE_T, |
| ) -> BOOL; |
| pub fn FatalExit( |
| ExitCode: c_int, |
| ); |
| pub fn SetEnvironmentStringsA( |
| NewEnvironment: LPCH, |
| ) -> BOOL; |
| pub fn SwitchToFiber( |
| lpFiber: LPVOID, |
| ); |
| pub fn DeleteFiber( |
| lpFiber: LPVOID, |
| ); |
| pub fn ConvertFiberToThread() -> BOOL; |
| pub fn CreateFiberEx( |
| dwStackCommitSize: SIZE_T, |
| dwStackReserveSize: SIZE_T, |
| dwFlags: DWORD, |
| lpStartAddress: LPFIBER_START_ROUTINE, |
| lpParameter: LPVOID, |
| ) -> LPVOID; |
| pub fn ConvertThreadToFiberEx( |
| lpParameter: LPVOID, |
| dwFlags: DWORD, |
| ) -> LPVOID; |
| pub fn CreateFiber( |
| dwStackSize: SIZE_T, |
| lpStartAddress: LPFIBER_START_ROUTINE, |
| lpParameter: LPVOID, |
| ) -> LPVOID; |
| pub fn ConvertThreadToFiber( |
| lpParameter: LPVOID, |
| ) -> LPVOID; |
| } |
| pub type PUMS_CONTEXT = *mut c_void; |
| pub type PUMS_COMPLETION_LIST = *mut c_void; |
| pub type UMS_THREAD_INFO_CLASS = RTL_UMS_THREAD_INFO_CLASS; |
| pub type PUMS_THREAD_INFO_CLASS = *mut UMS_THREAD_INFO_CLASS; |
| pub type PUMS_SCHEDULER_ENTRY_POINT = PRTL_UMS_SCHEDULER_ENTRY_POINT; |
| STRUCT!{struct UMS_SCHEDULER_STARTUP_INFO { |
| UmsVersion: ULONG, |
| CompletionList: PUMS_COMPLETION_LIST, |
| SchedulerProc: PUMS_SCHEDULER_ENTRY_POINT, |
| SchedulerParam: PVOID, |
| }} |
| pub type PUMS_SCHEDULER_STARTUP_INFO = *mut UMS_SCHEDULER_STARTUP_INFO; |
| STRUCT!{struct UMS_SYSTEM_THREAD_INFORMATION { |
| UmsVersion: ULONG, |
| ThreadUmsFlags: ULONG, |
| }} |
| BITFIELD!{UMS_SYSTEM_THREAD_INFORMATION ThreadUmsFlags: ULONG [ |
| IsUmsSchedulerThread set_IsUmsSchedulerThread[0..1], |
| IsUmsWorkerThread set_IsUmsWorkerThread[1..2], |
| ]} |
| pub type PUMS_SYSTEM_THREAD_INFORMATION = *mut UMS_SYSTEM_THREAD_INFORMATION; |
| extern "system" { |
| #[cfg(target_pointer_width = "64")] |
| pub fn CreateUmsCompletionList( |
| UmsCompletionList: *mut PUMS_COMPLETION_LIST, |
| ) -> BOOL; |
| #[cfg(target_pointer_width = "64")] |
| pub fn DequeueUmsCompletionListItems( |
| UmsCompletionList: PUMS_COMPLETION_LIST, |
| WaitTimeOut: DWORD, |
| UmsThreadList: *mut PUMS_CONTEXT, |
| ) -> BOOL; |
| #[cfg(target_pointer_width = "64")] |
| pub fn GetUmsCompletionListEvent( |
| UmsCompletionList: PUMS_COMPLETION_LIST, |
| UmsCompletionEvent: PHANDLE, |
| ) -> BOOL; |
| #[cfg(target_pointer_width = "64")] |
| pub fn ExecuteUmsThread( |
| UmsThread: PUMS_CONTEXT, |
| ) -> BOOL; |
| #[cfg(target_pointer_width = "64")] |
| pub fn UmsThreadYield( |
| SchedulerParam: PVOID, |
| ) -> BOOL; |
| #[cfg(target_pointer_width = "64")] |
| pub fn DeleteUmsCompletionList( |
| UmsCompletionList: PUMS_COMPLETION_LIST, |
| ) -> BOOL; |
| #[cfg(target_pointer_width = "64")] |
| pub fn GetCurrentUmsThread() -> PUMS_CONTEXT; |
| #[cfg(target_pointer_width = "64")] |
| pub fn GetNextUmsListItem( |
| UmsContext: PUMS_CONTEXT, |
| ) -> PUMS_CONTEXT; |
| #[cfg(target_pointer_width = "64")] |
| pub fn QueryUmsThreadInformation( |
| UmsThread: PUMS_CONTEXT, |
| UmsThreadInfoClass: UMS_THREAD_INFO_CLASS, |
| UmsThreadInformation: PVOID, |
| UmsThreadInformationLength: ULONG, |
| ReturnLength: PULONG, |
| ) -> BOOL; |
| #[cfg(target_pointer_width = "64")] |
| pub fn SetUmsThreadInformation( |
| UmsThread: PUMS_CONTEXT, |
| UmsThreadInfoClass: UMS_THREAD_INFO_CLASS, |
| UmsThreadInformation: PVOID, |
| UmsThreadInformationLength: ULONG, |
| ) -> BOOL; |
| #[cfg(target_pointer_width = "64")] |
| pub fn DeleteUmsThreadContext( |
| UmsThread: PUMS_CONTEXT, |
| ) -> BOOL; |
| #[cfg(target_pointer_width = "64")] |
| pub fn CreateUmsThreadContext( |
| lpUmsThread: *mut PUMS_CONTEXT, |
| ) -> BOOL; |
| #[cfg(target_pointer_width = "64")] |
| pub fn EnterUmsSchedulingMode( |
| SchedulerStartupInfo: PUMS_SCHEDULER_STARTUP_INFO, |
| ) -> BOOL; |
| #[cfg(target_pointer_width = "64")] |
| pub fn GetUmsSystemThreadInformation( |
| ThreadHandle: HANDLE, |
| SystemThreadInfo: PUMS_SYSTEM_THREAD_INFORMATION, |
| ) -> BOOL; |
| pub fn SetThreadAffinityMask( |
| hThread: HANDLE, |
| dwThreadAffinityMask: DWORD_PTR, |
| ) -> DWORD_PTR; |
| pub fn SetProcessDEPPolicy( |
| dwFlags: DWORD, |
| ) -> BOOL; |
| pub fn GetProcessDEPPolicy( |
| hProcess: HANDLE, |
| lpFlags: LPDWORD, |
| lpPermanent: PBOOL, |
| ) -> BOOL; |
| pub fn RequestWakeupLatency( |
| latency: LATENCY_TIME, |
| ) -> BOOL; |
| pub fn IsSystemResumeAutomatic() -> BOOL; |
| pub fn GetThreadSelectorEntry( |
| hThread: HANDLE, |
| dwSelector: DWORD, |
| lpSelectorEntry: LPLDT_ENTRY, |
| ) -> BOOL; |
| pub fn SetThreadExecutionState( |
| esFlags: EXECUTION_STATE, |
| ) -> EXECUTION_STATE; |
| pub fn PowerCreateRequest( |
| Context: PREASON_CONTEXT, |
| ) -> HANDLE; |
| pub fn PowerSetRequest( |
| PowerRequest: HANDLE, |
| RequestType: POWER_REQUEST_TYPE, |
| ) -> BOOL; |
| pub fn PowerClearRequest( |
| PowerRequest: HANDLE, |
| RequestType: POWER_REQUEST_TYPE, |
| ) -> BOOL; |
| pub fn RestoreLastError( |
| dwErrCode: DWORD, |
| ); |
| } |
| pub const FILE_SKIP_COMPLETION_PORT_ON_SUCCESS: UCHAR = 0x1; |
| pub const FILE_SKIP_SET_EVENT_ON_HANDLE: UCHAR = 0x2; |
| extern "system" { |
| pub fn SetFileCompletionNotificationModes( |
| FileHandle: HANDLE, |
| Flags: UCHAR, |
| ) -> BOOL; |
| } |
| pub const SEM_FAILCRITICALERRORS: UINT = 0x0001; |
| pub const SEM_NOGPFAULTERRORBOX: UINT = 0x0002; |
| pub const SEM_NOALIGNMENTFAULTEXCEPT: UINT = 0x0004; |
| pub const SEM_NOOPENFILEERRORBOX: UINT = 0x8000; |
| extern "system" { |
| pub fn Wow64GetThreadContext( |
| hThread: HANDLE, |
| lpContext: PWOW64_CONTEXT, |
| ) -> BOOL; |
| pub fn Wow64SetThreadContext( |
| hThread: HANDLE, |
| lpContext: *const WOW64_CONTEXT, |
| ) -> BOOL; |
| pub fn Wow64GetThreadSelectorEntry( |
| hThread: HANDLE, |
| dwSelector: DWORD, |
| lpSelectorEntry: PWOW64_LDT_ENTRY, |
| ) -> BOOL; |
| pub fn Wow64SuspendThread( |
| hThread: HANDLE, |
| ) -> DWORD; |
| pub fn DebugSetProcessKillOnExit( |
| KillOnExit: BOOL, |
| ) -> BOOL; |
| pub fn DebugBreakProcess( |
| Process: HANDLE, |
| ) -> BOOL; |
| pub fn PulseEvent( |
| hEvent: HANDLE, |
| ) -> BOOL; |
| pub fn GlobalDeleteAtom( |
| nAtom: ATOM, |
| ) -> ATOM; |
| pub fn InitAtomTable( |
| nSize: DWORD, |
| ) -> BOOL; |
| pub fn DeleteAtom( |
| nAtom: ATOM, |
| ) -> ATOM; |
| pub fn SetHandleCount( |
| uNumber: UINT, |
| ) -> UINT; |
| pub fn RequestDeviceWakeup( |
| hDevice: HANDLE, |
| ) -> BOOL; |
| pub fn CancelDeviceWakeupRequest( |
| hDevice: HANDLE, |
| ) -> BOOL; |
| pub fn GetDevicePowerState( |
| hDevice: HANDLE, |
| pfOn: *mut BOOL, |
| ) -> BOOL; |
| pub fn SetMessageWaitingIndicator( |
| hMsgIndicator: HANDLE, |
| ulMsgCount: ULONG, |
| ) -> BOOL; |
| pub fn SetFileShortNameA( |
| hFile: HANDLE, |
| lpShortName: LPCSTR, |
| ) -> BOOL; |
| pub fn SetFileShortNameW( |
| hFile: HANDLE, |
| lpShortName: LPCWSTR, |
| ) -> BOOL; |
| } |
| pub const HANDLE_FLAG_INHERIT: DWORD = 0x00000001; |
| pub const HANDLE_FLAG_PROTECT_FROM_CLOSE: DWORD = 0x00000002; |
| extern "system" { |
| pub fn LoadModule( |
| lpModuleName: LPCSTR, |
| lpParameterBlock: LPVOID, |
| ) -> DWORD; |
| pub fn WinExec( |
| lpCmdLine: LPCSTR, |
| uCmdShow: UINT, |
| ) -> UINT; |
| // ClearCommBreak |
| // ClearCommError |
| // SetupComm |
| // EscapeCommFunction |
| // GetCommConfig |
| // GetCommMask |
| // GetCommProperties |
| // GetCommModemStatus |
| // GetCommState |
| // GetCommTimeouts |
| // PurgeComm |
| // SetCommBreak |
| // SetCommConfig |
| // SetCommMask |
| // SetCommState |
| // SetCommTimeouts |
| // TransmitCommChar |
| // WaitCommEvent |
| pub fn SetTapePosition( |
| hDevice: HANDLE, |
| dwPositionMethod: DWORD, |
| dwPartition: DWORD, |
| dwOffsetLow: DWORD, |
| dwOffsetHigh: DWORD, |
| bImmediate: BOOL, |
| ) -> DWORD; |
| pub fn GetTapePosition( |
| hDevice: HANDLE, |
| dwPositionType: DWORD, |
| lpdwPartition: LPDWORD, |
| lpdwOffsetLow: LPDWORD, |
| lpdwOffsetHigh: LPDWORD, |
| ) -> DWORD; |
| pub fn PrepareTape( |
| hDevice: HANDLE, |
| dwOperation: DWORD, |
| bImmediate: BOOL, |
| ) -> DWORD; |
| pub fn EraseTape( |
| hDevice: HANDLE, |
| dwEraseType: DWORD, |
| bImmediate: BOOL, |
| ) -> DWORD; |
| pub fn CreateTapePartition( |
| hDevice: HANDLE, |
| dwPartitionMethod: DWORD, |
| dwCount: DWORD, |
| dwSize: DWORD, |
| ) -> DWORD; |
| pub fn WriteTapemark( |
| hDevice: HANDLE, |
| dwTapemarkType: DWORD, |
| dwTapemarkCount: DWORD, |
| bImmediate: BOOL, |
| ) -> DWORD; |
| pub fn GetTapeStatus( |
| hDevice: HANDLE, |
| ) -> DWORD; |
| pub fn GetTapeParameters( |
| hDevice: HANDLE, |
| dwOperation: DWORD, |
| lpdwSize: LPDWORD, |
| lpTapeInformation: LPVOID, |
| ) -> DWORD; |
| pub fn SetTapeParameters( |
| hDevice: HANDLE, |
| dwOperation: DWORD, |
| lpTapeInformation: LPVOID, |
| ) -> DWORD; |
| pub fn MulDiv( |
| nNumber: c_int, |
| nNumerator: c_int, |
| nDenominator: c_int, |
| ) -> c_int; |
| } |
| ENUM!{enum DEP_SYSTEM_POLICY_TYPE { |
| DEPPolicyAlwaysOff = 0, |
| DEPPolicyAlwaysOn, |
| DEPPolicyOptIn, |
| DEPPolicyOptOut, |
| DEPTotalPolicyCount, |
| }} |
| extern "system" { |
| pub fn GetSystemDEPPolicy() -> DEP_SYSTEM_POLICY_TYPE; |
| pub fn GetSystemRegistryQuota( |
| pdwQuotaAllowed: PDWORD, |
| pdwQuotaUsed: PDWORD, |
| ) -> BOOL; |
| pub fn FileTimeToDosDateTime( |
| lpFileTime: *const FILETIME, |
| lpFatDate: LPWORD, |
| lpFatTime: LPWORD, |
| ) -> BOOL; |
| pub fn DosDateTimeToFileTime( |
| wFatDate: WORD, |
| wFatTime: WORD, |
| lpFileTime: LPFILETIME, |
| ) -> BOOL; |
| pub fn FormatMessageA( |
| dwFlags: DWORD, |
| lpSource: LPCVOID, |
| dwMessageId: DWORD, |
| dwLanguageId: DWORD, |
| lpBuffer: LPSTR, |
| nSize: DWORD, |
| Arguments: *mut va_list, |
| ) -> DWORD; |
| pub fn FormatMessageW( |
| dwFlags: DWORD, |
| lpSource: LPCVOID, |
| dwMessageId: DWORD, |
| dwLanguageId: DWORD, |
| lpBuffer: LPWSTR, |
| nSize: DWORD, |
| Arguments: *mut va_list, |
| ) -> DWORD; |
| } |
| pub const FORMAT_MESSAGE_IGNORE_INSERTS: DWORD = 0x00000200; |
| pub const FORMAT_MESSAGE_FROM_STRING: DWORD = 0x00000400; |
| pub const FORMAT_MESSAGE_FROM_HMODULE: DWORD = 0x00000800; |
| pub const FORMAT_MESSAGE_FROM_SYSTEM: DWORD = 0x00001000; |
| pub const FORMAT_MESSAGE_ARGUMENT_ARRAY: DWORD = 0x00002000; |
| pub const FORMAT_MESSAGE_MAX_WIDTH_MASK: DWORD = 0x000000FF; |
| pub const FORMAT_MESSAGE_ALLOCATE_BUFFER: DWORD = 0x00000100; |
| extern "system" { |
| pub fn CreateMailslotA( |
| lpName: LPCSTR, |
| nMaxMessageSize: DWORD, |
| lReadTimeout: DWORD, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| ) -> HANDLE; |
| pub fn CreateMailslotW( |
| lpName: LPCWSTR, |
| nMaxMessageSize: DWORD, |
| lReadTimeout: DWORD, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| ) -> HANDLE; |
| pub fn GetMailslotInfo( |
| hMailslot: HANDLE, |
| lpMaxMessageSize: LPDWORD, |
| lpNextSize: LPDWORD, |
| lpMessageCount: LPDWORD, |
| lpReadTimeout: LPDWORD, |
| ) -> BOOL; |
| pub fn SetMailslotInfo( |
| hMailslot: HANDLE, |
| lReadTimeout: DWORD, |
| ) -> BOOL; |
| // pub fn EncryptFileA(); |
| // pub fn EncryptFileW(); |
| // pub fn DecryptFileA(); |
| // pub fn DecryptFileW(); |
| // pub fn FileEncryptionStatusA(); |
| // pub fn FileEncryptionStatusW(); |
| // pub fn OpenEncryptedFileRawA(); |
| // pub fn OpenEncryptedFileRawW(); |
| // pub fn ReadEncryptedFileRaw(); |
| // pub fn WriteEncryptedFileRaw(); |
| // pub fn CloseEncryptedFileRaw(); |
| pub fn lstrcmpA( |
| lpString1: LPCSTR, |
| lpString2: LPCSTR, |
| ) -> c_int; |
| pub fn lstrcmpW( |
| lpString1: LPCWSTR, |
| lpString2: LPCWSTR, |
| ) -> c_int; |
| pub fn lstrcmpiA( |
| lpString1: LPCSTR, |
| lpString2: LPCSTR, |
| ) -> c_int; |
| pub fn lstrcmpiW( |
| lpString1: LPCWSTR, |
| lpString2: LPCWSTR, |
| ) -> c_int; |
| pub fn lstrcpynA( |
| lpString1: LPSTR, |
| lpString2: LPCSTR, |
| iMaxLength: c_int, |
| ) -> LPSTR; |
| pub fn lstrcpynW( |
| lpString1: LPWSTR, |
| lpString2: LPCWSTR, |
| iMaxLength: c_int, |
| ) -> LPWSTR; |
| pub fn lstrcpyA( |
| lpString1: LPSTR, |
| lpString2: LPCSTR, |
| ) -> LPSTR; |
| pub fn lstrcpyW( |
| lpString1: LPWSTR, |
| lpString2: LPCWSTR, |
| ) -> LPWSTR; |
| pub fn lstrcatA( |
| lpString1: LPSTR, |
| lpString2: LPCSTR, |
| ) -> LPSTR; |
| pub fn lstrcatW( |
| lpString1: LPWSTR, |
| lpString2: LPCWSTR, |
| ) -> LPWSTR; |
| pub fn lstrlenA( |
| lpString: LPCSTR, |
| ) -> c_int; |
| pub fn lstrlenW( |
| lpString: LPCWSTR, |
| ) -> c_int; |
| pub fn OpenFile( |
| lpFileName: LPCSTR, |
| lpReOpenBuff: LPOFSTRUCT, |
| uStyle: UINT, |
| ) -> HFILE; |
| pub fn _lopen( |
| lpPathName: LPCSTR, |
| iReadWrite: c_int, |
| ) -> HFILE; |
| pub fn _lcreat( |
| lpPathName: LPCSTR, |
| iAttrubute: c_int, |
| ) -> HFILE; |
| pub fn _lread( |
| hFile: HFILE, |
| lpBuffer: LPVOID, |
| uBytes: UINT, |
| ) -> UINT; |
| pub fn _lwrite( |
| hFile: HFILE, |
| lpBuffer: LPCCH, |
| uBytes: UINT, |
| ) -> UINT; |
| pub fn _hread( |
| hFile: HFILE, |
| lpBuffer: LPVOID, |
| lBytes: c_long, |
| ) -> c_long; |
| pub fn _hwrite( |
| hFile: HFILE, |
| lpBuffer: LPCCH, |
| lBytes: c_long, |
| ) -> c_long; |
| pub fn _lclose( |
| hFile: HFILE, |
| ) -> HFILE; |
| pub fn _llseek( |
| hFile: HFILE, |
| lOffset: LONG, |
| iOrigin: c_int, |
| ) -> LONG; |
| // pub fn IsTextUnicode(); |
| // pub fn SignalObjectAndWait(); |
| pub fn BackupRead( |
| hFile: HANDLE, |
| lpBuffer: LPBYTE, |
| nNumberOfBytesToRead: DWORD, |
| lpNumberOfBytesRead: LPDWORD, |
| bAbort: BOOL, |
| bProcessSecurity: BOOL, |
| lpContext: *mut LPVOID, |
| ) -> BOOL; |
| pub fn BackupSeek( |
| hFile: HANDLE, |
| dwLowBytesToSeek: DWORD, |
| dwHighBytesToSeek: DWORD, |
| lpdwLowByteSeeked: LPDWORD, |
| lpdwHighByteSeeked: LPDWORD, |
| lpContext: *mut LPVOID, |
| ) -> BOOL; |
| pub fn BackupWrite( |
| hFile: HANDLE, |
| lpBuffer: LPBYTE, |
| nNumberOfBytesToWrite: DWORD, |
| lpNumberOfBytesWritten: LPDWORD, |
| bAbort: BOOL, |
| bProcessSecurity: BOOL, |
| lpContext: *mut LPVOID, |
| ) -> BOOL; |
| } |
| //2886 |
| pub const STARTF_USESHOWWINDOW: DWORD = 0x00000001; |
| pub const STARTF_USESIZE: DWORD = 0x00000002; |
| pub const STARTF_USEPOSITION: DWORD = 0x00000004; |
| pub const STARTF_USECOUNTCHARS: DWORD = 0x00000008; |
| pub const STARTF_USEFILLATTRIBUTE: DWORD = 0x00000010; |
| pub const STARTF_RUNFULLSCREEN: DWORD = 0x00000020; |
| pub const STARTF_FORCEONFEEDBACK: DWORD = 0x00000040; |
| pub const STARTF_FORCEOFFFEEDBACK: DWORD = 0x00000080; |
| pub const STARTF_USESTDHANDLES: DWORD = 0x00000100; |
| pub const STARTF_USEHOTKEY: DWORD = 0x00000200; |
| pub const STARTF_TITLEISLINKNAME: DWORD = 0x00000800; |
| pub const STARTF_TITLEISAPPID: DWORD = 0x00001000; |
| pub const STARTF_PREVENTPINNING: DWORD = 0x00002000; |
| pub const STARTF_UNTRUSTEDSOURCE: DWORD = 0x00008000; |
| STRUCT!{struct STARTUPINFOEXA { |
| StartupInfo: STARTUPINFOA, |
| lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, |
| }} |
| pub type LPSTARTUPINFOEXA = *mut STARTUPINFOEXA; |
| STRUCT!{struct STARTUPINFOEXW { |
| StartupInfo: STARTUPINFOW, |
| lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST, |
| }} |
| pub type LPSTARTUPINFOEXW = *mut STARTUPINFOEXW; |
| extern "system" { |
| pub fn OpenMutexA( |
| dwDesiredAccess: DWORD, |
| bInheritHandle: BOOL, |
| lpName: LPCSTR, |
| ) -> HANDLE; |
| pub fn CreateSemaphoreA( |
| lpSemaphoreAttributes: LPSECURITY_ATTRIBUTES, |
| lInitialCount: LONG, |
| lMaximumCount: LONG, |
| lpName: LPCSTR, |
| ) -> HANDLE; |
| pub fn OpenSemaphoreA( |
| dwDesiredAccess: DWORD, |
| bInheritHandle: BOOL, |
| lpName: LPCSTR, |
| ) -> HANDLE; |
| pub fn CreateWaitableTimerA( |
| lpTimerAttributes: LPSECURITY_ATTRIBUTES, |
| bManualReset: BOOL, |
| lpTimerName: LPCSTR, |
| ) -> HANDLE; |
| pub fn OpenWaitableTimerA( |
| dwDesiredAccess: DWORD, |
| bInheritHandle: BOOL, |
| lpTimerName: LPCSTR, |
| ) -> HANDLE; |
| pub fn CreateSemaphoreExA( |
| lpSemaphoreAttributes: LPSECURITY_ATTRIBUTES, |
| lInitialCount: LONG, |
| lMaximumCount: LONG, |
| lpName: LPCSTR, |
| dwFlags: DWORD, |
| dwDesiredAccess: DWORD, |
| ) -> HANDLE; |
| pub fn CreateWaitableTimerExA( |
| lpTimerAttributes: LPSECURITY_ATTRIBUTES, |
| lpTimerName: LPCSTR, |
| dwFlags: DWORD, |
| dwDesiredAccess: DWORD, |
| ) -> HANDLE; |
| pub fn CreateFileMappingA( |
| hFile: HANDLE, |
| lpAttributes: LPSECURITY_ATTRIBUTES, |
| flProtect: DWORD, |
| dwMaximumSizeHigh: DWORD, |
| dwMaximumSizeLow: DWORD, |
| lpName: LPCSTR, |
| ) -> HANDLE; |
| pub fn CreateFileMappingNumaA( |
| hFile: HANDLE, |
| lpFileMappingAttributes: LPSECURITY_ATTRIBUTES, |
| flProtect: DWORD, |
| dwMaximumSizeHigh: DWORD, |
| dwMaximumSizeLow: DWORD, |
| lpName: LPCSTR, |
| nndPreferred: DWORD, |
| ) -> HANDLE; |
| pub fn OpenFileMappingA( |
| dwDesiredAccess: DWORD, |
| bInheritHandle: BOOL, |
| lpName: LPCSTR, |
| ) -> HANDLE; |
| pub fn GetLogicalDriveStringsA( |
| nBufferLength: DWORD, |
| lpBuffer: LPSTR, |
| ) -> DWORD; |
| pub fn LoadPackagedLibrary( |
| lpwLibFileName: LPCWSTR, |
| Reserved: DWORD, |
| ) -> HMODULE; |
| pub fn QueryFullProcessImageNameA( |
| hProcess: HANDLE, |
| dwFlags: DWORD, |
| lpExeName: LPSTR, |
| lpdwSize: PDWORD, |
| ) -> BOOL; |
| pub fn QueryFullProcessImageNameW( |
| hProcess: HANDLE, |
| dwFlags: DWORD, |
| lpExeName: LPWSTR, |
| lpdwSize: PDWORD, |
| ) -> BOOL; |
| } |
| //3233 |
| extern "system" { |
| pub fn GetStartupInfoA( |
| lpStartupInfo: LPSTARTUPINFOA, |
| ); |
| pub fn GetFirmwareEnvironmentVariableA( |
| lpName: LPCSTR, |
| lpGuid: LPCSTR, |
| pBuffer: PVOID, |
| nSize: DWORD, |
| ) -> DWORD; |
| pub fn GetFirmwareEnvironmentVariableW( |
| lpName: LPCWSTR, |
| lpGuid: LPCWSTR, |
| pBuffer: PVOID, |
| nSize: DWORD, |
| ) -> DWORD; |
| pub fn GetFirmwareEnvironmentVariableExA( |
| lpName: LPCSTR, |
| lpGuid: LPCSTR, |
| pBuffer: PVOID, |
| nSize: DWORD, |
| pdwAttribubutes: PDWORD, |
| ) -> DWORD; |
| pub fn GetFirmwareEnvironmentVariableExW( |
| lpName: LPCWSTR, |
| lpGuid: LPCWSTR, |
| pBuffer: PVOID, |
| nSize: DWORD, |
| pdwAttribubutes: PDWORD, |
| ) -> DWORD; |
| pub fn SetFirmwareEnvironmentVariableA( |
| lpName: LPCSTR, |
| lpGuid: LPCSTR, |
| pValue: PVOID, |
| nSize: DWORD, |
| ) -> BOOL; |
| pub fn SetFirmwareEnvironmentVariableW( |
| lpName: LPCWSTR, |
| lpGuid: LPCWSTR, |
| pValue: PVOID, |
| nSize: DWORD, |
| ) -> BOOL; |
| pub fn SetFirmwareEnvironmentVariableExA( |
| lpName: LPCSTR, |
| lpGuid: LPCSTR, |
| pValue: PVOID, |
| nSize: DWORD, |
| dwAttributes: DWORD, |
| ) -> BOOL; |
| pub fn SetFirmwareEnvironmentVariableExW( |
| lpName: LPCWSTR, |
| lpGuid: LPCWSTR, |
| pValue: PVOID, |
| nSize: DWORD, |
| dwAttributes: DWORD, |
| ) -> BOOL; |
| pub fn GetFirmwareType( |
| FirmwareType: PFIRMWARE_TYPE, |
| ) -> BOOL; |
| pub fn IsNativeVhdBoot( |
| NativeVhdBoot: PBOOL, |
| ) -> BOOL; |
| pub fn FindResourceA( |
| hModule: HMODULE, |
| lpName: LPCSTR, |
| lpType: LPCSTR, |
| ) -> HRSRC; |
| pub fn FindResourceExA( |
| hModule: HMODULE, |
| lpName: LPCSTR, |
| lpType: LPCSTR, |
| wLanguage: WORD, |
| ) -> HRSRC; |
| pub fn EnumResourceTypesA( |
| hModule: HMODULE, |
| lpEnumFunc: ENUMRESTYPEPROCA, |
| lParam: LONG_PTR, |
| ) -> BOOL; |
| pub fn EnumResourceTypesW( |
| hModule: HMODULE, |
| lpEnumFunc: ENUMRESTYPEPROCW, |
| lParam: LONG_PTR, |
| ) -> BOOL; |
| pub fn EnumResourceNamesA( |
| hModule: HMODULE, |
| lpType: LPCSTR, |
| lpEnumFunc: ENUMRESNAMEPROCA, |
| lParam: LONG_PTR, |
| ) -> BOOL; |
| pub fn EnumResourceLanguagesA( |
| hModule: HMODULE, |
| lpType: LPCSTR, |
| lpName: LPCSTR, |
| lpEnumFunc: ENUMRESLANGPROCA, |
| lParam: LONG_PTR, |
| ) -> BOOL; |
| pub fn EnumResourceLanguagesW( |
| hModule: HMODULE, |
| lpType: LPCWSTR, |
| lpName: LPCWSTR, |
| lpEnumFunc: ENUMRESLANGPROCW, |
| lParam: LONG_PTR, |
| ) -> BOOL; |
| pub fn BeginUpdateResourceA( |
| pFileName: LPCSTR, |
| bDeleteExistingResources: BOOL, |
| ) -> HANDLE; |
| pub fn BeginUpdateResourceW( |
| pFileName: LPCWSTR, |
| bDeleteExistingResources: BOOL, |
| ) -> HANDLE; |
| pub fn UpdateResourceA( |
| hUpdate: HANDLE, |
| lpType: LPCSTR, |
| lpName: LPCSTR, |
| wLanguage: WORD, |
| lpData: LPVOID, |
| cb: DWORD, |
| ) -> BOOL; |
| pub fn UpdateResourceW( |
| hUpdate: HANDLE, |
| lpType: LPCWSTR, |
| lpName: LPCWSTR, |
| wLanguage: WORD, |
| lpData: LPVOID, |
| cb: DWORD, |
| ) -> BOOL; |
| pub fn EndUpdateResourceA( |
| hUpdate: HANDLE, |
| fDiscard: BOOL, |
| ) -> BOOL; |
| pub fn EndUpdateResourceW( |
| hUpdate: HANDLE, |
| fDiscard: BOOL, |
| ) -> BOOL; |
| pub fn GlobalAddAtomA( |
| lpString: LPCSTR, |
| ) -> ATOM; |
| pub fn GlobalAddAtomW( |
| lpString: LPCWSTR, |
| ) -> ATOM; |
| pub fn GlobalAddAtomExA( |
| lpString: LPCSTR, |
| Flags: DWORD, |
| ) -> ATOM; |
| pub fn GlobalAddAtomExW( |
| lpString: LPCWSTR, |
| Flags: DWORD, |
| ) -> ATOM; |
| pub fn GlobalFindAtomA( |
| lpString: LPCSTR, |
| ) -> ATOM; |
| pub fn GlobalFindAtomW( |
| lpString: LPCWSTR, |
| ) -> ATOM; |
| pub fn GlobalGetAtomNameA( |
| nAtom: ATOM, |
| lpBuffer: LPSTR, |
| nSize: c_int, |
| ) -> UINT; |
| pub fn GlobalGetAtomNameW( |
| nAtom: ATOM, |
| lpBuffer: LPWSTR, |
| nSize: c_int, |
| ) -> UINT; |
| pub fn AddAtomA( |
| lpString: LPCSTR, |
| ) -> ATOM; |
| pub fn AddAtomW( |
| lpString: LPCWSTR, |
| ) -> ATOM; |
| pub fn FindAtomA( |
| lpString: LPCSTR, |
| ) -> ATOM; |
| pub fn FindAtomW( |
| lpString: LPCWSTR, |
| ) -> ATOM; |
| pub fn GetAtomNameA( |
| nAtom: ATOM, |
| lpBuffer: LPSTR, |
| nSize: c_int, |
| ) -> UINT; |
| pub fn GetAtomNameW( |
| nAtom: ATOM, |
| lpBuffer: LPWSTR, |
| nSize: c_int, |
| ) -> UINT; |
| pub fn GetProfileIntA( |
| lpAppName: LPCSTR, |
| lpKeyName: LPCSTR, |
| nDefault: INT, |
| ) -> UINT; |
| pub fn GetProfileIntW( |
| lpAppName: LPCWSTR, |
| lpKeyName: LPCWSTR, |
| nDefault: INT, |
| ) -> UINT; |
| pub fn GetProfileStringA( |
| lpAppName: LPCSTR, |
| lpKeyName: LPCSTR, |
| lpDefault: LPCSTR, |
| lpReturnedString: LPSTR, |
| nSize: DWORD, |
| ) -> DWORD; |
| pub fn GetProfileStringW( |
| lpAppName: LPCWSTR, |
| lpKeyName: LPCWSTR, |
| lpDefault: LPCWSTR, |
| lpReturnedString: LPWSTR, |
| nSize: DWORD, |
| ) -> DWORD; |
| pub fn WriteProfileStringA( |
| lpAppName: LPCSTR, |
| lpKeyName: LPCSTR, |
| lpString: LPCSTR, |
| ) -> BOOL; |
| pub fn WriteProfileStringW( |
| lpAppName: LPCWSTR, |
| lpKeyName: LPCWSTR, |
| lpString: LPCWSTR, |
| ) -> BOOL; |
| pub fn GetProfileSectionA( |
| lpAppName: LPCSTR, |
| lpReturnedString: LPSTR, |
| nSize: DWORD, |
| ) -> DWORD; |
| pub fn GetProfileSectionW( |
| lpAppName: LPCWSTR, |
| lpReturnedString: LPWSTR, |
| nSize: DWORD, |
| ) -> DWORD; |
| pub fn WriteProfileSectionA( |
| lpAppName: LPCSTR, |
| lpString: LPCSTR, |
| ) -> BOOL; |
| pub fn WriteProfileSectionW( |
| lpAppName: LPCWSTR, |
| lpString: LPCWSTR, |
| ) -> BOOL; |
| pub fn GetPrivateProfileIntA( |
| lpAppName: LPCSTR, |
| lpKeyName: LPCSTR, |
| nDefault: INT, |
| lpFileName: LPCSTR, |
| ) -> UINT; |
| pub fn GetPrivateProfileIntW( |
| lpAppName: LPCWSTR, |
| lpKeyName: LPCWSTR, |
| nDefault: INT, |
| lpFileName: LPCWSTR, |
| ) -> UINT; |
| pub fn GetPrivateProfileStringA( |
| lpAppName: LPCSTR, |
| lpKeyName: LPCSTR, |
| lpDefault: LPCSTR, |
| lpReturnedString: LPSTR, |
| nSize: DWORD, |
| lpFileName: LPCSTR, |
| ) -> DWORD; |
| pub fn GetPrivateProfileStringW( |
| lpAppName: LPCWSTR, |
| lpKeyName: LPCWSTR, |
| lpDefault: LPCWSTR, |
| lpReturnedString: LPWSTR, |
| nSize: DWORD, |
| lpFileName: LPCWSTR, |
| ) -> DWORD; |
| pub fn WritePrivateProfileStringA( |
| lpAppName: LPCSTR, |
| lpKeyName: LPCSTR, |
| lpString: LPCSTR, |
| lpFileName: LPCSTR, |
| ) -> BOOL; |
| pub fn WritePrivateProfileStringW( |
| lpAppName: LPCWSTR, |
| lpKeyName: LPCWSTR, |
| lpString: LPCWSTR, |
| lpFileName: LPCWSTR, |
| ) -> BOOL; |
| pub fn GetPrivateProfileSectionA( |
| lpAppName: LPCSTR, |
| lpReturnedString: LPSTR, |
| nSize: DWORD, |
| lpFileName: LPCSTR, |
| ) -> DWORD; |
| pub fn GetPrivateProfileSectionW( |
| lpAppName: LPCWSTR, |
| lpReturnedString: LPWSTR, |
| nSize: DWORD, |
| lpFileName: LPCWSTR, |
| ) -> DWORD; |
| pub fn WritePrivateProfileSectionA( |
| lpAppName: LPCSTR, |
| lpString: LPCSTR, |
| lpFileName: LPCSTR, |
| ) -> BOOL; |
| pub fn WritePrivateProfileSectionW( |
| lpAppName: LPCWSTR, |
| lpString: LPCWSTR, |
| lpFileName: LPCWSTR, |
| ) -> BOOL; |
| pub fn GetPrivateProfileSectionNamesA( |
| lpszReturnBuffer: LPSTR, |
| nSize: DWORD, |
| lpFileName: LPCSTR, |
| ) -> DWORD; |
| pub fn GetPrivateProfileSectionNamesW( |
| lpszReturnBuffer: LPWSTR, |
| nSize: DWORD, |
| lpFileName: LPCWSTR, |
| ) -> DWORD; |
| pub fn GetPrivateProfileStructA( |
| lpszSection: LPCSTR, |
| lpszKey: LPCSTR, |
| lpStruct: LPVOID, |
| uSizeStruct: UINT, |
| szFile: LPCSTR, |
| ) -> BOOL; |
| pub fn GetPrivateProfileStructW( |
| lpszSection: LPCWSTR, |
| lpszKey: LPCWSTR, |
| lpStruct: LPVOID, |
| uSizeStruct: UINT, |
| szFile: LPCWSTR, |
| ) -> BOOL; |
| pub fn WritePrivateProfileStructA( |
| lpszSection: LPCSTR, |
| lpszKey: LPCSTR, |
| lpStruct: LPVOID, |
| uSizeStruct: UINT, |
| szFile: LPCSTR, |
| ) -> BOOL; |
| pub fn WritePrivateProfileStructW( |
| lpszSection: LPCWSTR, |
| lpszKey: LPCWSTR, |
| lpStruct: LPVOID, |
| uSizeStruct: UINT, |
| szFile: LPCWSTR, |
| ) -> BOOL; |
| pub fn Wow64EnableWow64FsRedirection( |
| Wow64FsEnableRedirection: BOOLEAN, |
| ) -> BOOLEAN; |
| pub fn SetDllDirectoryA( |
| lpPathName: LPCSTR, |
| ) -> BOOL; |
| pub fn SetDllDirectoryW( |
| lpPathName: LPCWSTR, |
| ) -> BOOL; |
| pub fn GetDllDirectoryA( |
| nBufferLength: DWORD, |
| lpBuffer: LPSTR, |
| ) -> DWORD; |
| pub fn GetDllDirectoryW( |
| nBufferLength: DWORD, |
| lpBuffer: LPWSTR, |
| ) -> DWORD; |
| pub fn SetSearchPathMode( |
| Flags: DWORD, |
| ) -> BOOL; |
| pub fn CreateDirectoryExA( |
| lpTemplateDirectory: LPCSTR, |
| lpNewDirectory: LPCSTR, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| ) -> BOOL; |
| pub fn CreateDirectoryExW( |
| lpTemplateDirectory: LPCWSTR, |
| lpNewDirectory: LPCWSTR, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| ) -> BOOL; |
| pub fn CreateDirectoryTransactedA( |
| lpTemplateDirectory: LPCSTR, |
| lpNewDirectory: LPCSTR, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| pub fn CreateDirectoryTransactedW( |
| lpTemplateDirectory: LPCWSTR, |
| lpNewDirectory: LPCWSTR, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| pub fn RemoveDirectoryTransactedA( |
| lpPathName: LPCSTR, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| pub fn RemoveDirectoryTransactedW( |
| lpPathName: LPCWSTR, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| pub fn GetFullPathNameTransactedA( |
| lpFileName: LPCSTR, |
| nBufferLength: DWORD, |
| lpBuffer: LPSTR, |
| lpFilePart: *mut LPSTR, |
| hTransaction: HANDLE, |
| ) -> DWORD; |
| pub fn GetFullPathNameTransactedW( |
| lpFileName: LPCWSTR, |
| nBufferLength: DWORD, |
| lpBuffer: LPWSTR, |
| lpFilePart: *mut LPWSTR, |
| hTransaction: HANDLE, |
| ); |
| pub fn DefineDosDeviceA( |
| dwFlags: DWORD, |
| lpDeviceName: LPCSTR, |
| lpTargetPath: LPCSTR, |
| ) -> BOOL; |
| pub fn QueryDosDeviceA( |
| lpDeviceName: LPCSTR, |
| lpTargetPath: LPSTR, |
| ucchMax: DWORD, |
| ) -> DWORD; |
| pub fn CreateFileTransactedA( |
| lpFileName: LPCSTR, |
| dwDesiredAccess: DWORD, |
| dwShareMode: DWORD, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| dwCreationDisposition: DWORD, |
| dwFlagsAndAttributes: DWORD, |
| hTemplateFile: HANDLE, |
| hTransaction: HANDLE, |
| pusMiniVersion: PUSHORT, |
| lpExtendedParameter: PVOID, |
| ) -> HANDLE; |
| pub fn CreateFileTransactedW( |
| lpFileName: LPCWSTR, |
| dwDesiredAccess: DWORD, |
| dwShareMode: DWORD, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| dwCreationDisposition: DWORD, |
| dwFlagsAndAttributes: DWORD, |
| hTemplateFile: HANDLE, |
| hTransaction: HANDLE, |
| pusMiniVersion: PUSHORT, |
| lpExtendedParameter: PVOID, |
| ) -> HANDLE; |
| pub fn ReOpenFile( |
| hOriginalFile: HANDLE, |
| dwDesiredAccess: DWORD, |
| dwShareMode: DWORD, |
| dwFlags: DWORD, |
| ) -> HANDLE; |
| pub fn SetFileAttributesTransactedA( |
| lpFileName: LPCSTR, |
| dwFileAttributes: DWORD, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| pub fn SetFileAttributesTransactedW( |
| lpFileName: LPCWSTR, |
| dwFileAttributes: DWORD, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| pub fn GetFileAttributesTransactedA( |
| lpFileName: LPCSTR, |
| fInfoLevelId: GET_FILEEX_INFO_LEVELS, |
| lpFileInformation: LPVOID, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| pub fn GetFileAttributesTransactedW( |
| lpFileName: LPCWSTR, |
| fInfoLevelId: GET_FILEEX_INFO_LEVELS, |
| lpFileInformation: LPVOID, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| pub fn GetCompressedFileSizeTransactedA( |
| lpFileName: LPCSTR, |
| lpFileSizeHigh: LPDWORD, |
| hTransaction: HANDLE, |
| ) -> DWORD; |
| pub fn GetCompressedFileSizeTransactedW( |
| lpFileName: LPCWSTR, |
| lpFileSizeHigh: LPDWORD, |
| hTransaction: HANDLE, |
| ); |
| pub fn DeleteFileTransactedA( |
| lpFileName: LPCSTR, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| pub fn DeleteFileTransactedW( |
| lpFileName: LPCWSTR, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| pub fn CheckNameLegalDOS8Dot3A( |
| lpName: LPCSTR, |
| lpOemName: LPSTR, |
| OemNameSize: DWORD, |
| pbNameContainsSpaces: PBOOL, |
| pbNameLegal: PBOOL, |
| ) -> BOOL; |
| pub fn CheckNameLegalDOS8Dot3W( |
| lpName: LPCWSTR, |
| lpOemName: LPSTR, |
| OemNameSize: DWORD, |
| pbNameContainsSpaces: PBOOL, |
| pbNameLegal: PBOOL, |
| ) -> BOOL; |
| pub fn FindFirstFileTransactedA( |
| lpFileName: LPCSTR, |
| fInfoLevelId: FINDEX_INFO_LEVELS, |
| lpFindFileData: LPVOID, |
| fSearchOp: FINDEX_SEARCH_OPS, |
| lpSearchFilter: LPVOID, |
| dwAdditionalFlags: DWORD, |
| hTransaction: HANDLE, |
| ) -> HANDLE; |
| pub fn FindFirstFileTransactedW( |
| lpFileName: LPCWSTR, |
| fInfoLevelId: FINDEX_INFO_LEVELS, |
| lpFindFileData: LPVOID, |
| fSearchOp: FINDEX_SEARCH_OPS, |
| lpSearchFilter: LPVOID, |
| dwAdditionalFlags: DWORD, |
| hTransaction: HANDLE, |
| ) -> HANDLE; |
| pub fn CopyFileA( |
| lpExistingFileName: LPCSTR, |
| lpNewFileName: LPCSTR, |
| bFailIfExists: BOOL, |
| ) -> BOOL; |
| pub fn CopyFileW( |
| lpExistingFileName: LPCWSTR, |
| lpNewFileName: LPCWSTR, |
| bFailIfExists: BOOL, |
| ) -> BOOL; |
| } |
| FN!{stdcall LPPROGRESS_ROUTINE( |
| TotalFileSize: LARGE_INTEGER, |
| TotalBytesTransferred: LARGE_INTEGER, |
| StreamSize: LARGE_INTEGER, |
| StreamBytesTransferred: LARGE_INTEGER, |
| dwStreamNumber: DWORD, |
| dwCallbackReason: DWORD, |
| hSourceFile: HANDLE, |
| hDestinationFile: HANDLE, |
| lpData: LPVOID, |
| ) -> DWORD} |
| extern "system" { |
| pub fn CopyFileExA( |
| lpExistingFileName: LPCSTR, |
| lpNewFileName: LPCSTR, |
| lpProgressRoutine: LPPROGRESS_ROUTINE, |
| lpData: LPVOID, |
| pbCancel: LPBOOL, |
| dwCopyFlags: DWORD, |
| ) -> BOOL; |
| pub fn CopyFileExW( |
| lpExistingFileName: LPCWSTR, |
| lpNewFileName: LPCWSTR, |
| lpProgressRoutine: LPPROGRESS_ROUTINE, |
| lpData: LPVOID, |
| pbCancel: LPBOOL, |
| dwCopyFlags: DWORD, |
| ) -> BOOL; |
| pub fn CopyFileTransactedA( |
| lpExistingFileName: LPCWSTR, |
| lpNewFileName: LPCWSTR, |
| lpProgressRoutine: LPPROGRESS_ROUTINE, |
| lpData: LPVOID, |
| pbCancel: LPBOOL, |
| dwCopyFlags: DWORD, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| pub fn CopyFileTransactedW( |
| lpExistingFileName: LPCWSTR, |
| lpNewFileName: LPCWSTR, |
| lpProgressRoutine: LPPROGRESS_ROUTINE, |
| lpData: LPVOID, |
| pbCancel: LPBOOL, |
| dwCopyFlags: DWORD, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| } |
| ENUM!{enum COPYFILE2_MESSAGE_TYPE { |
| COPYFILE2_CALLBACK_NONE = 0, |
| COPYFILE2_CALLBACK_CHUNK_STARTED, |
| COPYFILE2_CALLBACK_CHUNK_FINISHED, |
| COPYFILE2_CALLBACK_STREAM_STARTED, |
| COPYFILE2_CALLBACK_STREAM_FINISHED, |
| COPYFILE2_CALLBACK_POLL_CONTINUE, |
| COPYFILE2_CALLBACK_ERROR, |
| COPYFILE2_CALLBACK_MAX, |
| }} |
| ENUM!{enum COPYFILE2_MESSAGE_ACTION { |
| COPYFILE2_PROGRESS_CONTINUE = 0, |
| COPYFILE2_PROGRESS_CANCEL, |
| COPYFILE2_PROGRESS_STOP, |
| COPYFILE2_PROGRESS_QUIET, |
| COPYFILE2_PROGRESS_PAUSE, |
| }} |
| ENUM!{enum COPYFILE2_COPY_PHASE { |
| COPYFILE2_PHASE_NONE = 0, |
| COPYFILE2_PHASE_PREPARE_SOURCE, |
| COPYFILE2_PHASE_PREPARE_DEST, |
| COPYFILE2_PHASE_READ_SOURCE, |
| COPYFILE2_PHASE_WRITE_DESTINATION, |
| COPYFILE2_PHASE_SERVER_COPY, |
| COPYFILE2_PHASE_NAMEGRAFT_COPY, |
| COPYFILE2_PHASE_MAX, |
| }} |
| STRUCT!{struct COPYFILE2_MESSAGE_ChunkStarted { |
| dwStreamNumber: DWORD, |
| dwReserved: DWORD, |
| hSourceFile: HANDLE, |
| hDestinationFile: HANDLE, |
| uliChunkNumber: ULARGE_INTEGER, |
| uliChunkSize: ULARGE_INTEGER, |
| uliStreamSize: ULARGE_INTEGER, |
| uliTotalFileSize: ULARGE_INTEGER, |
| }} |
| STRUCT!{struct COPYFILE2_MESSAGE_ChunkFinished { |
| dwStreamNumber: DWORD, |
| dwFlags: DWORD, |
| hSourceFile: HANDLE, |
| hDestinationFile: HANDLE, |
| uliChunkNumber: ULARGE_INTEGER, |
| uliChunkSize: ULARGE_INTEGER, |
| uliStreamSize: ULARGE_INTEGER, |
| uliStreamBytesTransferred: ULARGE_INTEGER, |
| uliTotalFileSize: ULARGE_INTEGER, |
| uliTotalBytesTransferred: ULARGE_INTEGER, |
| }} |
| STRUCT!{struct COPYFILE2_MESSAGE_StreamStarted { |
| dwStreamNumber: DWORD, |
| dwReserved: DWORD, |
| hSourceFile: HANDLE, |
| hDestinationFile: HANDLE, |
| uliStreamSize: ULARGE_INTEGER, |
| uliTotalFileSize: ULARGE_INTEGER, |
| }} |
| STRUCT!{struct COPYFILE2_MESSAGE_StreamFinished { |
| dwStreamNumber: DWORD, |
| dwReserved: DWORD, |
| hSourceFile: HANDLE, |
| hDestinationFile: HANDLE, |
| uliStreamSize: ULARGE_INTEGER, |
| uliStreamBytesTransferred: ULARGE_INTEGER, |
| uliTotalFileSize: ULARGE_INTEGER, |
| uliTotalBytesTransferred: ULARGE_INTEGER, |
| }} |
| STRUCT!{struct COPYFILE2_MESSAGE_PollContinue { |
| dwReserved: DWORD, |
| }} |
| STRUCT!{struct COPYFILE2_MESSAGE_Error { |
| CopyPhase: COPYFILE2_COPY_PHASE, |
| dwStreamNumber: DWORD, |
| hrFailure: HRESULT, |
| dwReserved: DWORD, |
| uliChunkNumber: ULARGE_INTEGER, |
| uliStreamSize: ULARGE_INTEGER, |
| uliStreamBytesTransferred: ULARGE_INTEGER, |
| uliTotalFileSize: ULARGE_INTEGER, |
| uliTotalBytesTransferred: ULARGE_INTEGER, |
| }} |
| UNION!{union COPYFILE2_MESSAGE_Info { |
| [u64; 8] [u64; 9], |
| ChunkStarted ChunkStarted_mut: COPYFILE2_MESSAGE_ChunkStarted, |
| ChunkFinished ChunkFinished_mut: COPYFILE2_MESSAGE_ChunkFinished, |
| StreamStarted StreamStarted_mut: COPYFILE2_MESSAGE_StreamStarted, |
| StreamFinished StreamFinished_mut: COPYFILE2_MESSAGE_StreamFinished, |
| PollContinue PollContinue_mut: COPYFILE2_MESSAGE_PollContinue, |
| Error Error_mut: COPYFILE2_MESSAGE_Error, |
| }} |
| STRUCT!{struct COPYFILE2_MESSAGE { |
| Type: COPYFILE2_MESSAGE_TYPE, |
| dwPadding: DWORD, |
| Info: COPYFILE2_MESSAGE_Info, |
| }} |
| FN!{stdcall PCOPYFILE2_PROGRESS_ROUTINE( |
| pMessage: *const COPYFILE2_MESSAGE, |
| pvCallbackContext: PVOID, |
| ) -> COPYFILE2_MESSAGE_ACTION} |
| STRUCT!{struct COPYFILE2_EXTENDED_PARAMETERS { |
| dwSize: DWORD, |
| dwCopyFlags: DWORD, |
| pfCancel: *mut BOOL, |
| pProgressRoutine: PCOPYFILE2_PROGRESS_ROUTINE, |
| pvCallbackContext: PVOID, |
| }} |
| extern "system" { |
| pub fn CopyFile2( |
| pwszExistingFileName: PCWSTR, |
| pwszNewFileName: PCWSTR, |
| pExtendedParameters: *mut COPYFILE2_EXTENDED_PARAMETERS, |
| ) -> HRESULT; |
| pub fn MoveFileA( |
| lpExistingFileName: LPCSTR, |
| lpNewFileName: LPCSTR, |
| ) -> BOOL; |
| pub fn MoveFileW( |
| lpExistingFileName: LPCWSTR, |
| lpNewFileName: LPCWSTR, |
| ) -> BOOL; |
| pub fn MoveFileExA( |
| lpExistingFileName: LPCSTR, |
| lpNewFileName: LPCSTR, |
| dwFlags: DWORD, |
| ) -> BOOL; |
| pub fn MoveFileExW( |
| lpExistingFileName: LPCWSTR, |
| lpNewFileName: LPCWSTR, |
| dwFlags: DWORD, |
| ) -> BOOL; |
| pub fn MoveFileWithProgressA( |
| lpExistingFileName: LPCSTR, |
| lpNewFileName: LPCSTR, |
| lpProgressRoutine: LPPROGRESS_ROUTINE, |
| lpData: LPVOID, |
| dwFlags: DWORD, |
| ) -> BOOL; |
| pub fn MoveFileWithProgressW( |
| lpExistingFileName: LPCWSTR, |
| lpNewFileName: LPCWSTR, |
| lpProgressRoutine: LPPROGRESS_ROUTINE, |
| lpData: LPVOID, |
| dwFlags: DWORD, |
| ) -> BOOL; |
| pub fn MoveFileTransactedA( |
| lpExistingFileName: LPCSTR, |
| lpNewFileName: LPCSTR, |
| lpProgressRoutine: LPPROGRESS_ROUTINE, |
| lpData: LPVOID, |
| dwFlags: DWORD, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| pub fn MoveFileTransactedW( |
| lpExistingFileName: LPCWSTR, |
| lpNewFileName: LPCWSTR, |
| lpProgressRoutine: LPPROGRESS_ROUTINE, |
| lpData: LPVOID, |
| dwFlags: DWORD, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| } |
| pub const MOVEFILE_REPLACE_EXISTING: DWORD = 0x00000001; |
| pub const MOVEFILE_COPY_ALLOWED: DWORD = 0x00000002; |
| pub const MOVEFILE_DELAY_UNTIL_REBOOT: DWORD = 0x00000004; |
| pub const MOVEFILE_WRITE_THROUGH: DWORD = 0x00000008; |
| pub const MOVEFILE_CREATE_HARDLINK: DWORD = 0x00000010; |
| pub const MOVEFILE_FAIL_IF_NOT_TRACKABLE: DWORD = 0x00000020; |
| extern "system" { |
| pub fn ReplaceFileA( |
| lpReplacedFileName: LPCSTR, |
| lpReplacementFileName: LPCSTR, |
| lpBackupFileName: LPCSTR, |
| dwReplaceFlags: DWORD, |
| lpExclude: LPVOID, |
| lpReserved: LPVOID, |
| ); |
| pub fn ReplaceFileW( |
| lpReplacedFileName: LPCWSTR, |
| lpReplacementFileName: LPCWSTR, |
| lpBackupFileName: LPCWSTR, |
| dwReplaceFlags: DWORD, |
| lpExclude: LPVOID, |
| lpReserved: LPVOID, |
| ); |
| pub fn CreateHardLinkA( |
| lpFileName: LPCSTR, |
| lpExistingFileName: LPCSTR, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| ) -> BOOL; |
| pub fn CreateHardLinkW( |
| lpFileName: LPCWSTR, |
| lpExistingFileName: LPCWSTR, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| ) -> BOOL; |
| pub fn CreateHardLinkTransactedA( |
| lpFileName: LPCSTR, |
| lpExistingFileName: LPCSTR, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| hTransaction: HANDLE, |
| ) -> BOOL; |
| pub fn CreateHardLinkTransactedW( |
| lpFileName: LPCWSTR, |
| lpExistingFileName: LPCWSTR, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| hTransaction: HANDLE, |
| ); |
| pub fn FindFirstStreamTransactedW( |
| lpFileName: LPCWSTR, |
| InfoLevel: STREAM_INFO_LEVELS, |
| lpFindStreamData: LPVOID, |
| dwFlags: DWORD, |
| hTransaction: HANDLE, |
| ) -> HANDLE; |
| pub fn FindFirstFileNameTransactedW( |
| lpFileName: LPCWSTR, |
| dwFlags: DWORD, |
| StringLength: LPDWORD, |
| LinkName: PWSTR, |
| hTransaction: HANDLE, |
| ) -> HANDLE; |
| pub fn CreateNamedPipeA( |
| lpName: LPCSTR, |
| dwOpenMode: DWORD, |
| dwPipeMode: DWORD, |
| nMaxInstances: DWORD, |
| nOutBufferSize: DWORD, |
| nInBufferSize: DWORD, |
| nDefaultTimeOut: DWORD, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| ) -> HANDLE; |
| pub fn GetNamedPipeHandleStateA( |
| hNamedPipe: HANDLE, |
| lpState: LPDWORD, |
| lpCurInstances: LPDWORD, |
| lpMaxCollectionCount: LPDWORD, |
| lpCollectDataTimeout: LPDWORD, |
| lpUserName: LPSTR, |
| nMaxUserNameSize: DWORD, |
| ) -> BOOL; |
| pub fn CallNamedPipeA( |
| lpNamedPipeName: LPCSTR, |
| lpInBuffer: LPVOID, |
| nInBufferSize: DWORD, |
| lpOutBuffer: LPVOID, |
| nOutBufferSize: DWORD, |
| lpBytesRead: LPDWORD, |
| nTimeOut: DWORD, |
| ) -> BOOL; |
| pub fn WaitNamedPipeA( |
| lpNamedPipeName: LPCSTR, |
| nTimeOut: DWORD, |
| ) -> BOOL; |
| pub fn GetNamedPipeClientComputerNameA( |
| Pipe: HANDLE, |
| ClientComputerName: LPSTR, |
| ClientComputerNameLength: ULONG, |
| ) -> BOOL; |
| pub fn GetNamedPipeClientProcessId( |
| Pipe: HANDLE, |
| ClientProcessId: PULONG, |
| ) -> BOOL; |
| pub fn GetNamedPipeClientSessionId( |
| Pipe: HANDLE, |
| ClientSessionId: PULONG, |
| ) -> BOOL; |
| pub fn GetNamedPipeServerProcessId( |
| Pipe: HANDLE, |
| ServerProcessId: PULONG, |
| ) -> BOOL; |
| pub fn GetNamedPipeServerSessionId( |
| Pipe: HANDLE, |
| ServerSessionId: PULONG, |
| ) -> BOOL; |
| pub fn SetVolumeLabelA( |
| lpRootPathName: LPCSTR, |
| lpVolumeName: LPCSTR, |
| ) -> BOOL; |
| pub fn SetVolumeLabelW( |
| lpRootPathName: LPCWSTR, |
| lpVolumeName: LPCWSTR, |
| ) -> BOOL; |
| pub fn SetFileBandwidthReservation( |
| hFile: HANDLE, |
| nPeriodMilliseconds: DWORD, |
| nBytesPerPeriod: DWORD, |
| bDiscardable: BOOL, |
| lpTransferSize: LPDWORD, |
| lpNumOutstandingRequests: LPDWORD, |
| ) -> BOOL; |
| pub fn GetFileBandwidthReservation( |
| hFile: HANDLE, |
| lpPeriodMilliseconds: LPDWORD, |
| lpBytesPerPeriod: LPDWORD, |
| pDiscardable: LPBOOL, |
| lpTransferSize: LPDWORD, |
| lpNumOutstandingRequests: LPDWORD, |
| ) -> BOOL; |
| // pub fn ClearEventLogA(); |
| // pub fn ClearEventLogW(); |
| // pub fn BackupEventLogA(); |
| // pub fn BackupEventLogW(); |
| // pub fn CloseEventLog(); |
| pub fn DeregisterEventSource( |
| hEventLog: HANDLE, |
| ) -> BOOL; |
| // pub fn NotifyChangeEventLog(); |
| // pub fn GetNumberOfEventLogRecords(); |
| // pub fn GetOldestEventLogRecord(); |
| // pub fn OpenEventLogA(); |
| // pub fn OpenEventLogW(); |
| pub fn RegisterEventSourceA( |
| lpUNCServerName: LPCSTR, |
| lpSourceName: LPCSTR, |
| ) -> HANDLE; |
| pub fn RegisterEventSourceW( |
| lpUNCServerName: LPCWSTR, |
| lpSourceName: LPCWSTR, |
| ) -> HANDLE; |
| // pub fn OpenBackupEventLogA(); |
| // pub fn OpenBackupEventLogW(); |
| // pub fn ReadEventLogA(); |
| // pub fn ReadEventLogW(); |
| pub fn ReportEventA( |
| hEventLog: HANDLE, |
| wType: WORD, |
| wCategory: WORD, |
| dwEventID: DWORD, |
| lpUserSid: PSID, |
| wNumStrings: WORD, |
| dwDataSize: DWORD, |
| lpStrings: *mut LPCSTR, |
| lpRawData: LPVOID, |
| ) -> BOOL; |
| pub fn ReportEventW( |
| hEventLog: HANDLE, |
| wType: WORD, |
| wCategory: WORD, |
| dwEventID: DWORD, |
| lpUserSid: PSID, |
| wNumStrings: WORD, |
| dwDataSize: DWORD, |
| lpStrings: *mut LPCWSTR, |
| lpRawData: LPVOID, |
| ) -> BOOL; |
| // pub fn GetEventLogInformation(); |
| // pub fn OperationStart(); |
| // pub fn OperationEnd(); |
| // pub fn AccessCheckAndAuditAlarmA(); |
| // pub fn AccessCheckByTypeAndAuditAlarmA(); |
| // pub fn AccessCheckByTypeResultListAndAuditAlarmA(); |
| // pub fn AccessCheckByTypeResultListAndAuditAlarmByHandleA(); |
| // pub fn ObjectOpenAuditAlarmA(); |
| // pub fn ObjectPrivilegeAuditAlarmA(); |
| // pub fn ObjectCloseAuditAlarmA(); |
| // pub fn ObjectDeleteAuditAlarmA(); |
| // pub fn PrivilegedServiceAuditAlarmA(); |
| // pub fn AddConditionalAce(); |
| // pub fn SetFileSecurityA(); |
| // pub fn GetFileSecurityA(); |
| pub fn ReadDirectoryChangesW( |
| hDirectory: HANDLE, |
| lpBuffer: LPVOID, |
| nBufferLength: DWORD, |
| bWatchSubtree: BOOL, |
| dwNotifyFilter: DWORD, |
| lpBytesReturned: LPDWORD, |
| lpOverlapped: LPOVERLAPPED, |
| lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE, |
| ) -> BOOL; |
| pub fn MapViewOfFileExNuma( |
| hFileMappingObject: HANDLE, |
| dwDesiredAccess: DWORD, |
| dwFileOffsetHigh: DWORD, |
| dwFileOffsetLow: DWORD, |
| dwNumberOfBytesToMap: SIZE_T, |
| lpBaseAddress: LPVOID, |
| nndPreferred: DWORD, |
| ) -> LPVOID; |
| pub fn IsBadReadPtr( |
| lp: *const VOID, |
| ucb: UINT_PTR, |
| ) -> BOOL; |
| pub fn IsBadWritePtr( |
| lp: LPVOID, |
| ucb: UINT_PTR, |
| ) -> BOOL; |
| pub fn IsBadHugeReadPtr( |
| lp: *const VOID, |
| ucb: UINT_PTR, |
| ) -> BOOL; |
| pub fn IsBadHugeWritePtr( |
| lp: LPVOID, |
| ucb: UINT_PTR, |
| ) -> BOOL; |
| pub fn IsBadCodePtr( |
| lpfn: FARPROC, |
| ) -> BOOL; |
| pub fn IsBadStringPtrA( |
| lpsz: LPCSTR, |
| ucchMax: UINT_PTR, |
| ) -> BOOL; |
| pub fn IsBadStringPtrW( |
| lpsz: LPCWSTR, |
| ucchMax: UINT_PTR, |
| ) -> BOOL; |
| pub fn LookupAccountSidA( |
| lpSystemName: LPCSTR, |
| Sid: PSID, |
| Name: LPSTR, |
| cchName: LPDWORD, |
| ReferencedDomainName: LPSTR, |
| cchReferencedDomainName: LPDWORD, |
| peUse: PSID_NAME_USE, |
| ) -> BOOL; |
| pub fn LookupAccountSidW( |
| lpSystemName: LPCWSTR, |
| Sid: PSID, |
| Name: LPWSTR, |
| cchName: LPDWORD, |
| ReferencedDomainName: LPWSTR, |
| cchReferencedDomainName: LPDWORD, |
| peUse: PSID_NAME_USE, |
| ) -> BOOL; |
| pub fn LookupAccountNameA( |
| lpSystemName: LPCSTR, |
| lpAccountName: LPCSTR, |
| Sid: PSID, |
| cbSid: LPDWORD, |
| ReferencedDomainName: LPCSTR, |
| cchReferencedDomainName: LPDWORD, |
| peUse: PSID_NAME_USE, |
| ) -> BOOL; |
| pub fn LookupAccountNameW( |
| lpSystemName: LPCWSTR, |
| lpAccountName: LPCWSTR, |
| Sid: PSID, |
| cbSid: LPDWORD, |
| ReferencedDomainName: LPCWSTR, |
| cchReferencedDomainName: LPDWORD, |
| peUse: PSID_NAME_USE, |
| ) -> BOOL; |
| // pub fn LookupAccountNameLocalA(); |
| // pub fn LookupAccountNameLocalW(); |
| // pub fn LookupAccountSidLocalA(); |
| // pub fn LookupAccountSidLocalW(); |
| pub fn LookupPrivilegeValueA( |
| lpSystemName: LPCSTR, |
| lpName: LPCSTR, |
| lpLuid: PLUID, |
| ) -> BOOL; |
| pub fn LookupPrivilegeValueW( |
| lpSystemName: LPCWSTR, |
| lpName: LPCWSTR, |
| lpLuid: PLUID, |
| ) -> BOOL; |
| pub fn LookupPrivilegeNameA( |
| lpSystemName: LPCSTR, |
| lpLuid: PLUID, |
| lpName: LPSTR, |
| cchName: LPDWORD, |
| ) -> BOOL; |
| pub fn LookupPrivilegeNameW( |
| lpSystemName: LPCWSTR, |
| lpLuid: PLUID, |
| lpName: LPWSTR, |
| cchName: LPDWORD, |
| ) -> BOOL; |
| // pub fn LookupPrivilegeDisplayNameA(); |
| // pub fn LookupPrivilegeDisplayNameW(); |
| pub fn BuildCommDCBA( |
| lpDef: LPCSTR, |
| lpDCB: LPDCB, |
| ) -> BOOL; |
| pub fn BuildCommDCBW( |
| lpDef: LPCWSTR, |
| lpDCB: LPDCB, |
| ) -> BOOL; |
| pub fn BuildCommDCBAndTimeoutsA( |
| lpDef: LPCSTR, |
| lpDCB: LPDCB, |
| lpCommTimeouts: LPCOMMTIMEOUTS, |
| ) -> BOOL; |
| pub fn BuildCommDCBAndTimeoutsW( |
| lpDef: LPCWSTR, |
| lpDCB: LPDCB, |
| lpCommTimeouts: LPCOMMTIMEOUTS, |
| ) -> BOOL; |
| pub fn CommConfigDialogA( |
| lpszName: LPCSTR, |
| hWnd: HWND, |
| lpCC: LPCOMMCONFIG, |
| ) -> BOOL; |
| pub fn CommConfigDialogW( |
| lpszName: LPCWSTR, |
| hWnd: HWND, |
| lpCC: LPCOMMCONFIG, |
| ) -> BOOL; |
| pub fn GetDefaultCommConfigA( |
| lpszName: LPCSTR, |
| lpCC: LPCOMMCONFIG, |
| lpdwSize: LPDWORD, |
| ) -> BOOL; |
| pub fn GetDefaultCommConfigW( |
| lpszName: LPCWSTR, |
| lpCC: LPCOMMCONFIG, |
| lpdwSize: LPDWORD, |
| ) -> BOOL; |
| pub fn SetDefaultCommConfigA( |
| lpszName: LPCSTR, |
| lpCC: LPCOMMCONFIG, |
| dwSize: DWORD, |
| ) -> BOOL; |
| pub fn SetDefaultCommConfigW( |
| lpszName: LPCWSTR, |
| lpCC: LPCOMMCONFIG, |
| dwSize: DWORD, |
| ) -> BOOL; |
| pub fn GetComputerNameA( |
| lpBuffer: LPSTR, |
| nSize: LPDWORD, |
| ) -> BOOL; |
| pub fn GetComputerNameW( |
| lpBuffer: LPWSTR, |
| nSize: LPDWORD, |
| ) -> BOOL; |
| pub fn DnsHostnameToComputerNameA( |
| Hostname: LPCSTR, |
| ComputerName: LPCSTR, |
| nSize: LPDWORD, |
| ) -> BOOL; |
| pub fn DnsHostnameToComputerNameW( |
| Hostname: LPCWSTR, |
| ComputerName: LPWSTR, |
| nSize: LPDWORD, |
| ) -> BOOL; |
| pub fn GetUserNameA( |
| lpBuffer: LPSTR, |
| pcbBuffer: LPDWORD, |
| ) -> BOOL; |
| pub fn GetUserNameW( |
| lpBuffer: LPWSTR, |
| pcbBuffer: LPDWORD, |
| ) -> BOOL; |
| } |
| pub const LOGON32_LOGON_INTERACTIVE: DWORD = 2; |
| pub const LOGON32_LOGON_NETWORK: DWORD = 3; |
| pub const LOGON32_LOGON_BATCH: DWORD = 4; |
| pub const LOGON32_LOGON_SERVICE: DWORD = 5; |
| pub const LOGON32_LOGON_UNLOCK: DWORD = 7; |
| pub const LOGON32_LOGON_NETWORK_CLEARTEXT: DWORD = 8; |
| pub const LOGON32_LOGON_NEW_CREDENTIALS: DWORD = 9; |
| pub const LOGON32_PROVIDER_DEFAULT: DWORD = 0; |
| pub const LOGON32_PROVIDER_WINNT35: DWORD = 1; |
| pub const LOGON32_PROVIDER_WINNT40: DWORD = 2; |
| pub const LOGON32_PROVIDER_WINNT50: DWORD = 3; |
| pub const LOGON32_PROVIDER_VIRTUAL: DWORD = 4; |
| extern "system" { |
| pub fn LogonUserA( |
| lpUsername: LPCSTR, |
| lpDomain: LPCSTR, |
| lpPassword: LPCSTR, |
| dwLogonType: DWORD, |
| dwLogonProvider: DWORD, |
| phToken: PHANDLE, |
| ) -> BOOL; |
| pub fn LogonUserW( |
| lpUsername: LPCWSTR, |
| lpDomain: LPCWSTR, |
| lpPassword: LPCWSTR, |
| dwLogonType: DWORD, |
| dwLogonProvider: DWORD, |
| phToken: PHANDLE, |
| ) -> BOOL; |
| pub fn LogonUserExA( |
| lpUsername: LPCSTR, |
| lpDomain: LPCSTR, |
| lpPassword: LPCSTR, |
| dwLogonType: DWORD, |
| dwLogonProvider: DWORD, |
| phToken: PHANDLE, |
| ppLogonSid: *mut PSID, |
| ppProfileBuffer: *mut PVOID, |
| pdwProfileLength: LPDWORD, |
| pQuotaLimits: PQUOTA_LIMITS, |
| ) -> BOOL; |
| pub fn LogonUserExW( |
| lpUsername: LPCWSTR, |
| lpDomain: LPCWSTR, |
| lpPassword: LPCWSTR, |
| dwLogonType: DWORD, |
| dwLogonProvider: DWORD, |
| phToken: PHANDLE, |
| ppLogonSid: *mut PSID, |
| ppProfileBuffer: *mut PVOID, |
| pdwProfileLength: LPDWORD, |
| pQuotaLimits: PQUOTA_LIMITS, |
| ) -> BOOL; |
| } |
| pub const LOGON_WITH_PROFILE: DWORD = 0x00000001; |
| pub const LOGON_NETCREDENTIALS_ONLY: DWORD = 0x00000002; |
| extern "system" { |
| pub fn CreateProcessWithLogonW( |
| lpUsername: LPCWSTR, |
| lpDomain: LPCWSTR, |
| lpPassword: LPCWSTR, |
| dwLogonFlags: DWORD, |
| lpApplicationName: LPCWSTR, |
| lpCommandLine: LPWSTR, |
| dwCreationFlags: DWORD, |
| lpEnvironment: LPVOID, |
| lpCurrentDirectory: LPCWSTR, |
| lpStartupInfo: LPSTARTUPINFOW, |
| lpProcessInformation: LPPROCESS_INFORMATION, |
| ) -> BOOL; |
| pub fn CreateProcessWithTokenW( |
| hToken: HANDLE, |
| dwLogonFlags: DWORD, |
| lpApplicationName: LPCWSTR, |
| lpCommandLine: LPWSTR, |
| dwCreationFlags: DWORD, |
| lpEnvironment: LPVOID, |
| lpCurrentDirectory: LPCWSTR, |
| lpStartupInfo: LPSTARTUPINFOW, |
| lpProcessInformation: LPPROCESS_INFORMATION, |
| ) -> BOOL; |
| pub fn IsTokenUntrusted( |
| TokenHandle: HANDLE, |
| ) -> BOOL; |
| pub fn RegisterWaitForSingleObject( |
| phNewWaitObject: PHANDLE, |
| hObject: HANDLE, |
| Callback: WAITORTIMERCALLBACK, |
| Context: PVOID, |
| dwMilliseconds: ULONG, |
| dwFlags: ULONG, |
| ) -> BOOL; |
| pub fn UnregisterWait( |
| WaitHandle: HANDLE, |
| ) -> BOOL; |
| pub fn BindIoCompletionCallback( |
| FileHandle: HANDLE, |
| Function: LPOVERLAPPED_COMPLETION_ROUTINE, |
| Flags: ULONG, |
| ) -> BOOL; |
| pub fn SetTimerQueueTimer( |
| TimerQueue: HANDLE, |
| Callback: WAITORTIMERCALLBACK, |
| Parameter: PVOID, |
| DueTime: DWORD, |
| Period: DWORD, |
| PreferIo: BOOL, |
| ) -> HANDLE; |
| pub fn CancelTimerQueueTimer( |
| TimerQueue: HANDLE, |
| Timer: HANDLE, |
| ) -> BOOL; |
| pub fn DeleteTimerQueue( |
| TimerQueue: HANDLE, |
| ) -> BOOL; |
| // pub fn InitializeThreadpoolEnvironment(); |
| // pub fn SetThreadpoolCallbackPool(); |
| // pub fn SetThreadpoolCallbackCleanupGroup(); |
| // pub fn SetThreadpoolCallbackRunsLong(); |
| // pub fn SetThreadpoolCallbackLibrary(); |
| // pub fn SetThreadpoolCallbackPriority(); |
| // pub fn DestroyThreadpoolEnvironment(); |
| // pub fn SetThreadpoolCallbackPersistent(); |
| pub fn CreatePrivateNamespaceA( |
| lpPrivateNamespaceAttributes: LPSECURITY_ATTRIBUTES, |
| lpBoundaryDescriptor: LPVOID, |
| lpAliasPrefix: LPCSTR, |
| ) -> HANDLE; |
| pub fn OpenPrivateNamespaceA( |
| lpBoundaryDescriptor: LPVOID, |
| lpAliasPrefix: LPCSTR, |
| ) -> HANDLE; |
| pub fn CreateBoundaryDescriptorA( |
| Name: LPCSTR, |
| Flags: ULONG, |
| ) -> HANDLE; |
| pub fn AddIntegrityLabelToBoundaryDescriptor( |
| BoundaryDescriptor: *mut HANDLE, |
| IntegrityLabel: PSID, |
| ) -> BOOL; |
| } |
| pub const HW_PROFILE_GUIDLEN: usize = 39; |
| // MAX_PROFILE_LEN |
| pub const DOCKINFO_UNDOCKED: DWORD = 0x1; |
| pub const DOCKINFO_DOCKED: DWORD = 0x2; |
| pub const DOCKINFO_USER_SUPPLIED: DWORD = 0x4; |
| pub const DOCKINFO_USER_UNDOCKED: DWORD = DOCKINFO_USER_SUPPLIED | DOCKINFO_UNDOCKED; |
| pub const DOCKINFO_USER_DOCKED: DWORD = DOCKINFO_USER_SUPPLIED | DOCKINFO_DOCKED; |
| STRUCT!{struct HW_PROFILE_INFOA { |
| dwDockInfo: DWORD, |
| szHwProfileGuid: [CHAR; HW_PROFILE_GUIDLEN], |
| szHwProfileName: [CHAR; MAX_PROFILE_LEN], |
| }} |
| pub type LPHW_PROFILE_INFOA = *mut HW_PROFILE_INFOA; |
| STRUCT!{struct HW_PROFILE_INFOW { |
| dwDockInfo: DWORD, |
| szHwProfileGuid: [WCHAR; HW_PROFILE_GUIDLEN], |
| szHwProfileName: [WCHAR; MAX_PROFILE_LEN], |
| }} |
| pub type LPHW_PROFILE_INFOW = *mut HW_PROFILE_INFOW; |
| extern "system" { |
| pub fn GetCurrentHwProfileA( |
| lpHwProfileInfo: LPHW_PROFILE_INFOA, |
| ) -> BOOL; |
| pub fn GetCurrentHwProfileW( |
| lpHwProfileInfo: LPHW_PROFILE_INFOW, |
| ) -> BOOL; |
| pub fn VerifyVersionInfoA( |
| lpVersionInformation: LPOSVERSIONINFOEXA, |
| dwTypeMask: DWORD, |
| dwlConditionMask: DWORDLONG, |
| ) -> BOOL; |
| pub fn VerifyVersionInfoW( |
| lpVersionInformation: LPOSVERSIONINFOEXW, |
| dwTypeMask: DWORD, |
| dwlConditionMask: DWORDLONG, |
| ) -> BOOL; |
| } |
| STRUCT!{struct SYSTEM_POWER_STATUS { |
| ACLineStatus: BYTE, |
| BatteryFlag: BYTE, |
| BatteryLifePercent: BYTE, |
| Reserved1: BYTE, |
| BatteryLifeTime: DWORD, |
| BatteryFullLifeTime: DWORD, |
| }} |
| pub type LPSYSTEM_POWER_STATUS = *mut SYSTEM_POWER_STATUS; |
| extern "system" { |
| pub fn GetSystemPowerStatus( |
| lpSystemPowerStatus: LPSYSTEM_POWER_STATUS, |
| ) -> BOOL; |
| pub fn SetSystemPowerState( |
| fSuspend: BOOL, |
| fForce: BOOL, |
| ) -> BOOL; |
| pub fn MapUserPhysicalPagesScatter( |
| VirtualAddresses: *mut PVOID, |
| NumberOfPages: ULONG_PTR, |
| PageArray: PULONG_PTR, |
| ) -> BOOL; |
| pub fn CreateJobObjectA( |
| lpJobAttributes: LPSECURITY_ATTRIBUTES, |
| lpName: LPCSTR, |
| ) -> HANDLE; |
| pub fn OpenJobObjectA( |
| dwDesiredAccess: DWORD, |
| bInheritHandle: BOOL, |
| lpName: LPCSTR, |
| ) -> HANDLE; |
| pub fn CreateJobSet( |
| NumJob: ULONG, |
| UserJobSet: PJOB_SET_ARRAY, |
| Flags: ULONG, |
| ) -> BOOL; |
| pub fn FindFirstVolumeA( |
| lpszVolumeName: LPSTR, |
| cchBufferLength: DWORD, |
| ) -> HANDLE; |
| pub fn FindNextVolumeA( |
| hFindVolume: HANDLE, |
| lpszVolumeName: LPSTR, |
| cchBufferLength: DWORD, |
| ) -> BOOL; |
| pub fn FindFirstVolumeMountPointA( |
| lpszRootPathName: LPCSTR, |
| lpszVolumeMountPoint: LPSTR, |
| cchBufferLength: DWORD, |
| ) -> HANDLE; |
| pub fn FindFirstVolumeMountPointW( |
| lpszRootPathName: LPCWSTR, |
| lpszVolumeMountPoint: LPWSTR, |
| cchBufferLength: DWORD, |
| ) -> HANDLE; |
| pub fn FindNextVolumeMountPointA( |
| hFindVolumeMountPoint: HANDLE, |
| lpszVolumeMountPoint: LPSTR, |
| cchBufferLength: DWORD, |
| ) -> BOOL; |
| pub fn FindNextVolumeMountPointW( |
| hFindVolumeMountPoint: HANDLE, |
| lpszVolumeMountPoint: LPWSTR, |
| cchBufferLength: DWORD, |
| ) -> BOOL; |
| pub fn FindVolumeMountPointClose( |
| hFindVolumeMountPoint: HANDLE, |
| ) -> BOOL; |
| pub fn SetVolumeMountPointA( |
| lpszVolumeMountPoint: LPCSTR, |
| lpszVolumeName: LPCSTR, |
| ) -> BOOL; |
| pub fn SetVolumeMountPointW( |
| lpszVolumeMountPoint: LPCWSTR, |
| lpszVolumeName: LPCWSTR, |
| ) -> BOOL; |
| pub fn DeleteVolumeMountPointA( |
| lpszVolumeMountPoint: LPCSTR, |
| ) -> BOOL; |
| pub fn GetVolumeNameForVolumeMountPointA( |
| lpszVolumeMountPoint: LPCSTR, |
| lpszVolumeName: LPSTR, |
| cchBufferLength: DWORD, |
| ) -> BOOL; |
| pub fn GetVolumePathNameA( |
| lpszFileName: LPCSTR, |
| lpszVolumePathName: LPSTR, |
| cchBufferLength: DWORD, |
| ) -> BOOL; |
| pub fn GetVolumePathNamesForVolumeNameA( |
| lpszVolumeName: LPCSTR, |
| lpszVolumePathNames: LPCH, |
| cchBufferLength: DWORD, |
| lpcchReturnLength: PDWORD, |
| ) -> BOOL; |
| } |
| // ACTCTX_FLAG_* |
| STRUCT!{struct ACTCTXA { |
| cbSize: ULONG, |
| dwFlags: DWORD, |
| lpSource: LPCSTR, |
| wProcessorArchitecture: USHORT, |
| wLangId: LANGID, |
| lpAssemblyDirectory: LPCSTR, |
| lpResourceName: LPCSTR, |
| lpApplicationName: LPCSTR, |
| hModule: HMODULE, |
| }} |
| pub type PACTCTXA = *mut ACTCTXA; |
| STRUCT!{struct ACTCTXW { |
| cbSize: ULONG, |
| dwFlags: DWORD, |
| lpSource: LPCWSTR, |
| wProcessorArchitecture: USHORT, |
| wLangId: LANGID, |
| lpAssemblyDirectory: LPCWSTR, |
| lpResourceName: LPCWSTR, |
| lpApplicationName: LPCWSTR, |
| hModule: HMODULE, |
| }} |
| pub type PACTCTXW = *mut ACTCTXW; |
| pub type PCACTCTXA = *const ACTCTXA; |
| pub type PCACTCTXW = *const ACTCTXW; |
| extern "system" { |
| pub fn CreateActCtxA( |
| pActCtx: PCACTCTXA, |
| ) -> HANDLE; |
| pub fn CreateActCtxW( |
| pActCtx: PCACTCTXW, |
| ) -> HANDLE; |
| pub fn AddRefActCtx( |
| hActCtx: HANDLE, |
| ); |
| pub fn ReleaseActCtx( |
| hActCtx: HANDLE, |
| ); |
| pub fn ZombifyActCtx( |
| hActCtx: HANDLE, |
| ) -> BOOL; |
| pub fn ActivateActCtx( |
| hActCtx: HANDLE, |
| lpCookie: *mut ULONG_PTR, |
| ) -> BOOL; |
| pub fn DeactivateActCtx( |
| dwFlags: DWORD, |
| ulCookie: ULONG_PTR, |
| ) -> BOOL; |
| pub fn GetCurrentActCtx( |
| lphActCtx: *mut HANDLE, |
| ) -> BOOL; |
| } |
| STRUCT!{struct ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA { |
| lpInformation: PVOID, |
| lpSectionBase: PVOID, |
| ulSectionLength: ULONG, |
| lpSectionGlobalDataBase: PVOID, |
| ulSectionGlobalDataLength: ULONG, |
| }} |
| pub type PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA = |
| *mut ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA; |
| pub type PCACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA = |
| *const ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA; |
| STRUCT!{struct ACTCTX_SECTION_KEYED_DATA { |
| cbSize: ULONG, |
| ulDataFormatVersion: ULONG, |
| lpData: PVOID, |
| ulLength: ULONG, |
| lpSectionGlobalData: PVOID, |
| ulSectionGlobalDataLength: ULONG, |
| lpSectionBase: PVOID, |
| ulSectionTotalLength: ULONG, |
| hActCtx: HANDLE, |
| ulAssemblyRosterIndex: ULONG, |
| ulFlags: ULONG, |
| AssemblyMetadata: ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA, |
| }} |
| pub type PACTCTX_SECTION_KEYED_DATA = *mut ACTCTX_SECTION_KEYED_DATA; |
| pub type PCACTCTX_SECTION_KEYED_DATA = *const ACTCTX_SECTION_KEYED_DATA; |
| extern "system" { |
| pub fn FindActCtxSectionStringA( |
| dwFlags: DWORD, |
| lpExtensionGuid: *const GUID, |
| ulSectionId: ULONG, |
| lpStringToFind: LPCSTR, |
| ReturnedData: PACTCTX_SECTION_KEYED_DATA, |
| ) -> BOOL; |
| pub fn FindActCtxSectionStringW( |
| dwFlags: DWORD, |
| lpExtensionGuid: *const GUID, |
| ulSectionId: ULONG, |
| lpStringToFind: LPCWSTR, |
| ReturnedData: PACTCTX_SECTION_KEYED_DATA, |
| ) -> BOOL; |
| pub fn FindActCtxSectionGuid( |
| dwFlags: DWORD, |
| lpExtensionGuid: *const GUID, |
| ulSectionId: ULONG, |
| lpGuidToFind: *const GUID, |
| ReturnedData: PACTCTX_SECTION_KEYED_DATA, |
| ) -> BOOL; |
| pub fn QueryActCtxW( |
| dwFlags: DWORD, |
| hActCtx: HANDLE, |
| pvSubInstance: PVOID, |
| ulInfoClass: ULONG, |
| pvBuffer: PVOID, |
| cbBuffer: SIZE_T, |
| pcbWrittenOrRequired: *mut SIZE_T, |
| ) -> BOOL; |
| pub fn WTSGetActiveConsoleSessionId() -> DWORD; |
| // pub fn WTSGetServiceSessionId(); |
| // pub fn WTSIsServerContainer(); |
| pub fn GetActiveProcessorGroupCount() -> WORD; |
| pub fn GetMaximumProcessorGroupCount() -> WORD; |
| pub fn GetActiveProcessorCount( |
| GroupNumber: WORD, |
| ) -> DWORD; |
| pub fn GetMaximumProcessorCount( |
| GroupNumber: WORD, |
| ) -> DWORD; |
| pub fn GetNumaProcessorNode( |
| Processor: UCHAR, |
| NodeNumber: PUCHAR, |
| ) -> BOOL; |
| pub fn GetNumaNodeNumberFromHandle( |
| hFile: HANDLE, |
| NodeNumber: PUSHORT, |
| ) -> BOOL; |
| pub fn GetNumaProcessorNodeEx( |
| Processor: PPROCESSOR_NUMBER, |
| NodeNumber: PUSHORT, |
| ) -> BOOL; |
| pub fn GetNumaNodeProcessorMask( |
| Node: UCHAR, |
| ProcessorMask: PULONGLONG, |
| ) -> BOOL; |
| pub fn GetNumaAvailableMemoryNode( |
| Node: UCHAR, |
| AvailableBytes: PULONGLONG, |
| ) -> BOOL; |
| pub fn GetNumaAvailableMemoryNodeEx( |
| Node: USHORT, |
| AvailableBytes: PULONGLONG, |
| ) -> BOOL; |
| pub fn GetNumaProximityNode( |
| ProximityId: ULONG, |
| NodeNumber: PUCHAR, |
| ) -> BOOL; |
| } |
| FN!{stdcall APPLICATION_RECOVERY_CALLBACK( |
| pvParameter: PVOID, |
| ) -> DWORD} |
| // RESTART_* |
| // RECOVERY_* |
| extern "system" { |
| pub fn RegisterApplicationRecoveryCallback( |
| pRecoveyCallback: APPLICATION_RECOVERY_CALLBACK, |
| pvParameter: PVOID, |
| dwPingInterval: DWORD, |
| dwFlags: DWORD, |
| ) -> HRESULT; |
| pub fn UnregisterApplicationRecoveryCallback() -> HRESULT; |
| pub fn RegisterApplicationRestart( |
| pwzCommandline: PCWSTR, |
| dwFlags: DWORD, |
| ) -> HRESULT; |
| pub fn UnregisterApplicationRestart() -> HRESULT; |
| pub fn GetApplicationRecoveryCallback( |
| hProcess: HANDLE, |
| pRecoveryCallback: *mut APPLICATION_RECOVERY_CALLBACK, |
| ppvParameter: *mut PVOID, |
| pdwPingInterval: PDWORD, |
| pdwFlags: PDWORD, |
| ) -> HRESULT; |
| pub fn GetApplicationRestartSettings( |
| hProcess: HANDLE, |
| pwzCommandline: PWSTR, |
| pcchSize: PDWORD, |
| pdwFlags: PDWORD, |
| ) -> HRESULT; |
| pub fn ApplicationRecoveryInProgress( |
| pbCancelled: PBOOL, |
| ) -> HRESULT; |
| pub fn ApplicationRecoveryFinished( |
| bSuccess: BOOL, |
| ); |
| } |
| // FILE_BASIC_INFO, etc. |
| extern "system" { |
| pub fn GetFileInformationByHandleEx( |
| hFile: HANDLE, |
| FileInformationClass: FILE_INFO_BY_HANDLE_CLASS, |
| lpFileInformation: LPVOID, |
| dwBufferSize: DWORD, |
| ) -> BOOL; |
| } |
| ENUM!{enum FILE_ID_TYPE { |
| FileIdType, |
| ObjectIdType, |
| ExtendedFileIdType, |
| MaximumFileIdType, |
| }} |
| UNION!{union FILE_ID_DESCRIPTOR_u { |
| [u64; 2], |
| FileId FileId_mut: LARGE_INTEGER, |
| ObjectId ObjectId_mut: GUID, |
| ExtendedFileId ExtendedFileId_mut: FILE_ID_128, |
| }} |
| STRUCT!{struct FILE_ID_DESCRIPTOR { |
| dwSize: DWORD, |
| Type: FILE_ID_TYPE, |
| u: FILE_ID_DESCRIPTOR_u, |
| }} |
| pub type LPFILE_ID_DESCRIPTOR = *mut FILE_ID_DESCRIPTOR; |
| extern "system" { |
| pub fn OpenFileById( |
| hVolumeHint: HANDLE, |
| lpFileId: LPFILE_ID_DESCRIPTOR, |
| dwDesiredAccess: DWORD, |
| dwShareMode: DWORD, |
| lpSecurityAttributes: LPSECURITY_ATTRIBUTES, |
| dwFlagsAndAttributes: DWORD, |
| ) -> HANDLE; |
| pub fn CreateSymbolicLinkA( |
| lpSymlinkFileName: LPCSTR, |
| lpTargetFileName: LPCSTR, |
| dwFlags: DWORD, |
| ) -> BOOLEAN; |
| pub fn CreateSymbolicLinkW( |
| lpSymlinkFileName: LPCWSTR, |
| lpTargetFileName: LPCWSTR, |
| dwFlags: DWORD, |
| ) -> BOOLEAN; |
| pub fn QueryActCtxSettingsW( |
| dwFlags: DWORD, |
| hActCtx: HANDLE, |
| settingsNameSpace: PCWSTR, |
| settingName: PCWSTR, |
| pvBuffer: PWSTR, |
| dwBuffer: SIZE_T, |
| pdwWrittenOrRequired: *mut SIZE_T, |
| ) -> BOOL; |
| pub fn CreateSymbolicLinkTransactedA( |
| lpSymlinkFileName: LPCSTR, |
| lpTargetFileName: LPCSTR, |
| dwFlags: DWORD, |
| hTransaction: HANDLE, |
| ) -> BOOLEAN; |
| pub fn CreateSymbolicLinkTransactedW( |
| lpSymlinkFileName: LPCWSTR, |
| lpTargetFileName: LPCWSTR, |
| dwFlags: DWORD, |
| hTransaction: HANDLE, |
| ) -> BOOLEAN; |
| pub fn ReplacePartitionUnit( |
| TargetPartition: PWSTR, |
| SparePartition: PWSTR, |
| Flags: ULONG, |
| ) -> BOOL; |
| pub fn AddSecureMemoryCacheCallback( |
| pfnCallBack: PSECURE_MEMORY_CACHE_CALLBACK, |
| ) -> BOOL; |
| pub fn RemoveSecureMemoryCacheCallback( |
| pfnCallBack: PSECURE_MEMORY_CACHE_CALLBACK, |
| ) -> BOOL; |
| pub fn CopyContext( |
| Destination: PCONTEXT, |
| ContextFlags: DWORD, |
| Source: PCONTEXT, |
| ) -> BOOL; |
| pub fn InitializeContext( |
| Buffer: PVOID, |
| ContextFlags: DWORD, |
| Context: *mut PCONTEXT, |
| ContextLength: PDWORD, |
| ) -> BOOL; |
| pub fn GetEnabledXStateFeatures() -> DWORD64; |
| pub fn GetXStateFeaturesMask( |
| Context: PCONTEXT, |
| FeatureMask: PDWORD64, |
| ) -> BOOL; |
| #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] |
| pub fn LocateXStateFeature( |
| Context: PCONTEXT, |
| FeatureId: DWORD, |
| Length: PDWORD, |
| ) -> PVOID; |
| #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] |
| pub fn SetXStateFeaturesMask( |
| Context: PCONTEXT, |
| FeatureMask: DWORD64, |
| ) -> BOOL; |
| pub fn EnableThreadProfiling( |
| ThreadHandle: HANDLE, |
| Flags: DWORD, |
| HardwareCounters: DWORD64, |
| PerformanceDataHandle: *mut HANDLE, |
| ) -> BOOL; |
| pub fn DisableThreadProfiling( |
| PerformanceDataHandle: HANDLE, |
| ) -> DWORD; |
| pub fn QueryThreadProfiling( |
| ThreadHandle: HANDLE, |
| Enabled: PBOOLEAN, |
| ) -> DWORD; |
| pub fn ReadThreadProfilingData( |
| PerformanceDataHandle: HANDLE, |
| Flags: DWORD, |
| PerformanceData: PPERFORMANCE_DATA, |
| ) -> DWORD; |
| // intrinsic InterlockedIncrement |
| // intrinsic InterlockedDecrement |
| // intrinsic InterlockedExchange |
| // intrinsic InterlockedExchangeAdd |
| // intrinsic InterlockedExchangeSubtract |
| // intrinsic InterlockedCompareExchange |
| // intrinsic InterlockedAnd |
| // intrinsic InterlockedOr |
| // intrinsic InterlockedXor |
| } |