1 // Copyright © 2015, Peter Atashian
2 // Licensed under the MIT License <LICENSE.md>
3 //! This module defines the 32-Bit Windows Base APIs
4 pub const FILE_BEGIN: ::DWORD = 0;
5 pub const FILE_CURRENT: ::DWORD = 1;
6 pub const FILE_END: ::DWORD = 2;
7 pub const WAIT_FAILED: ::DWORD = 0xFFFFFFFF;
8 pub const WAIT_OBJECT_0: ::DWORD = ::STATUS_WAIT_0 as ::DWORD;
9 pub const WAIT_ABANDONED: ::DWORD = ::STATUS_ABANDONED_WAIT_0 as ::DWORD;
10 pub const WAIT_ABANDONED_0: ::DWORD = ::STATUS_ABANDONED_WAIT_0 as ::DWORD;
11 pub const WAIT_IO_COMPLETION: ::DWORD = ::STATUS_USER_APC as ::DWORD;
12 pub const FILE_FLAG_WRITE_THROUGH: ::DWORD = 0x80000000;
13 pub const FILE_FLAG_OVERLAPPED: ::DWORD = 0x40000000;
14 pub const FILE_FLAG_NO_BUFFERING: ::DWORD = 0x20000000;
15 pub const FILE_FLAG_RANDOM_ACCESS: ::DWORD = 0x10000000;
16 pub const FILE_FLAG_SEQUENTIAL_SCAN: ::DWORD = 0x08000000;
17 pub const FILE_FLAG_DELETE_ON_CLOSE: ::DWORD = 0x04000000;
18 pub const FILE_FLAG_BACKUP_SEMANTICS: ::DWORD = 0x02000000;
19 pub const FILE_FLAG_POSIX_SEMANTICS: ::DWORD = 0x01000000;
20 pub const FILE_FLAG_SESSION_AWARE: ::DWORD = 0x00800000;
21 pub const FILE_FLAG_OPEN_REPARSE_POINT: ::DWORD = 0x00200000;
22 pub const FILE_FLAG_OPEN_NO_RECALL: ::DWORD = 0x00100000;
23 pub const FILE_FLAG_FIRST_PIPE_INSTANCE: ::DWORD = 0x00080000;
24 pub const FILE_FLAG_OPEN_REQUIRING_OPLOCK: ::DWORD = 0x00040000;
25 pub const PROGRESS_CONTINUE: ::DWORD = 0;
26 pub const PROGRESS_CANCEL: ::DWORD = 1;
27 pub const PROGRESS_STOP: ::DWORD = 2;
28 pub const PROGRESS_QUIET: ::DWORD = 3;
29 pub const CALLBACK_CHUNK_FINISHED: ::DWORD = 0x00000000;
30 pub const CALLBACK_STREAM_SWITCH: ::DWORD = 0x00000001;
31 pub const COPY_FILE_FAIL_IF_EXISTS: ::DWORD = 0x00000001;
32 pub const COPY_FILE_RESTARTABLE: ::DWORD = 0x00000002;
33 pub const COPY_FILE_OPEN_SOURCE_FOR_WRITE: ::DWORD = 0x00000004;
34 pub const COPY_FILE_ALLOW_DECRYPTED_DESTINATION: ::DWORD = 0x00000008;
35 pub const COPY_FILE_COPY_SYMLINK: ::DWORD = 0x00000800;
36 pub const COPY_FILE_NO_BUFFERING: ::DWORD = 0x00001000;
37 pub const COPY_FILE_REQUEST_SECURITY_PRIVILEGES: ::DWORD = 0x00002000;
38 pub const COPY_FILE_RESUME_FROM_PAUSE: ::DWORD = 0x00004000;
39 pub const COPY_FILE_NO_OFFLOAD: ::DWORD = 0x00040000;
40 pub const REPLACEFILE_WRITE_THROUGH: ::DWORD = 0x00000001;
41 pub const REPLACEFILE_IGNORE_MERGE_ERRORS: ::DWORD = 0x00000002;
42 pub const REPLACEFILE_IGNORE_ACL_ERRORS: ::DWORD = 0x00000004;
43 pub const PIPE_ACCESS_INBOUND: ::DWORD = 0x00000001;
44 pub const PIPE_ACCESS_OUTBOUND: ::DWORD = 0x00000002;
45 pub const PIPE_ACCESS_DUPLEX: ::DWORD = 0x00000003;
46 pub const PIPE_CLIENT_END: ::DWORD = 0x00000000;
47 pub const PIPE_SERVER_END: ::DWORD = 0x00000001;
48 pub const PIPE_WAIT: ::DWORD = 0x00000000;
49 pub const PIPE_NOWAIT: ::DWORD = 0x00000001;
50 pub const PIPE_READMODE_BYTE: ::DWORD = 0x00000000;
51 pub const PIPE_READMODE_MESSAGE: ::DWORD = 0x00000002;
52 pub const PIPE_TYPE_BYTE: ::DWORD = 0x00000000;
53 pub const PIPE_TYPE_MESSAGE: ::DWORD = 0x00000004;
54 pub const PIPE_ACCEPT_REMOTE_CLIENTS: ::DWORD = 0x00000000;
55 pub const PIPE_REJECT_REMOTE_CLIENTS: ::DWORD = 0x00000008;
56 pub const PIPE_UNLIMITED_INSTANCES: ::DWORD = 255;
57 //270
58 pub const SECURITY_CONTEXT_TRACKING: ::DWORD = 0x00040000;
59 pub const SECURITY_EFFECTIVE_ONLY: ::DWORD = 0x00080000;
60 pub const SECURITY_SQOS_PRESENT: ::DWORD = 0x00100000;
61 pub const SECURITY_VALID_SQOS_FLAGS: ::DWORD = 0x001F0000;
62 //282
63 pub type PFIBER_START_ROUTINE = Option<unsafe extern "system" fn(lpFiberParameter: ::LPVOID)>;
64 pub type LPFIBER_START_ROUTINE = PFIBER_START_ROUTINE;
65 pub type PFIBER_CALLOUT_ROUTINE = Option<unsafe extern "system" fn(
66     lpParameter: ::LPVOID,
67 ) -> ::LPVOID>;
68 //299
69 pub type LPLDT_ENTRY = ::LPVOID; // TODO - fix this for 32-bit
70 //405
71 STRUCT!{struct COMMPROP {
72     wPacketLength: ::WORD,
73     wPacketVersion: ::WORD,
74     dwServiceMask: ::DWORD,
75     dwReserved1: ::DWORD,
76     dwMaxTxQueue: ::DWORD,
77     dwMaxRxQueue: ::DWORD,
78     dwMaxBaud: ::DWORD,
79     dwProvSubType: ::DWORD,
80     dwProvCapabilities: ::DWORD,
81     dwSettableParams: ::DWORD,
82     dwSettableBaud: ::DWORD,
83     wSettableData: ::WORD,
84     wSettableStopParity: ::WORD,
85     dwCurrentTxQueue: ::DWORD,
86     dwCurrentRxQueue: ::DWORD,
87     dwProvSpec1: ::DWORD,
88     dwProvSpec2: ::DWORD,
89     wcProvChar: [::WCHAR; 1],
90 }}
91 pub type LPCOMMPROP = *mut COMMPROP;
92 //432
93 STRUCT!{struct COMSTAT {
94     BitFields: ::DWORD,
95     cbInQue: ::DWORD,
96     cbOutQue : ::DWORD,
97 }}
98 BITFIELD!(COMSTAT BitFields: ::DWORD [
99     fCtsHold set_fCtsHold[0..1],
100     fDsrHold set_fDsrHold[1..2],
101     fRlsdHold set_fRlsdHold[2..3],
102     fXoffHold set_fXoffHold[3..4],
103     fXoffSent set_fXoffSent[4..5],
104     fEof set_fEof[5..6],
105     fTxim set_fTxim[6..7],
106     fReserved set_fReserved[7..32],
107 ]);
108 pub type LPCOMSTAT = *mut COMSTAT;
109 //460
110 STRUCT!{struct DCB {
111     DCBlength: ::DWORD,
112     BaudRate: ::DWORD,
113     BitFields: ::DWORD,
114     wReserved: ::WORD,
115     XonLim: ::WORD,
116     XoffLim: ::WORD,
117     ByteSize: ::BYTE,
118     Parity: ::BYTE,
119     StopBits: ::BYTE,
120     XonChar: ::c_char,
121     XoffChar: ::c_char,
122     ErrorChar: ::c_char,
123     EofChar: ::c_char,
124     EvtChar: ::c_char,
125     wReserved1: ::WORD,
126 }}
127 BITFIELD!(DCB BitFields: ::DWORD [
128     fBinary set_fBinary[0..1],
129     fParity set_fParity[1..2],
130     fOutxCtsFlow set_fOutxCtsFlow[2..3],
131     fOutxDsrFlow set_fOutxDsrFlow[3..4],
132     fDtrControl set_fDtrControl[4..6],
133     fDsrSensitivity set_fDsrSensitivity[6..7],
134     fTXContinueOnXoff set_fTXContinueOnXoff[7..8],
135     fOutX set_fOutX[8..9],
136     fInX set_fInX[9..10],
137     fErrorChar set_fErrorChar[10..11],
138     fNull set_fNull[11..12],
139     fRtsControl set_fRtsControl[12..14],
140     fAbortOnError set_fAbortOnError[14..15],
141     fDummy2 set_fDummy2[15..32],
142 ]);
143 pub type LPDCB = *mut DCB;
144 STRUCT!{struct COMMTIMEOUTS {
145     ReadIntervalTimeout: ::DWORD,
146     ReadTotalTimeoutMultiplier: ::DWORD,
147     ReadTotalTimeoutConstant: ::DWORD,
148     WriteTotalTimeoutMultiplier: ::DWORD,
149     WriteTotalTimeoutConstant: ::DWORD,
150 }}
151 pub type LPCOMMTIMEOUTS = *mut COMMTIMEOUTS;
152 STRUCT!{struct COMMCONFIG {
153     dwSize: ::DWORD,
154     wVersion: ::WORD,
155     wReserved: ::WORD,
156     dcb: DCB,
157     dwProviderSubType: ::DWORD,
158     dwProviderOffset: ::DWORD,
159     dwProviderSize: ::DWORD,
160     wcProviderData: [::WCHAR; 1],
161 }}
162 pub type LPCOMMCONFIG = *mut COMMCONFIG;
163 //547
164 STRUCT!{struct MEMORYSTATUS {
165     dwLength: ::DWORD,
166     dwMemoryLoad: ::DWORD,
167     dwTotalPhys: ::SIZE_T,
168     dwAvailPhys: ::SIZE_T,
169     dwTotalPageFile: ::SIZE_T,
170     dwAvailPageFile: ::SIZE_T,
171     dwTotalVirtual: ::SIZE_T,
172     dwAvailVirtual: ::SIZE_T,
173 }}
174 pub type LPMEMORYSTATUS = *mut MEMORYSTATUS;
175 //568
176 pub const DEBUG_PROCESS: ::DWORD = 0x00000001;
177 pub const DEBUG_ONLY_THIS_PROCESS: ::DWORD = 0x00000002;
178 pub const CREATE_SUSPENDED: ::DWORD = 0x00000004;
179 pub const DETACHED_PROCESS: ::DWORD = 0x00000008;
180 pub const CREATE_NEW_CONSOLE: ::DWORD = 0x00000010;
181 pub const NORMAL_PRIORITY_CLASS: ::DWORD = 0x00000020;
182 pub const IDLE_PRIORITY_CLASS: ::DWORD = 0x00000040;
183 pub const HIGH_PRIORITY_CLASS: ::DWORD = 0x00000080;
184 pub const REALTIME_PRIORITY_CLASS: ::DWORD = 0x00000100;
185 pub const CREATE_NEW_PROCESS_GROUP: ::DWORD = 0x00000200;
186 pub const CREATE_UNICODE_ENVIRONMENT: ::DWORD = 0x00000400;
187 pub const CREATE_SEPARATE_WOW_VDM: ::DWORD = 0x00000800;
188 pub const CREATE_SHARED_WOW_VDM: ::DWORD = 0x00001000;
189 pub const CREATE_FORCEDOS: ::DWORD = 0x00002000;
190 pub const BELOW_NORMAL_PRIORITY_CLASS: ::DWORD = 0x00004000;
191 pub const ABOVE_NORMAL_PRIORITY_CLASS: ::DWORD = 0x00008000;
192 pub const INHERIT_PARENT_AFFINITY: ::DWORD = 0x00010000;
193 pub const INHERIT_CALLER_PRIORITY: ::DWORD = 0x00020000;
194 pub const CREATE_PROTECTED_PROCESS: ::DWORD = 0x00040000;
195 pub const EXTENDED_STARTUPINFO_PRESENT: ::DWORD = 0x00080000;
196 pub const PROCESS_MODE_BACKGROUND_BEGIN: ::DWORD = 0x00100000;
197 pub const PROCESS_MODE_BACKGROUND_END: ::DWORD = 0x00200000;
198 pub const CREATE_BREAKAWAY_FROM_JOB: ::DWORD = 0x01000000;
199 pub const CREATE_PRESERVE_CODE_AUTHZ_LEVEL: ::DWORD = 0x02000000;
200 pub const CREATE_DEFAULT_ERROR_MODE: ::DWORD = 0x04000000;
201 pub const CREATE_NO_WINDOW: ::DWORD = 0x08000000;
202 pub const PROFILE_USER: ::DWORD = 0x10000000;
203 pub const PROFILE_KERNEL: ::DWORD = 0x20000000;
204 pub const PROFILE_SERVER: ::DWORD = 0x40000000;
205 pub const CREATE_IGNORE_SYSTEM_DEFAULT: ::DWORD = 0x80000000;
206 //618
207 pub const THREAD_PRIORITY_LOWEST: ::DWORD = ::THREAD_BASE_PRIORITY_MIN;
208 pub const THREAD_PRIORITY_BELOW_NORMAL: ::DWORD = THREAD_PRIORITY_LOWEST + 1;
209 pub const THREAD_PRIORITY_NORMAL: ::DWORD = 0;
210 pub const THREAD_PRIORITY_HIGHEST: ::DWORD = ::THREAD_BASE_PRIORITY_MAX;
211 pub const THREAD_PRIORITY_ABOVE_NORMAL: ::DWORD = THREAD_PRIORITY_HIGHEST - 1;
212 pub const THREAD_PRIORITY_ERROR_RETURN: ::DWORD = ::MAXLONG as ::DWORD;
213 pub const THREAD_PRIORITY_TIME_CRITICAL: ::DWORD = ::THREAD_BASE_PRIORITY_LOWRT;
214 pub const THREAD_PRIORITY_IDLE: ::DWORD = ::THREAD_BASE_PRIORITY_IDLE;
215 pub const THREAD_MODE_BACKGROUND_BEGIN: ::DWORD = 0x00010000;
216 pub const THREAD_MODE_BACKGROUND_END: ::DWORD = 0x00020000;
217 //666
218 pub const DRIVE_UNKNOWN: ::DWORD = 0;
219 pub const DRIVE_NO_ROOT_DIR: ::DWORD = 1;
220 pub const DRIVE_REMOVABLE: ::DWORD = 2;
221 pub const DRIVE_FIXED: ::DWORD = 3;
222 pub const DRIVE_REMOTE: ::DWORD = 4;
223 pub const DRIVE_CDROM: ::DWORD = 5;
224 pub const DRIVE_RAMDISK: ::DWORD = 6;
225 pub const FILE_TYPE_UNKNOWN: ::DWORD = 0x0000;
226 pub const FILE_TYPE_DISK: ::DWORD = 0x0001;
227 pub const FILE_TYPE_CHAR: ::DWORD = 0x0002;
228 pub const FILE_TYPE_PIPE: ::DWORD = 0x0003;
229 pub const FILE_TYPE_REMOTE: ::DWORD = 0x8000;
230 pub const STD_INPUT_HANDLE: ::DWORD = 0xFFFFFFF6;
231 pub const STD_OUTPUT_HANDLE: ::DWORD = 0xFFFFFFF5;
232 pub const STD_ERROR_HANDLE: ::DWORD = 0xFFFFFFF4;
233 pub const NOPARITY: ::DWORD = 0;
234 pub const ODDPARITY: ::DWORD = 1;
235 pub const EVENPARITY: ::DWORD = 2;
236 pub const MARKPARITY: ::DWORD = 3;
237 pub const SPACEPARITY: ::DWORD = 4;
238 pub const ONESTOPBIT: ::DWORD = 0;
239 pub const ONE5STOPBITS: ::DWORD = 1;
240 pub const TWOSTOPBITS: ::DWORD = 2;
241 pub const IGNORE: ::DWORD = 0;
242 pub const INFINITE: ::DWORD = 0xFFFFFFFF;
243 //1729
244 pub const SEM_FAILCRITICALERRORS: ::UINT = 0x0001;
245 pub const SEM_NOGPFAULTERRORBOX: ::UINT = 0x0002;
246 pub const SEM_NOALIGNMENTFAULTEXCEPT: ::UINT = 0x0004;
247 pub const SEM_NOOPENFILEERRORBOX: ::UINT = 0x8000;
248 //2320
249 pub const FORMAT_MESSAGE_IGNORE_INSERTS: ::DWORD = 0x00000200;
250 pub const FORMAT_MESSAGE_FROM_STRING: ::DWORD = 0x00000400;
251 pub const FORMAT_MESSAGE_FROM_HMODULE: ::DWORD = 0x00000800;
252 pub const FORMAT_MESSAGE_FROM_SYSTEM: ::DWORD = 0x00001000;
253 pub const FORMAT_MESSAGE_ARGUMENT_ARRAY: ::DWORD = 0x00002000;
254 pub const FORMAT_MESSAGE_MAX_WIDTH_MASK: ::DWORD = 0x000000FF;
255 pub const FORMAT_MESSAGE_ALLOCATE_BUFFER: ::DWORD = 0x00000100;
256 //2873
257 pub const STARTF_USESHOWWINDOW: ::DWORD = 0x00000001;
258 pub const STARTF_USESIZE: ::DWORD = 0x00000002;
259 pub const STARTF_USEPOSITION: ::DWORD = 0x00000004;
260 pub const STARTF_USECOUNTCHARS: ::DWORD = 0x00000008;
261 pub const STARTF_USEFILLATTRIBUTE: ::DWORD = 0x00000010;
262 pub const STARTF_RUNFULLSCREEN: ::DWORD = 0x00000020;
263 pub const STARTF_FORCEONFEEDBACK: ::DWORD = 0x00000040;
264 pub const STARTF_FORCEOFFFEEDBACK: ::DWORD = 0x00000080;
265 pub const STARTF_USESTDHANDLES: ::DWORD = 0x00000100;
266 pub const STARTF_USEHOTKEY: ::DWORD = 0x00000200;
267 pub const STARTF_TITLEISLINKNAME: ::DWORD = 0x00000800;
268 pub const STARTF_TITLEISAPPID: ::DWORD = 0x00001000;
269 pub const STARTF_PREVENTPINNING: ::DWORD = 0x00002000;
270 pub const STARTF_UNTRUSTEDSOURCE: ::DWORD = 0x00008000;
271 //5002
272 pub type LPPROGRESS_ROUTINE = Option<unsafe extern "system" fn(
273     TotalFileSize: ::LARGE_INTEGER, TotalBytesTransferred: ::LARGE_INTEGER,
274     StreamSize: ::LARGE_INTEGER, StreamBytesTransferred: ::LARGE_INTEGER, dwStreamNumber: ::DWORD,
275     dwCallbackReason: ::DWORD, hSourceFile: ::HANDLE, hDestinationFile: ::HANDLE, lpData: ::LPVOID,
276 ) -> ::DWORD>;
277 //5095
278 ENUM!{enum COPYFILE2_MESSAGE_TYPE {
279     COPYFILE2_CALLBACK_NONE = 0,
280     COPYFILE2_CALLBACK_CHUNK_STARTED,
281     COPYFILE2_CALLBACK_CHUNK_FINISHED,
282     COPYFILE2_CALLBACK_STREAM_STARTED,
283     COPYFILE2_CALLBACK_STREAM_FINISHED,
284     COPYFILE2_CALLBACK_POLL_CONTINUE,
285     COPYFILE2_CALLBACK_ERROR,
286     COPYFILE2_CALLBACK_MAX,
287 }}
288 ENUM!{enum COPYFILE2_MESSAGE_ACTION {
289     COPYFILE2_PROGRESS_CONTINUE = 0,
290     COPYFILE2_PROGRESS_CANCEL,
291     COPYFILE2_PROGRESS_STOP,
292     COPYFILE2_PROGRESS_QUIET,
293     COPYFILE2_PROGRESS_PAUSE,
294 }}
295 ENUM!{enum COPYFILE2_COPY_PHASE {
296     COPYFILE2_PHASE_NONE = 0,
297     COPYFILE2_PHASE_PREPARE_SOURCE,
298     COPYFILE2_PHASE_PREPARE_DEST,
299     COPYFILE2_PHASE_READ_SOURCE,
300     COPYFILE2_PHASE_WRITE_DESTINATION,
301     COPYFILE2_PHASE_SERVER_COPY,
302     COPYFILE2_PHASE_NAMEGRAFT_COPY,
303     COPYFILE2_PHASE_MAX,
304 }}
305 //5129
306 STRUCT!{struct COPYFILE2_MESSAGE_ChunkStarted {
307     dwStreamNumber: ::DWORD,
308     dwReserved: ::DWORD,
309     hSourceFile: ::HANDLE,
310     hDestinationFile: ::HANDLE,
311     uliChunkNumber: ::ULARGE_INTEGER,
312     uliChunkSize: ::ULARGE_INTEGER,
313     uliStreamSize: ::ULARGE_INTEGER,
314     uliTotalFileSize: ::ULARGE_INTEGER,
315 }}
316 STRUCT!{struct COPYFILE2_MESSAGE_ChunkFinished {
317     dwStreamNumber: ::DWORD,
318     dwFlags: ::DWORD,
319     hSourceFile: ::HANDLE,
320     hDestinationFile: ::HANDLE,
321     uliChunkNumber: ::ULARGE_INTEGER,
322     uliChunkSize: ::ULARGE_INTEGER,
323     uliStreamSize: ::ULARGE_INTEGER,
324     uliStreamBytesTransferred: ::ULARGE_INTEGER,
325     uliTotalFileSize: ::ULARGE_INTEGER,
326     uliTotalBytesTransferred: ::ULARGE_INTEGER,
327 }}
328 STRUCT!{struct COPYFILE2_MESSAGE_StreamStarted {
329     dwStreamNumber: ::DWORD,
330     dwReserved: ::DWORD,
331     hSourceFile: ::HANDLE,
332     hDestinationFile: ::HANDLE,
333     uliStreamSize: ::ULARGE_INTEGER,
334     uliTotalFileSize: ::ULARGE_INTEGER,
335 }}
336 STRUCT!{struct COPYFILE2_MESSAGE_StreamFinished {
337     dwStreamNumber: ::DWORD,
338     dwReserved: ::DWORD,
339     hSourceFile: ::HANDLE,
340     hDestinationFile: ::HANDLE,
341     uliStreamSize: ::ULARGE_INTEGER,
342     uliStreamBytesTransferred: ::ULARGE_INTEGER,
343     uliTotalFileSize: ::ULARGE_INTEGER,
344     uliTotalBytesTransferred: ::ULARGE_INTEGER,
345 }}
346 STRUCT!{struct COPYFILE2_MESSAGE_PollContinue {
347     dwReserved: ::DWORD,
348 }}
349 STRUCT!{struct COPYFILE2_MESSAGE_Error {
350     CopyPhase: COPYFILE2_COPY_PHASE,
351     dwStreamNumber: ::DWORD,
352     hrFailure: ::HRESULT,
353     dwReserved: ::DWORD,
354     uliChunkNumber: ::ULARGE_INTEGER,
355     uliStreamSize: ::ULARGE_INTEGER,
356     uliStreamBytesTransferred: ::ULARGE_INTEGER,
357     uliTotalFileSize: ::ULARGE_INTEGER,
358     uliTotalBytesTransferred: ::ULARGE_INTEGER,
359 }}
360 #[cfg(target_arch="x86")]
361 STRUCT!{struct COPYFILE2_MESSAGE {
362     Type: COPYFILE2_MESSAGE_TYPE,
363     dwPadding: ::DWORD,
364     Info: [u64; 8],
365 }}
366 #[cfg(target_arch="x86_64")]
367 STRUCT!{struct COPYFILE2_MESSAGE {
368     Type: COPYFILE2_MESSAGE_TYPE,
369     dwPadding: ::DWORD,
370     Info: [u64; 9],
371 }}
372 UNION!{COPYFILE2_MESSAGE, Info, ChunkStarted, ChunkStarted_mut, COPYFILE2_MESSAGE_ChunkStarted}
373 UNION!{COPYFILE2_MESSAGE, Info, ChunkFinished, ChunkFinished_mut, COPYFILE2_MESSAGE_ChunkFinished}
374 UNION!{COPYFILE2_MESSAGE, Info, StreamStarted, StreamStarted_mut, COPYFILE2_MESSAGE_StreamStarted}
375 UNION!{COPYFILE2_MESSAGE, Info, StreamFinished, StreamFinished_mut,
376     COPYFILE2_MESSAGE_StreamFinished}
377 UNION!{COPYFILE2_MESSAGE, Info, PollContinue, PollContinue_mut, COPYFILE2_MESSAGE_PollContinue}
378 UNION!{COPYFILE2_MESSAGE, Info, Error, Error_mut, COPYFILE2_MESSAGE_Error}
379 pub type PCOPYFILE2_PROGRESS_ROUTINE = Option<unsafe extern "system" fn(
380     pMessage: *const COPYFILE2_MESSAGE, pvCallbackContext: ::PVOID,
381 ) -> COPYFILE2_MESSAGE_ACTION>;
382 STRUCT!{nodebug struct COPYFILE2_EXTENDED_PARAMETERS {
383     dwSize: ::DWORD,
384     dwCopyFlags: ::DWORD,
385     pfCancel: *mut ::BOOL,
386     pProgressRoutine: PCOPYFILE2_PROGRESS_ROUTINE,
387     pvCallbackContext: ::PVOID,
388 }}
389 //5377
390 pub const MOVEFILE_REPLACE_EXISTING: ::DWORD = 0x00000001;
391 pub const MOVEFILE_COPY_ALLOWED: ::DWORD = 0x00000002;
392 pub const MOVEFILE_DELAY_UNTIL_REBOOT: ::DWORD = 0x00000004;
393 pub const MOVEFILE_WRITE_THROUGH: ::DWORD = 0x00000008;
394 pub const MOVEFILE_CREATE_HARDLINK: ::DWORD = 0x00000010;
395 pub const MOVEFILE_FAIL_IF_NOT_TRACKABLE: ::DWORD = 0x00000020;
396 //7176
397 pub const HW_PROFILE_GUIDLEN: usize = 39;
398 //pub const MAX_PROFILE_LEN: usize = 80;
399 pub const DOCKINFO_UNDOCKED: ::DWORD = 0x1;
400 pub const DOCKINFO_DOCKED: ::DWORD = 0x2;
401 pub const DOCKINFO_USER_SUPPLIED: ::DWORD = 0x4;
402 pub const DOCKINFO_USER_UNDOCKED: ::DWORD = DOCKINFO_USER_SUPPLIED | DOCKINFO_UNDOCKED;
403 pub const DOCKINFO_USER_DOCKED: ::DWORD = DOCKINFO_USER_SUPPLIED | DOCKINFO_DOCKED;
404 STRUCT!{nodebug struct HW_PROFILE_INFOA {
405     dwDockInfo: ::DWORD,
406     szHwProfileGuid: [::CHAR; HW_PROFILE_GUIDLEN],
407     szHwProfileName: [::CHAR; ::MAX_PROFILE_LEN],
408 }}
409 pub type LPHW_PROFILE_INFOA = *mut HW_PROFILE_INFOA;
410 STRUCT!{nodebug struct HW_PROFILE_INFOW {
411     dwDockInfo: ::DWORD,
412     szHwProfileGuid: [::WCHAR; HW_PROFILE_GUIDLEN],
413     szHwProfileName: [::WCHAR; ::MAX_PROFILE_LEN],
414 }}
415 pub type LPHW_PROFILE_INFOW = *mut HW_PROFILE_INFOW;
416 //7574
417 STRUCT!{struct ACTCTXA {
418     cbSize: ::ULONG,
419     dwFlags: ::DWORD,
420     lpSource: ::LPCSTR,
421     wProcessorArchitecture: ::USHORT,
422     wLangId: ::LANGID,
423     lpAssemblyDirectory: ::LPCSTR,
424     lpResourceName: ::LPCSTR,
425     lpApplicationName: ::LPCSTR,
426     hModule: ::HMODULE,
427 }}
428 pub type PACTCTXA = *mut ACTCTXA;
429 STRUCT!{struct ACTCTXW {
430     cbSize: ::ULONG,
431     dwFlags: ::DWORD,
432     lpSource: ::LPCWSTR,
433     wProcessorArchitecture: ::USHORT,
434     wLangId: ::LANGID,
435     lpAssemblyDirectory: ::LPCWSTR,
436     lpResourceName: ::LPCWSTR,
437     lpApplicationName: ::LPCWSTR,
438     hModule: ::HMODULE,
439 }}
440 pub type PACTCTXW = *mut ACTCTXW;
441 pub type PCACTCTXA = *const ACTCTXA;
442 pub type PCACTCTXW = *const ACTCTXW;
443 //
444 pub type PUMS_CONTEXT = *mut ::c_void;
445 pub type PUMS_COMPLETION_LIST = *mut ::c_void;
446 pub type UMS_THREAD_INFO_CLASS = ::RTL_UMS_THREAD_INFO_CLASS;
447 pub type PUMS_THREAD_INFO_CLASS = *mut UMS_THREAD_INFO_CLASS;
448 pub type PUMS_SCHEDULER_ENTRY_POINT = ::PRTL_UMS_SCHEDULER_ENTRY_POINT;
449 STRUCT!{nodebug struct UMS_SCHEDULER_STARTUP_INFO {
450     UmsVersion: ::ULONG,
451     CompletionList: PUMS_COMPLETION_LIST,
452     SchedulerProc: PUMS_SCHEDULER_ENTRY_POINT,
453     SchedulerParam: ::PVOID,
454 }}
455 pub type PUMS_SCHEDULER_STARTUP_INFO = *mut UMS_SCHEDULER_STARTUP_INFO;
456 STRUCT!{struct UMS_SYSTEM_THREAD_INFORMATION {
457     UmsVersion: ::ULONG,
458     BitFields: ::ULONG,
459 }}
460 BITFIELD!(UMS_SYSTEM_THREAD_INFORMATION BitFields: ::ULONG [
461     IsUmsSchedulerThread set_IsUmsSchedulerThread[0..1],
462     IsUmsWorkerThread set_IsUmsWorkerThread[1..2],
463 ]);
464 UNION!(
465     UMS_SYSTEM_THREAD_INFORMATION, BitFields, ThreadUmsFlags, ThreadUmsFlags_mut,
466     ::ULONG
467 );
468 pub type PUMS_SYSTEM_THREAD_INFORMATION = *mut UMS_SYSTEM_THREAD_INFORMATION;
469 STRUCT!{struct ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA {
470     lpInformation: ::PVOID,
471     lpSectionBase: ::PVOID,
472     ulSectionLength: ::ULONG,
473     lpSectionGlobalDataBase: ::PVOID,
474     ulSectionGlobalDataLength: ::ULONG,
475 }}
476 pub type PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA =
477     *mut ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
478 pub type PCACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA =
479     *const ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
480 STRUCT!{struct ACTCTX_SECTION_KEYED_DATA {
481     cbSize: ::ULONG,
482     ulDataFormatVersion: ::ULONG,
483     lpData: ::PVOID,
484     ulLength: ::ULONG,
485     lpSectionGlobalData: ::PVOID,
486     ulSectionGlobalDataLength: ::ULONG,
487     lpSectionBase: ::PVOID,
488     ulSectionTotalLength: ::ULONG,
489     hActCtx: ::HANDLE,
490     ulAssemblyRosterIndex: ::ULONG,
491     ulFlags: ::ULONG,
492     AssemblyMetadata: ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA,
493 }}
494 pub type PACTCTX_SECTION_KEYED_DATA = *mut ACTCTX_SECTION_KEYED_DATA;
495 pub type PCACTCTX_SECTION_KEYED_DATA = *const ACTCTX_SECTION_KEYED_DATA;
496 ENUM!{enum STREAM_INFO_LEVELS {
497     FindStreamInfoStandard,
498     FindStreamInfoMaxInfoLevel,
499 }}
500 ENUM!{enum PROCESS_INFORMATION_CLASS {
501     ProcessMemoryPriority,
502     ProcessInformationClassMax,
503 }}
504 ENUM!{enum DEP_SYSTEM_POLICY_TYPE {
505     DEPPolicyAlwaysOff = 0,
506     DEPPolicyAlwaysOn,
507     DEPPolicyOptIn,
508     DEPPolicyOptOut,
509     DEPTotalPolicyCount,
510 }}
511 ENUM!{enum PIPE_ATTRIBUTE_TYPE {
512     PipeAttribute,
513     PipeConnectionAttribute,
514     PipeHandleAttribute,
515 }}
516 pub type APPLICATION_RECOVERY_CALLBACK = Option<unsafe extern "system" fn(
517     pvParameter: ::PVOID
518 ) -> ::DWORD>;
519 STRUCT!{struct SYSTEM_POWER_STATUS {
520     ACLineStatus: ::BYTE,
521     BatteryFlag: ::BYTE,
522     BatteryLifePercent: ::BYTE,
523     Reserved1: ::BYTE,
524     BatteryLifeTime: ::DWORD,
525     BatteryFullLifeTime: ::DWORD,
526 }}
527 pub type LPSYSTEM_POWER_STATUS = *mut SYSTEM_POWER_STATUS;
528 pub const OFS_MAXPATHNAME: usize = 128;
529 STRUCT!{nodebug struct OFSTRUCT {
530     cBytes: ::BYTE,
531     fFixedDisk: ::BYTE,
532     nErrCode: ::WORD,
533     Reserved1: ::WORD,
534     Reserved2: ::WORD,
535     szPathName: [::CHAR; OFS_MAXPATHNAME],
536 }}
537 pub type POFSTRUCT = *mut OFSTRUCT;
538 pub type LPOFSTRUCT = *mut OFSTRUCT;
539 ENUM!{enum FILE_ID_TYPE {
540     FileIdType,
541     ObjectIdType,
542     ExtendedFileIdType,
543     MaximumFileIdType,
544 }}
545 STRUCT!{struct FILE_ID_DESCRIPTOR {
546     dwSize: ::DWORD,
547     Type: FILE_ID_TYPE,
548     ObjectId: ::GUID,
549 }}
550 UNION!(FILE_ID_DESCRIPTOR, ObjectId, FileId, FileId_mut, ::LARGE_INTEGER);
551 UNION!(FILE_ID_DESCRIPTOR, ObjectId, ExtendedFileId, ExtendedFileId_mut, ::FILE_ID_128);
552 pub type LPFILE_ID_DESCRIPTOR = *mut FILE_ID_DESCRIPTOR;
553