// Copyright © 2015, Peter Atashian // Licensed under the MIT License //! This module defines the 32-Bit Windows Base APIs 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 ::DWORD; pub const WAIT_ABANDONED: ::DWORD = ::STATUS_ABANDONED_WAIT_0 as ::DWORD; pub const WAIT_ABANDONED_0: ::DWORD = ::STATUS_ABANDONED_WAIT_0 as ::DWORD; pub const WAIT_IO_COMPLETION: ::DWORD = ::STATUS_USER_APC as ::DWORD; 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 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; //270 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; //282 pub type PFIBER_START_ROUTINE = Option; pub type LPFIBER_START_ROUTINE = PFIBER_START_ROUTINE; pub type PFIBER_CALLOUT_ROUTINE = Option ::LPVOID>; //299 pub type LPLDT_ENTRY = ::LPVOID; // TODO - fix this for 32-bit //405 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; //432 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; //460 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; //547 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; //568 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; //618 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 ::DWORD; 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; //666 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 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 = 0xFFFFFFF6; pub const STD_OUTPUT_HANDLE: ::DWORD = 0xFFFFFFF5; pub const STD_ERROR_HANDLE: ::DWORD = 0xFFFFFFF4; pub const NOPARITY: ::DWORD = 0; pub const ODDPARITY: ::DWORD = 1; pub const EVENPARITY: ::DWORD = 2; pub const MARKPARITY: ::DWORD = 3; pub const SPACEPARITY: ::DWORD = 4; pub const ONESTOPBIT: ::DWORD = 0; pub const ONE5STOPBITS: ::DWORD = 1; pub const TWOSTOPBITS: ::DWORD = 2; pub const IGNORE: ::DWORD = 0; pub const INFINITE: ::DWORD = 0xFFFFFFFF; //1729 pub const SEM_FAILCRITICALERRORS: ::UINT = 0x0001; pub const SEM_NOGPFAULTERRORBOX: ::UINT = 0x0002; pub const SEM_NOALIGNMENTFAULTEXCEPT: ::UINT = 0x0004; pub const SEM_NOOPENFILEERRORBOX: ::UINT = 0x8000; //2320 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; //2873 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; //5002 pub type LPPROGRESS_ROUTINE = Option ::DWORD>; //5095 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, }} //5129 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, }} #[cfg(target_arch="x86")] STRUCT!{struct COPYFILE2_MESSAGE { Type: COPYFILE2_MESSAGE_TYPE, dwPadding: ::DWORD, Info: [u64; 8], }} #[cfg(target_arch="x86_64")] STRUCT!{struct COPYFILE2_MESSAGE { Type: COPYFILE2_MESSAGE_TYPE, dwPadding: ::DWORD, Info: [u64; 9], }} UNION!{COPYFILE2_MESSAGE, Info, ChunkStarted, ChunkStarted_mut, COPYFILE2_MESSAGE_ChunkStarted} UNION!{COPYFILE2_MESSAGE, Info, ChunkFinished, ChunkFinished_mut, COPYFILE2_MESSAGE_ChunkFinished} UNION!{COPYFILE2_MESSAGE, Info, StreamStarted, StreamStarted_mut, COPYFILE2_MESSAGE_StreamStarted} UNION!{COPYFILE2_MESSAGE, Info, StreamFinished, StreamFinished_mut, COPYFILE2_MESSAGE_StreamFinished} UNION!{COPYFILE2_MESSAGE, Info, PollContinue, PollContinue_mut, COPYFILE2_MESSAGE_PollContinue} UNION!{COPYFILE2_MESSAGE, Info, Error, Error_mut, COPYFILE2_MESSAGE_Error} pub type PCOPYFILE2_PROGRESS_ROUTINE = Option COPYFILE2_MESSAGE_ACTION>; STRUCT!{nodebug struct COPYFILE2_EXTENDED_PARAMETERS { dwSize: ::DWORD, dwCopyFlags: ::DWORD, pfCancel: *mut ::BOOL, pProgressRoutine: PCOPYFILE2_PROGRESS_ROUTINE, pvCallbackContext: ::PVOID, }} //5377 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; //7176 pub const HW_PROFILE_GUIDLEN: usize = 39; //pub const MAX_PROFILE_LEN: usize = 80; 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!{nodebug 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!{nodebug 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; //7574 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; // 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!{nodebug 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, BitFields: ::ULONG, }} BITFIELD!(UMS_SYSTEM_THREAD_INFORMATION BitFields: ::ULONG [ IsUmsSchedulerThread set_IsUmsSchedulerThread[0..1], IsUmsWorkerThread set_IsUmsWorkerThread[1..2], ]); UNION!( UMS_SYSTEM_THREAD_INFORMATION, BitFields, ThreadUmsFlags, ThreadUmsFlags_mut, ::ULONG ); pub type PUMS_SYSTEM_THREAD_INFORMATION = *mut UMS_SYSTEM_THREAD_INFORMATION; 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; ENUM!{enum STREAM_INFO_LEVELS { FindStreamInfoStandard, FindStreamInfoMaxInfoLevel, }} ENUM!{enum PROCESS_INFORMATION_CLASS { ProcessMemoryPriority, ProcessInformationClassMax, }} ENUM!{enum DEP_SYSTEM_POLICY_TYPE { DEPPolicyAlwaysOff = 0, DEPPolicyAlwaysOn, DEPPolicyOptIn, DEPPolicyOptOut, DEPTotalPolicyCount, }} ENUM!{enum PIPE_ATTRIBUTE_TYPE { PipeAttribute, PipeConnectionAttribute, PipeHandleAttribute, }} pub type APPLICATION_RECOVERY_CALLBACK = Option ::DWORD>; 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; pub const OFS_MAXPATHNAME: usize = 128; STRUCT!{nodebug 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; ENUM!{enum FILE_ID_TYPE { FileIdType, ObjectIdType, ExtendedFileIdType, MaximumFileIdType, }} STRUCT!{struct FILE_ID_DESCRIPTOR { dwSize: ::DWORD, Type: FILE_ID_TYPE, ObjectId: ::GUID, }} UNION!(FILE_ID_DESCRIPTOR, ObjectId, FileId, FileId_mut, ::LARGE_INTEGER); UNION!(FILE_ID_DESCRIPTOR, ObjectId, ExtendedFileId, ExtendedFileId_mut, ::FILE_ID_128); pub type LPFILE_ID_DESCRIPTOR = *mut FILE_ID_DESCRIPTOR;