1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! This module defines the 32-Bit Windows types and constants that are defined by NT, but exposed
7 //! through the Win32 API.
8 use ctypes::{__int64, __uint64, c_char, c_int, c_long, c_short, c_uint, c_ulong, c_void, wchar_t};
9 use shared::basetsd::{
10     DWORD64, KAFFINITY, LONG64, LONG_PTR, PDWORD64, PLONG64, SIZE_T, ULONG64, ULONG_PTR,
11 };
12 use shared::guiddef::{CLSID, GUID};
13 use shared::ktmtypes::UOW;
14 use shared::minwindef::{BYTE, DWORD, FALSE, PDWORD, TRUE, ULONG, USHORT, WORD};
15 #[cfg(target_arch = "aarch64")]
16 use shared::minwindef::PBYTE;
17 use vc::excpt::EXCEPTION_DISPOSITION;
18 use vc::vcruntime::size_t;
19 pub const ANYSIZE_ARRAY: usize = 1;
20 #[cfg(target_pointer_width = "32")]
21 IFDEF!{
22 pub const MAX_NATURAL_ALIGNMENT: usize = 4;
23 pub const MEMORY_ALLOCATION_ALIGNMENT: usize = 8;
24 }
25 #[cfg(target_pointer_width = "64")]
26 IFDEF!{
27 pub const MAX_NATURAL_ALIGNMENT: usize = 8;
28 pub const MEMORY_ALLOCATION_ALIGNMENT: usize = 16;
29 }
30 pub const SYSTEM_CACHE_ALIGNMENT_SIZE: usize = 64;
31 pub type PVOID = *mut c_void;
32 pub type PVOID64 = u64; // This is a 64-bit pointer, even when in 32-bit
33 pub type VOID = c_void;
34 pub type CHAR = c_char;
35 pub type SHORT = c_short;
36 pub type LONG = c_long;
37 pub type INT = c_int;
38 pub type WCHAR = wchar_t;
39 pub type PWCHAR = *mut WCHAR;
40 pub type LPWCH = *mut WCHAR;
41 pub type PWCH = *mut WCHAR;
42 pub type LPCWCH = *const WCHAR;
43 pub type PCWCH = *const WCHAR;
44 pub type NWPSTR = *mut WCHAR;
45 pub type LPWSTR = *mut WCHAR;
46 pub type PWSTR = *mut WCHAR;
47 pub type PZPWSTR = *mut PWSTR;
48 pub type PCZPWSTR = *const PWSTR;
49 pub type LPUWSTR = *mut WCHAR; // Unaligned pointer
50 pub type PUWSTR = *mut WCHAR; // Unaligned pointer
51 pub type LPCWSTR = *const WCHAR;
52 pub type PCWSTR = *const WCHAR;
53 pub type PZPCWSTR = *mut PCWSTR;
54 pub type PCZPCWSTR = *const PCWSTR;
55 pub type LPCUWSTR = *const WCHAR; // Unaligned pointer
56 pub type PCUWSTR = *const WCHAR; // Unaligned pointer
57 pub type PZZWSTR = *mut WCHAR;
58 pub type PCZZWSTR = *const WCHAR;
59 pub type PUZZWSTR = *mut WCHAR; // Unaligned pointer
60 pub type PCUZZWSTR = *const WCHAR; // Unaligned pointer
61 pub type PNZWCH = *mut WCHAR;
62 pub type PCNZWCH = *const WCHAR;
63 pub type PUNZWCH = *mut WCHAR; // Unaligned pointer
64 pub type PCUNZWCH = *const WCHAR; // Unaligned pointer
65 pub type LPCWCHAR = *const WCHAR;
66 pub type PCWCHAR = *const WCHAR;
67 pub type LPCUWCHAR = *const WCHAR; // Unaligned pointer
68 pub type PCUWCHAR = *const WCHAR; // Unaligned pointer
69 pub type UCSCHAR = c_ulong;
70 pub const UCSCHAR_INVALID_CHARACTER: UCSCHAR = 0xffffffff;
71 pub const MIN_UCSCHAR: UCSCHAR = 0;
72 pub const MAX_UCSCHAR: UCSCHAR = 0x0010FFFF;
73 pub type PUCSCHAR = *mut UCSCHAR;
74 pub type PCUCSCHAR = *const UCSCHAR;
75 pub type PUCSSTR = *mut UCSCHAR;
76 pub type PUUCSSTR = *mut UCSCHAR; // Unaligned pointer
77 pub type PCUCSSTR = *const UCSCHAR;
78 pub type PCUUCSSTR = *const UCSCHAR; // Unaligned pointer
79 pub type PUUCSCHAR = *mut UCSCHAR; // Unaligned pointer
80 pub type PCUUCSCHAR = *const UCSCHAR; // Unaligned pointer
81 pub type PCHAR = *mut CHAR;
82 pub type LPCH = *mut CHAR;
83 pub type PCH = *mut CHAR;
84 pub type LPCCH = *const CHAR;
85 pub type PCCH = *const CHAR;
86 pub type NPSTR = *mut CHAR;
87 pub type LPSTR = *mut CHAR;
88 pub type PSTR = *mut CHAR;
89 pub type PZPSTR = *mut PSTR;
90 pub type PCZPSTR = *const PSTR;
91 pub type LPCSTR = *const CHAR;
92 pub type PCSTR = *const CHAR;
93 pub type PZPCSTR = *mut PCSTR;
94 pub type PCZPCSTR = *const PCSTR;
95 pub type PZZSTR = *mut CHAR;
96 pub type PCZZSTR = *const CHAR;
97 pub type PNZCH = *mut CHAR;
98 pub type PCNZCH = *const CHAR;
99 // Skipping TCHAR things
100 pub type PSHORT = *mut SHORT;
101 pub type PLONG = *mut LONG;
102 pub const ALL_PROCESSOR_GROUPS: WORD = 0xffff;
103 STRUCT!{struct PROCESSOR_NUMBER {
104     Group: WORD,
105     Number: BYTE,
106     Reserved: BYTE,
107 }}
108 pub type PPROCESSOR_NUMBER = *mut PROCESSOR_NUMBER;
109 STRUCT!{struct GROUP_AFFINITY {
110     Mask: KAFFINITY,
111     Group: WORD,
112     Reserved: [WORD; 3],
113 }}
114 pub type PGROUP_AFFINITY = *mut GROUP_AFFINITY;
115 #[cfg(target_pointer_width = "32")]
116 pub const MAXIMUM_PROC_PER_GROUP: BYTE = 32;
117 #[cfg(target_pointer_width = "64")]
118 pub const MAXIMUM_PROC_PER_GROUP: BYTE = 64;
119 pub const MAXIMUM_PROCESSORS: BYTE = MAXIMUM_PROC_PER_GROUP;
120 pub type HANDLE = *mut c_void;
121 pub type PHANDLE = *mut HANDLE;
122 pub type FCHAR = BYTE;
123 pub type FSHORT = WORD;
124 pub type FLONG = DWORD;
125 pub type HRESULT = c_long;
126 pub type CCHAR = c_char;
127 pub type LCID = DWORD;
128 pub type PLCID = PDWORD;
129 pub type LANGID = WORD;
130 ENUM!{enum COMPARTMENT_ID {
131     UNSPECIFIED_COMPARTMENT_ID = 0,
132     DEFAULT_COMPARTMENT_ID,
133 }}
134 pub type PCOMPARTMENT_ID = *mut COMPARTMENT_ID;
135 pub const APPLICATION_ERROR_MASK: DWORD = 0x20000000;
136 pub const ERROR_SEVERITY_SUCCESS: DWORD = 0x00000000;
137 pub const ERROR_SEVERITY_INFORMATIONAL: DWORD = 0x40000000;
138 pub const ERROR_SEVERITY_WARNING: DWORD = 0x80000000;
139 pub const ERROR_SEVERITY_ERROR: DWORD = 0xC0000000;
140 STRUCT!{struct FLOAT128 {
141     LowPart: __int64,
142     HighPart: __int64,
143 }}
144 pub type PFLOAT128 = *mut FLOAT128;
145 pub type LONGLONG = __int64;
146 pub type ULONGLONG = __uint64;
147 pub const MAXLONGLONG: LONGLONG = 0x7fffffffffffffff;
148 pub type PLONGLONG = *mut LONGLONG;
149 pub type PULONGLONG = *mut ULONGLONG;
150 pub type USN = LONGLONG;
151 STRUCT!{struct LARGE_INTEGER_u {
152     LowPart: DWORD,
153     HighPart: LONG,
154 }}
155 UNION!{union LARGE_INTEGER {
156     [u64; 1],
157     QuadPart QuadPart_mut: LONGLONG,
158     u u_mut: LARGE_INTEGER_u,
159 }}
160 pub type PLARGE_INTEGER = *mut LARGE_INTEGER;
161 STRUCT!{struct ULARGE_INTEGER_u {
162     LowPart: DWORD,
163     HighPart: LONG,
164 }}
165 UNION!{union ULARGE_INTEGER {
166     [u64; 1],
167     QuadPart QuadPart_mut: ULONGLONG,
168     u u_mut: ULARGE_INTEGER_u,
169 }}
170 pub type PULARGE_INTEGER = *mut ULARGE_INTEGER;
171 pub type RTL_REFERENCE_COUNT = LONG_PTR;
172 pub type PRTL_REFERENCE_COUNT = *mut LONG_PTR;
173 pub type RTL_REFERENCE_COUNT32 = LONG;
174 pub type PRTL_REFERENCE_COUNT32 = *mut LONG;
175 pub use shared::ntdef::LUID;
176 pub type PLUID = *mut LUID;
177 pub type DWORDLONG = ULONGLONG;
178 pub type PDWORDLONG = *mut DWORDLONG;
179 pub const ANSI_NULL: CHAR = 0;
180 pub const UNICODE_NULL: WCHAR = 0;
181 pub const UNICODE_STRING_MAX_BYTES: WORD = 65534;
182 pub const UNICODE_STRING_MAX_CHARS: WORD = 32767;
183 pub type BOOLEAN = BYTE;
184 pub type PBOOLEAN = *mut BOOLEAN;
185 STRUCT!{struct LIST_ENTRY {
186     Flink: *mut LIST_ENTRY,
187     Blink: *mut LIST_ENTRY,
188 }}
189 pub type PLIST_ENTRY = *mut LIST_ENTRY;
190 pub type PRLIST_ENTRY = *mut LIST_ENTRY; // Restricted pointer
191 STRUCT!{struct SINGLE_LIST_ENTRY {
192     Next: *mut SINGLE_LIST_ENTRY,
193 }}
194 pub type PSINGLE_LIST_ENTRY = *mut SINGLE_LIST_ENTRY;
195 STRUCT!{struct LIST_ENTRY32 {
196     Flink: DWORD,
197     Blink: DWORD,
198 }}
199 pub type PLIST_ENTRY32 = *mut LIST_ENTRY32;
200 STRUCT!{struct LIST_ENTRY64 {
201     Flink: ULONGLONG,
202     Blink: ULONGLONG,
203 }}
204 pub type PLIST_ENTRY64 = *mut LIST_ENTRY64;
205 STRUCT!{struct OBJECTID {
206     Lineage: GUID,
207     Uniquifier: DWORD,
208 }}
209 pub const MINCHAR: CHAR = 0x80;
210 pub const MAXCHAR: CHAR = 0x7f;
211 pub const MINSHORT: SHORT = 0x8000;
212 pub const MAXSHORT: SHORT = 0x7fff;
213 pub const MINLONG: LONG = 0x80000000;
214 pub const MAXLONG: LONG = 0x7fffffff;
215 pub const MAXBYTE: BYTE = 0xff;
216 pub const MAXWORD: WORD = 0xffff;
217 pub const MAXDWORD: DWORD = 0xffffffff;
218 FN!{stdcall PEXCEPTION_ROUTINE(
219     ExceptionRecord: *mut EXCEPTION_RECORD,
220     EstablisherFrame: PVOID,
221     ContextRecord: *mut CONTEXT,
222     DispatcherContext: PVOID,
223 ) -> EXCEPTION_DISPOSITION}
224 pub const VER_SERVER_NT: DWORD = 0x80000000;
225 pub const VER_WORKSTATION_NT: DWORD = 0x40000000;
226 pub const VER_SUITE_SMALLBUSINESS: DWORD = 0x00000001;
227 pub const VER_SUITE_ENTERPRISE: DWORD = 0x00000002;
228 pub const VER_SUITE_BACKOFFICE: DWORD = 0x00000004;
229 pub const VER_SUITE_COMMUNICATIONS: DWORD = 0x00000008;
230 pub const VER_SUITE_TERMINAL: DWORD = 0x00000010;
231 pub const VER_SUITE_SMALLBUSINESS_RESTRICTED: DWORD = 0x00000020;
232 pub const VER_SUITE_EMBEDDEDNT: DWORD = 0x00000040;
233 pub const VER_SUITE_DATACENTER: DWORD = 0x00000080;
234 pub const VER_SUITE_SINGLEUSERTS: DWORD = 0x00000100;
235 pub const VER_SUITE_PERSONAL: DWORD = 0x00000200;
236 pub const VER_SUITE_BLADE: DWORD = 0x00000400;
237 pub const VER_SUITE_EMBEDDED_RESTRICTED: DWORD = 0x00000800;
238 pub const VER_SUITE_SECURITY_APPLIANCE: DWORD = 0x00001000;
239 pub const VER_SUITE_STORAGE_SERVER: DWORD = 0x00002000;
240 pub const VER_SUITE_COMPUTE_SERVER: DWORD = 0x00004000;
241 pub const VER_SUITE_WH_SERVER: DWORD = 0x00008000;
242 pub const PRODUCT_UNDEFINED: DWORD = 0x00000000;
243 pub const PRODUCT_ULTIMATE: DWORD = 0x00000001;
244 pub const PRODUCT_HOME_BASIC: DWORD = 0x00000002;
245 pub const PRODUCT_HOME_PREMIUM: DWORD = 0x00000003;
246 pub const PRODUCT_ENTERPRISE: DWORD = 0x00000004;
247 pub const PRODUCT_HOME_BASIC_N: DWORD = 0x00000005;
248 pub const PRODUCT_BUSINESS: DWORD = 0x00000006;
249 pub const PRODUCT_STANDARD_SERVER: DWORD = 0x00000007;
250 pub const PRODUCT_DATACENTER_SERVER: DWORD = 0x00000008;
251 pub const PRODUCT_SMALLBUSINESS_SERVER: DWORD = 0x00000009;
252 pub const PRODUCT_ENTERPRISE_SERVER: DWORD = 0x0000000A;
253 pub const PRODUCT_STARTER: DWORD = 0x0000000B;
254 pub const PRODUCT_DATACENTER_SERVER_CORE: DWORD = 0x0000000C;
255 pub const PRODUCT_STANDARD_SERVER_CORE: DWORD = 0x0000000D;
256 pub const PRODUCT_ENTERPRISE_SERVER_CORE: DWORD = 0x0000000E;
257 pub const PRODUCT_ENTERPRISE_SERVER_IA64: DWORD = 0x0000000F;
258 pub const PRODUCT_BUSINESS_N: DWORD = 0x00000010;
259 pub const PRODUCT_WEB_SERVER: DWORD = 0x00000011;
260 pub const PRODUCT_CLUSTER_SERVER: DWORD = 0x00000012;
261 pub const PRODUCT_HOME_SERVER: DWORD = 0x00000013;
262 pub const PRODUCT_STORAGE_EXPRESS_SERVER: DWORD = 0x00000014;
263 pub const PRODUCT_STORAGE_STANDARD_SERVER: DWORD = 0x00000015;
264 pub const PRODUCT_STORAGE_WORKGROUP_SERVER: DWORD = 0x00000016;
265 pub const PRODUCT_STORAGE_ENTERPRISE_SERVER: DWORD = 0x00000017;
266 pub const PRODUCT_SERVER_FOR_SMALLBUSINESS: DWORD = 0x00000018;
267 pub const PRODUCT_SMALLBUSINESS_SERVER_PREMIUM: DWORD = 0x00000019;
268 pub const PRODUCT_HOME_PREMIUM_N: DWORD = 0x0000001A;
269 pub const PRODUCT_ENTERPRISE_N: DWORD = 0x0000001B;
270 pub const PRODUCT_ULTIMATE_N: DWORD = 0x0000001C;
271 pub const PRODUCT_WEB_SERVER_CORE: DWORD = 0x0000001D;
272 pub const PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT: DWORD = 0x0000001E;
273 pub const PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY: DWORD = 0x0000001F;
274 pub const PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING: DWORD = 0x00000020;
275 pub const PRODUCT_SERVER_FOUNDATION: DWORD = 0x00000021;
276 pub const PRODUCT_HOME_PREMIUM_SERVER: DWORD = 0x00000022;
277 pub const PRODUCT_SERVER_FOR_SMALLBUSINESS_V: DWORD = 0x00000023;
278 pub const PRODUCT_STANDARD_SERVER_V: DWORD = 0x00000024;
279 pub const PRODUCT_DATACENTER_SERVER_V: DWORD = 0x00000025;
280 pub const PRODUCT_ENTERPRISE_SERVER_V: DWORD = 0x00000026;
281 pub const PRODUCT_DATACENTER_SERVER_CORE_V: DWORD = 0x00000027;
282 pub const PRODUCT_STANDARD_SERVER_CORE_V: DWORD = 0x00000028;
283 pub const PRODUCT_ENTERPRISE_SERVER_CORE_V: DWORD = 0x00000029;
284 pub const PRODUCT_HYPERV: DWORD = 0x0000002A;
285 pub const PRODUCT_STORAGE_EXPRESS_SERVER_CORE: DWORD = 0x0000002B;
286 pub const PRODUCT_STORAGE_STANDARD_SERVER_CORE: DWORD = 0x0000002C;
287 pub const PRODUCT_STORAGE_WORKGROUP_SERVER_CORE: DWORD = 0x0000002D;
288 pub const PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE: DWORD = 0x0000002E;
289 pub const PRODUCT_STARTER_N: DWORD = 0x0000002F;
290 pub const PRODUCT_PROFESSIONAL: DWORD = 0x00000030;
291 pub const PRODUCT_PROFESSIONAL_N: DWORD = 0x00000031;
292 pub const PRODUCT_SB_SOLUTION_SERVER: DWORD = 0x00000032;
293 pub const PRODUCT_SERVER_FOR_SB_SOLUTIONS: DWORD = 0x00000033;
294 pub const PRODUCT_STANDARD_SERVER_SOLUTIONS: DWORD = 0x00000034;
295 pub const PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE: DWORD = 0x00000035;
296 pub const PRODUCT_SB_SOLUTION_SERVER_EM: DWORD = 0x00000036;
297 pub const PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM: DWORD = 0x00000037;
298 pub const PRODUCT_SOLUTION_EMBEDDEDSERVER: DWORD = 0x00000038;
299 pub const PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE: DWORD = 0x00000039;
300 pub const PRODUCT_PROFESSIONAL_EMBEDDED: DWORD = 0x0000003A;
301 pub const PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT: DWORD = 0x0000003B;
302 pub const PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL: DWORD = 0x0000003C;
303 pub const PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC: DWORD = 0x0000003D;
304 pub const PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC: DWORD = 0x0000003E;
305 pub const PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE: DWORD = 0x0000003F;
306 pub const PRODUCT_CLUSTER_SERVER_V: DWORD = 0x00000040;
307 pub const PRODUCT_EMBEDDED: DWORD = 0x00000041;
308 pub const PRODUCT_STARTER_E: DWORD = 0x00000042;
309 pub const PRODUCT_HOME_BASIC_E: DWORD = 0x00000043;
310 pub const PRODUCT_HOME_PREMIUM_E: DWORD = 0x00000044;
311 pub const PRODUCT_PROFESSIONAL_E: DWORD = 0x00000045;
312 pub const PRODUCT_ENTERPRISE_E: DWORD = 0x00000046;
313 pub const PRODUCT_ULTIMATE_E: DWORD = 0x00000047;
314 pub const PRODUCT_ENTERPRISE_EVALUATION: DWORD = 0x00000048;
315 pub const PRODUCT_MULTIPOINT_STANDARD_SERVER: DWORD = 0x0000004C;
316 pub const PRODUCT_MULTIPOINT_PREMIUM_SERVER: DWORD = 0x0000004D;
317 pub const PRODUCT_STANDARD_EVALUATION_SERVER: DWORD = 0x0000004F;
318 pub const PRODUCT_DATACENTER_EVALUATION_SERVER: DWORD = 0x00000050;
319 pub const PRODUCT_ENTERPRISE_N_EVALUATION: DWORD = 0x00000054;
320 pub const PRODUCT_EMBEDDED_AUTOMOTIVE: DWORD = 0x00000055;
321 pub const PRODUCT_EMBEDDED_INDUSTRY_A: DWORD = 0x00000056;
322 pub const PRODUCT_THINPC: DWORD = 0x00000057;
323 pub const PRODUCT_EMBEDDED_A: DWORD = 0x00000058;
324 pub const PRODUCT_EMBEDDED_INDUSTRY: DWORD = 0x00000059;
325 pub const PRODUCT_EMBEDDED_E: DWORD = 0x0000005A;
326 pub const PRODUCT_EMBEDDED_INDUSTRY_E: DWORD = 0x0000005B;
327 pub const PRODUCT_EMBEDDED_INDUSTRY_A_E: DWORD = 0x0000005C;
328 pub const PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER: DWORD = 0x0000005F;
329 pub const PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER: DWORD = 0x00000060;
330 pub const PRODUCT_CORE_ARM: DWORD = 0x00000061;
331 pub const PRODUCT_CORE_N: DWORD = 0x00000062;
332 pub const PRODUCT_CORE_COUNTRYSPECIFIC: DWORD = 0x00000063;
333 pub const PRODUCT_CORE_SINGLELANGUAGE: DWORD = 0x00000064;
334 pub const PRODUCT_CORE: DWORD = 0x00000065;
335 pub const PRODUCT_PROFESSIONAL_WMC: DWORD = 0x00000067;
336 pub const PRODUCT_MOBILE_CORE: DWORD = 0x00000068;
337 pub const PRODUCT_EMBEDDED_INDUSTRY_EVAL: DWORD = 0x00000069;
338 pub const PRODUCT_EMBEDDED_INDUSTRY_E_EVAL: DWORD = 0x0000006A;
339 pub const PRODUCT_EMBEDDED_EVAL: DWORD = 0x0000006B;
340 pub const PRODUCT_EMBEDDED_E_EVAL: DWORD = 0x0000006C;
341 pub const PRODUCT_NANO_SERVER: DWORD = 0x0000006D;
342 pub const PRODUCT_CLOUD_STORAGE_SERVER: DWORD = 0x0000006E;
343 pub const PRODUCT_CORE_CONNECTED: DWORD = 0x0000006F;
344 pub const PRODUCT_PROFESSIONAL_STUDENT: DWORD = 0x00000070;
345 pub const PRODUCT_CORE_CONNECTED_N: DWORD = 0x00000071;
346 pub const PRODUCT_PROFESSIONAL_STUDENT_N: DWORD = 0x00000072;
347 pub const PRODUCT_CORE_CONNECTED_SINGLELANGUAGE: DWORD = 0x00000073;
348 pub const PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC: DWORD = 0x00000074;
349 pub const PRODUCT_CONNECTED_CAR: DWORD = 0x00000075;
350 pub const PRODUCT_INDUSTRY_HANDHELD: DWORD = 0x00000076;
351 pub const PRODUCT_PPI_PRO: DWORD = 0x00000077;
352 pub const PRODUCT_ARM64_SERVER: DWORD = 0x00000078;
353 pub const PRODUCT_EDUCATION: DWORD = 0x00000079;
354 pub const PRODUCT_EDUCATION_N: DWORD = 0x0000007A;
355 pub const PRODUCT_IOTUAP: DWORD = 0x0000007B;
356 pub const PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER: DWORD = 0x0000007C;
357 pub const PRODUCT_ENTERPRISE_S: DWORD = 0x0000007D;
358 pub const PRODUCT_ENTERPRISE_S_N: DWORD = 0x0000007E;
359 pub const PRODUCT_PROFESSIONAL_S: DWORD = 0x0000007F;
360 pub const PRODUCT_PROFESSIONAL_S_N: DWORD = 0x00000080;
361 pub const PRODUCT_ENTERPRISE_S_EVALUATION: DWORD = 0x00000081;
362 pub const PRODUCT_ENTERPRISE_S_N_EVALUATION: DWORD = 0x00000082;
363 pub const PRODUCT_HOLOGRAPHIC: DWORD = 0x00000087;
364 pub const PRODUCT_PRO_SINGLE_LANGUAGE: DWORD = 0x0000008A;
365 pub const PRODUCT_PRO_CHINA: DWORD = 0x0000008B;
366 pub const PRODUCT_ENTERPRISE_SUBSCRIPTION: DWORD = 0x0000008C;
367 pub const PRODUCT_ENTERPRISE_SUBSCRIPTION_N: DWORD = 0x0000008D;
368 pub const PRODUCT_DATACENTER_NANO_SERVER: DWORD = 0x0000008F;
369 pub const PRODUCT_STANDARD_NANO_SERVER: DWORD = 0x00000090;
370 pub const PRODUCT_DATACENTER_A_SERVER_CORE: DWORD = 0x00000091;
371 pub const PRODUCT_STANDARD_A_SERVER_CORE: DWORD = 0x00000092;
372 pub const PRODUCT_DATACENTER_WS_SERVER_CORE: DWORD = 0x00000093;
373 pub const PRODUCT_STANDARD_WS_SERVER_CORE: DWORD = 0x00000094;
374 pub const PRODUCT_UTILITY_VM: DWORD = 0x00000095;
375 pub const PRODUCT_DATACENTER_EVALUATION_SERVER_CORE: DWORD = 0x0000009F;
376 pub const PRODUCT_STANDARD_EVALUATION_SERVER_CORE: DWORD = 0x000000A0;
377 pub const PRODUCT_PRO_WORKSTATION: DWORD = 0x000000A1;
378 pub const PRODUCT_PRO_WORKSTATION_N: DWORD = 0x000000A2;
379 pub const PRODUCT_PRO_FOR_EDUCATION: DWORD = 0x000000A4;
380 pub const PRODUCT_PRO_FOR_EDUCATION_N: DWORD = 0x000000A5;
381 pub const PRODUCT_AZURE_SERVER_CORE: DWORD = 0x000000A8;
382 pub const PRODUCT_AZURE_NANO_SERVER: DWORD = 0x000000A9;
383 pub const PRODUCT_ENTERPRISEG: DWORD = 0x000000AB;
384 pub const PRODUCT_ENTERPRISEGN: DWORD = 0x000000AC;
385 pub const PRODUCT_CLOUD: DWORD = 0x000000B2;
386 pub const PRODUCT_CLOUDN: DWORD = 0x000000B3;
387 pub const PRODUCT_UNLICENSED: DWORD = 0xABCDABCD;
388 pub const LANG_NEUTRAL: WORD = 0x00;
389 pub const LANG_INVARIANT: WORD = 0x7f;
390 pub const LANG_AFRIKAANS: WORD = 0x36;
391 pub const LANG_ALBANIAN: WORD = 0x1c;
392 pub const LANG_ALSATIAN: WORD = 0x84;
393 pub const LANG_AMHARIC: WORD = 0x5e;
394 pub const LANG_ARABIC: WORD = 0x01;
395 pub const LANG_ARMENIAN: WORD = 0x2b;
396 pub const LANG_ASSAMESE: WORD = 0x4d;
397 pub const LANG_AZERI: WORD = 0x2c;
398 pub const LANG_AZERBAIJANI: WORD = 0x2c;
399 pub const LANG_BANGLA: WORD = 0x45;
400 pub const LANG_BASHKIR: WORD = 0x6d;
401 pub const LANG_BASQUE: WORD = 0x2d;
402 pub const LANG_BELARUSIAN: WORD = 0x23;
403 pub const LANG_BENGALI: WORD = 0x45;
404 pub const LANG_BRETON: WORD = 0x7e;
405 pub const LANG_BOSNIAN: WORD = 0x1a;
406 pub const LANG_BOSNIAN_NEUTRAL: WORD = 0x781a;
407 pub const LANG_BULGARIAN: WORD = 0x02;
408 pub const LANG_CATALAN: WORD = 0x03;
409 pub const LANG_CENTRAL_KURDISH: WORD = 0x92;
410 pub const LANG_CHEROKEE: WORD = 0x5c;
411 pub const LANG_CHINESE: WORD = 0x04;
412 pub const LANG_CHINESE_SIMPLIFIED: WORD = 0x04;
413 pub const LANG_CHINESE_TRADITIONAL: WORD = 0x7c04;
414 pub const LANG_CORSICAN: WORD = 0x83;
415 pub const LANG_CROATIAN: WORD = 0x1a;
416 pub const LANG_CZECH: WORD = 0x05;
417 pub const LANG_DANISH: WORD = 0x06;
418 pub const LANG_DARI: WORD = 0x8c;
419 pub const LANG_DIVEHI: WORD = 0x65;
420 pub const LANG_DUTCH: WORD = 0x13;
421 pub const LANG_ENGLISH: WORD = 0x09;
422 pub const LANG_ESTONIAN: WORD = 0x25;
423 pub const LANG_FAEROESE: WORD = 0x38;
424 pub const LANG_FARSI: WORD = 0x29;
425 pub const LANG_FILIPINO: WORD = 0x64;
426 pub const LANG_FINNISH: WORD = 0x0b;
427 pub const LANG_FRENCH: WORD = 0x0c;
428 pub const LANG_FRISIAN: WORD = 0x62;
429 pub const LANG_FULAH: WORD = 0x67;
430 pub const LANG_GALICIAN: WORD = 0x56;
431 pub const LANG_GEORGIAN: WORD = 0x37;
432 pub const LANG_GERMAN: WORD = 0x07;
433 pub const LANG_GREEK: WORD = 0x08;
434 pub const LANG_GREENLANDIC: WORD = 0x6f;
435 pub const LANG_GUJARATI: WORD = 0x47;
436 pub const LANG_HAUSA: WORD = 0x68;
437 pub const LANG_HAWAIIAN: WORD = 0x75;
438 pub const LANG_HEBREW: WORD = 0x0d;
439 pub const LANG_HINDI: WORD = 0x39;
440 pub const LANG_HUNGARIAN: WORD = 0x0e;
441 pub const LANG_ICELANDIC: WORD = 0x0f;
442 pub const LANG_IGBO: WORD = 0x70;
443 pub const LANG_INDONESIAN: WORD = 0x21;
444 pub const LANG_INUKTITUT: WORD = 0x5d;
445 pub const LANG_IRISH: WORD = 0x3c;
446 pub const LANG_ITALIAN: WORD = 0x10;
447 pub const LANG_JAPANESE: WORD = 0x11;
448 pub const LANG_KANNADA: WORD = 0x4b;
449 pub const LANG_KASHMIRI: WORD = 0x60;
450 pub const LANG_KAZAK: WORD = 0x3f;
451 pub const LANG_KHMER: WORD = 0x53;
452 pub const LANG_KICHE: WORD = 0x86;
453 pub const LANG_KINYARWANDA: WORD = 0x87;
454 pub const LANG_KONKANI: WORD = 0x57;
455 pub const LANG_KOREAN: WORD = 0x12;
456 pub const LANG_KYRGYZ: WORD = 0x40;
457 pub const LANG_LAO: WORD = 0x54;
458 pub const LANG_LATVIAN: WORD = 0x26;
459 pub const LANG_LITHUANIAN: WORD = 0x27;
460 pub const LANG_LOWER_SORBIAN: WORD = 0x2e;
461 pub const LANG_LUXEMBOURGISH: WORD = 0x6e;
462 pub const LANG_MACEDONIAN: WORD = 0x2f;
463 pub const LANG_MALAY: WORD = 0x3e;
464 pub const LANG_MALAYALAM: WORD = 0x4c;
465 pub const LANG_MALTESE: WORD = 0x3a;
466 pub const LANG_MANIPURI: WORD = 0x58;
467 pub const LANG_MAORI: WORD = 0x81;
468 pub const LANG_MAPUDUNGUN: WORD = 0x7a;
469 pub const LANG_MARATHI: WORD = 0x4e;
470 pub const LANG_MOHAWK: WORD = 0x7c;
471 pub const LANG_MONGOLIAN: WORD = 0x50;
472 pub const LANG_NEPALI: WORD = 0x61;
473 pub const LANG_NORWEGIAN: WORD = 0x14;
474 pub const LANG_OCCITAN: WORD = 0x82;
475 pub const LANG_ODIA: WORD = 0x48;
476 pub const LANG_ORIYA: WORD = 0x48;
477 pub const LANG_PASHTO: WORD = 0x63;
478 pub const LANG_PERSIAN: WORD = 0x29;
479 pub const LANG_POLISH: WORD = 0x15;
480 pub const LANG_PORTUGUESE: WORD = 0x16;
481 pub const LANG_PULAR: WORD = 0x67;
482 pub const LANG_PUNJABI: WORD = 0x46;
483 pub const LANG_QUECHUA: WORD = 0x6b;
484 pub const LANG_ROMANIAN: WORD = 0x18;
485 pub const LANG_ROMANSH: WORD = 0x17;
486 pub const LANG_RUSSIAN: WORD = 0x19;
487 pub const LANG_SAKHA: WORD = 0x85;
488 pub const LANG_SAMI: WORD = 0x3b;
489 pub const LANG_SANSKRIT: WORD = 0x4f;
490 pub const LANG_SCOTTISH_GAELIC: WORD = 0x91;
491 pub const LANG_SERBIAN: WORD = 0x1a;
492 pub const LANG_SERBIAN_NEUTRAL: WORD = 0x7c1a;
493 pub const LANG_SINDHI: WORD = 0x59;
494 pub const LANG_SINHALESE: WORD = 0x5b;
495 pub const LANG_SLOVAK: WORD = 0x1b;
496 pub const LANG_SLOVENIAN: WORD = 0x24;
497 pub const LANG_SOTHO: WORD = 0x6c;
498 pub const LANG_SPANISH: WORD = 0x0a;
499 pub const LANG_SWAHILI: WORD = 0x41;
500 pub const LANG_SWEDISH: WORD = 0x1d;
501 pub const LANG_SYRIAC: WORD = 0x5a;
502 pub const LANG_TAJIK: WORD = 0x28;
503 pub const LANG_TAMAZIGHT: WORD = 0x5f;
504 pub const LANG_TAMIL: WORD = 0x49;
505 pub const LANG_TATAR: WORD = 0x44;
506 pub const LANG_TELUGU: WORD = 0x4a;
507 pub const LANG_THAI: WORD = 0x1e;
508 pub const LANG_TIBETAN: WORD = 0x51;
509 pub const LANG_TIGRIGNA: WORD = 0x73;
510 pub const LANG_TIGRINYA: WORD = 0x73;
511 pub const LANG_TSWANA: WORD = 0x32;
512 pub const LANG_TURKISH: WORD = 0x1f;
513 pub const LANG_TURKMEN: WORD = 0x42;
514 pub const LANG_UIGHUR: WORD = 0x80;
515 pub const LANG_UKRAINIAN: WORD = 0x22;
516 pub const LANG_UPPER_SORBIAN: WORD = 0x2e;
517 pub const LANG_URDU: WORD = 0x20;
518 pub const LANG_UZBEK: WORD = 0x43;
519 pub const LANG_VALENCIAN: WORD = 0x03;
520 pub const LANG_VIETNAMESE: WORD = 0x2a;
521 pub const LANG_WELSH: WORD = 0x52;
522 pub const LANG_WOLOF: WORD = 0x88;
523 pub const LANG_XHOSA: WORD = 0x34;
524 pub const LANG_YAKUT: WORD = 0x85;
525 pub const LANG_YI: WORD = 0x78;
526 pub const LANG_YORUBA: WORD = 0x6a;
527 pub const LANG_ZULU: WORD = 0x35;
528 pub const SUBLANG_NEUTRAL: WORD = 0x00;
529 pub const SUBLANG_DEFAULT: WORD = 0x01;
530 pub const SUBLANG_SYS_DEFAULT: WORD = 0x02;
531 pub const SUBLANG_CUSTOM_DEFAULT: WORD = 0x03;
532 pub const SUBLANG_CUSTOM_UNSPECIFIED: WORD = 0x04;
533 pub const SUBLANG_UI_CUSTOM_DEFAULT: WORD = 0x05;
534 pub const SUBLANG_AFRIKAANS_SOUTH_AFRICA: WORD = 0x01;
535 pub const SUBLANG_ALBANIAN_ALBANIA: WORD = 0x01;
536 pub const SUBLANG_ALSATIAN_FRANCE: WORD = 0x01;
537 pub const SUBLANG_AMHARIC_ETHIOPIA: WORD = 0x01;
538 pub const SUBLANG_ARABIC_SAUDI_ARABIA: WORD = 0x01;
539 pub const SUBLANG_ARABIC_IRAQ: WORD = 0x02;
540 pub const SUBLANG_ARABIC_EGYPT: WORD = 0x03;
541 pub const SUBLANG_ARABIC_LIBYA: WORD = 0x04;
542 pub const SUBLANG_ARABIC_ALGERIA: WORD = 0x05;
543 pub const SUBLANG_ARABIC_MOROCCO: WORD = 0x06;
544 pub const SUBLANG_ARABIC_TUNISIA: WORD = 0x07;
545 pub const SUBLANG_ARABIC_OMAN: WORD = 0x08;
546 pub const SUBLANG_ARABIC_YEMEN: WORD = 0x09;
547 pub const SUBLANG_ARABIC_SYRIA: WORD = 0x0a;
548 pub const SUBLANG_ARABIC_JORDAN: WORD = 0x0b;
549 pub const SUBLANG_ARABIC_LEBANON: WORD = 0x0c;
550 pub const SUBLANG_ARABIC_KUWAIT: WORD = 0x0d;
551 pub const SUBLANG_ARABIC_UAE: WORD = 0x0e;
552 pub const SUBLANG_ARABIC_BAHRAIN: WORD = 0x0f;
553 pub const SUBLANG_ARABIC_QATAR: WORD = 0x10;
554 pub const SUBLANG_ARMENIAN_ARMENIA: WORD = 0x01;
555 pub const SUBLANG_ASSAMESE_INDIA: WORD = 0x01;
556 pub const SUBLANG_AZERI_LATIN: WORD = 0x01;
557 pub const SUBLANG_AZERI_CYRILLIC: WORD = 0x02;
558 pub const SUBLANG_AZERBAIJANI_AZERBAIJAN_LATIN: WORD = 0x01;
559 pub const SUBLANG_AZERBAIJANI_AZERBAIJAN_CYRILLIC: WORD = 0x02;
560 pub const SUBLANG_BANGLA_INDIA: WORD = 0x01;
561 pub const SUBLANG_BANGLA_BANGLADESH: WORD = 0x02;
562 pub const SUBLANG_BASHKIR_RUSSIA: WORD = 0x01;
563 pub const SUBLANG_BASQUE_BASQUE: WORD = 0x01;
564 pub const SUBLANG_BELARUSIAN_BELARUS: WORD = 0x01;
565 pub const SUBLANG_BENGALI_INDIA: WORD = 0x01;
566 pub const SUBLANG_BENGALI_BANGLADESH: WORD = 0x02;
567 pub const SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN: WORD = 0x05;
568 pub const SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC: WORD = 0x08;
569 pub const SUBLANG_BRETON_FRANCE: WORD = 0x01;
570 pub const SUBLANG_BULGARIAN_BULGARIA: WORD = 0x01;
571 pub const SUBLANG_CATALAN_CATALAN: WORD = 0x01;
572 pub const SUBLANG_CENTRAL_KURDISH_IRAQ: WORD = 0x01;
573 pub const SUBLANG_CHEROKEE_CHEROKEE: WORD = 0x01;
574 pub const SUBLANG_CHINESE_TRADITIONAL: WORD = 0x01;
575 pub const SUBLANG_CHINESE_SIMPLIFIED: WORD = 0x02;
576 pub const SUBLANG_CHINESE_HONGKONG: WORD = 0x03;
577 pub const SUBLANG_CHINESE_SINGAPORE: WORD = 0x04;
578 pub const SUBLANG_CHINESE_MACAU: WORD = 0x05;
579 pub const SUBLANG_CORSICAN_FRANCE: WORD = 0x01;
580 pub const SUBLANG_CZECH_CZECH_REPUBLIC: WORD = 0x01;
581 pub const SUBLANG_CROATIAN_CROATIA: WORD = 0x01;
582 pub const SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN: WORD = 0x04;
583 pub const SUBLANG_DANISH_DENMARK: WORD = 0x01;
584 pub const SUBLANG_DARI_AFGHANISTAN: WORD = 0x01;
585 pub const SUBLANG_DIVEHI_MALDIVES: WORD = 0x01;
586 pub const SUBLANG_DUTCH: WORD = 0x01;
587 pub const SUBLANG_DUTCH_BELGIAN: WORD = 0x02;
588 pub const SUBLANG_ENGLISH_US: WORD = 0x01;
589 pub const SUBLANG_ENGLISH_UK: WORD = 0x02;
590 pub const SUBLANG_ENGLISH_AUS: WORD = 0x03;
591 pub const SUBLANG_ENGLISH_CAN: WORD = 0x04;
592 pub const SUBLANG_ENGLISH_NZ: WORD = 0x05;
593 pub const SUBLANG_ENGLISH_EIRE: WORD = 0x06;
594 pub const SUBLANG_ENGLISH_SOUTH_AFRICA: WORD = 0x07;
595 pub const SUBLANG_ENGLISH_JAMAICA: WORD = 0x08;
596 pub const SUBLANG_ENGLISH_CARIBBEAN: WORD = 0x09;
597 pub const SUBLANG_ENGLISH_BELIZE: WORD = 0x0a;
598 pub const SUBLANG_ENGLISH_TRINIDAD: WORD = 0x0b;
599 pub const SUBLANG_ENGLISH_ZIMBABWE: WORD = 0x0c;
600 pub const SUBLANG_ENGLISH_PHILIPPINES: WORD = 0x0d;
601 pub const SUBLANG_ENGLISH_INDIA: WORD = 0x10;
602 pub const SUBLANG_ENGLISH_MALAYSIA: WORD = 0x11;
603 pub const SUBLANG_ENGLISH_SINGAPORE: WORD = 0x12;
604 pub const SUBLANG_ESTONIAN_ESTONIA: WORD = 0x01;
605 pub const SUBLANG_FAEROESE_FAROE_ISLANDS: WORD = 0x01;
606 pub const SUBLANG_FILIPINO_PHILIPPINES: WORD = 0x01;
607 pub const SUBLANG_FINNISH_FINLAND: WORD = 0x01;
608 pub const SUBLANG_FRENCH: WORD = 0x01;
609 pub const SUBLANG_FRENCH_BELGIAN: WORD = 0x02;
610 pub const SUBLANG_FRENCH_CANADIAN: WORD = 0x03;
611 pub const SUBLANG_FRENCH_SWISS: WORD = 0x04;
612 pub const SUBLANG_FRENCH_LUXEMBOURG: WORD = 0x05;
613 pub const SUBLANG_FRENCH_MONACO: WORD = 0x06;
614 pub const SUBLANG_FRISIAN_NETHERLANDS: WORD = 0x01;
615 pub const SUBLANG_FULAH_SENEGAL: WORD = 0x02;
616 pub const SUBLANG_GALICIAN_GALICIAN: WORD = 0x01;
617 pub const SUBLANG_GEORGIAN_GEORGIA: WORD = 0x01;
618 pub const SUBLANG_GERMAN: WORD = 0x01;
619 pub const SUBLANG_GERMAN_SWISS: WORD = 0x02;
620 pub const SUBLANG_GERMAN_AUSTRIAN: WORD = 0x03;
621 pub const SUBLANG_GERMAN_LUXEMBOURG: WORD = 0x04;
622 pub const SUBLANG_GERMAN_LIECHTENSTEIN: WORD = 0x05;
623 pub const SUBLANG_GREEK_GREECE: WORD = 0x01;
624 pub const SUBLANG_GREENLANDIC_GREENLAND: WORD = 0x01;
625 pub const SUBLANG_GUJARATI_INDIA: WORD = 0x01;
626 pub const SUBLANG_HAUSA_NIGERIA_LATIN: WORD = 0x01;
627 pub const SUBLANG_HAWAIIAN_US: WORD = 0x01;
628 pub const SUBLANG_HEBREW_ISRAEL: WORD = 0x01;
629 pub const SUBLANG_HINDI_INDIA: WORD = 0x01;
630 pub const SUBLANG_HUNGARIAN_HUNGARY: WORD = 0x01;
631 pub const SUBLANG_ICELANDIC_ICELAND: WORD = 0x01;
632 pub const SUBLANG_IGBO_NIGERIA: WORD = 0x01;
633 pub const SUBLANG_INDONESIAN_INDONESIA: WORD = 0x01;
634 pub const SUBLANG_INUKTITUT_CANADA: WORD = 0x01;
635 pub const SUBLANG_INUKTITUT_CANADA_LATIN: WORD = 0x02;
636 pub const SUBLANG_IRISH_IRELAND: WORD = 0x02;
637 pub const SUBLANG_ITALIAN: WORD = 0x01;
638 pub const SUBLANG_ITALIAN_SWISS: WORD = 0x02;
639 pub const SUBLANG_JAPANESE_JAPAN: WORD = 0x01;
640 pub const SUBLANG_KANNADA_INDIA: WORD = 0x01;
641 pub const SUBLANG_KASHMIRI_SASIA: WORD = 0x02;
642 pub const SUBLANG_KASHMIRI_INDIA: WORD = 0x02;
643 pub const SUBLANG_KAZAK_KAZAKHSTAN: WORD = 0x01;
644 pub const SUBLANG_KHMER_CAMBODIA: WORD = 0x01;
645 pub const SUBLANG_KICHE_GUATEMALA: WORD = 0x01;
646 pub const SUBLANG_KINYARWANDA_RWANDA: WORD = 0x01;
647 pub const SUBLANG_KONKANI_INDIA: WORD = 0x01;
648 pub const SUBLANG_KOREAN: WORD = 0x01;
649 pub const SUBLANG_KYRGYZ_KYRGYZSTAN: WORD = 0x01;
650 pub const SUBLANG_LAO_LAO: WORD = 0x01;
651 pub const SUBLANG_LATVIAN_LATVIA: WORD = 0x01;
652 pub const SUBLANG_LITHUANIAN: WORD = 0x01;
653 pub const SUBLANG_LOWER_SORBIAN_GERMANY: WORD = 0x02;
654 pub const SUBLANG_LUXEMBOURGISH_LUXEMBOURG: WORD = 0x01;
655 pub const SUBLANG_MACEDONIAN_MACEDONIA: WORD = 0x01;
656 pub const SUBLANG_MALAY_MALAYSIA: WORD = 0x01;
657 pub const SUBLANG_MALAY_BRUNEI_DARUSSALAM: WORD = 0x02;
658 pub const SUBLANG_MALAYALAM_INDIA: WORD = 0x01;
659 pub const SUBLANG_MALTESE_MALTA: WORD = 0x01;
660 pub const SUBLANG_MAORI_NEW_ZEALAND: WORD = 0x01;
661 pub const SUBLANG_MAPUDUNGUN_CHILE: WORD = 0x01;
662 pub const SUBLANG_MARATHI_INDIA: WORD = 0x01;
663 pub const SUBLANG_MOHAWK_MOHAWK: WORD = 0x01;
664 pub const SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA: WORD = 0x01;
665 pub const SUBLANG_MONGOLIAN_PRC: WORD = 0x02;
666 pub const SUBLANG_NEPALI_INDIA: WORD = 0x02;
667 pub const SUBLANG_NEPALI_NEPAL: WORD = 0x01;
668 pub const SUBLANG_NORWEGIAN_BOKMAL: WORD = 0x01;
669 pub const SUBLANG_NORWEGIAN_NYNORSK: WORD = 0x02;
670 pub const SUBLANG_OCCITAN_FRANCE: WORD = 0x01;
671 pub const SUBLANG_ODIA_INDIA: WORD = 0x01;
672 pub const SUBLANG_ORIYA_INDIA: WORD = 0x01;
673 pub const SUBLANG_PASHTO_AFGHANISTAN: WORD = 0x01;
674 pub const SUBLANG_PERSIAN_IRAN: WORD = 0x01;
675 pub const SUBLANG_POLISH_POLAND: WORD = 0x01;
676 pub const SUBLANG_PORTUGUESE: WORD = 0x02;
677 pub const SUBLANG_PORTUGUESE_BRAZILIAN: WORD = 0x01;
678 pub const SUBLANG_PULAR_SENEGAL: WORD = 0x02;
679 pub const SUBLANG_PUNJABI_INDIA: WORD = 0x01;
680 pub const SUBLANG_PUNJABI_PAKISTAN: WORD = 0x02;
681 pub const SUBLANG_QUECHUA_BOLIVIA: WORD = 0x01;
682 pub const SUBLANG_QUECHUA_ECUADOR: WORD = 0x02;
683 pub const SUBLANG_QUECHUA_PERU: WORD = 0x03;
684 pub const SUBLANG_ROMANIAN_ROMANIA: WORD = 0x01;
685 pub const SUBLANG_ROMANSH_SWITZERLAND: WORD = 0x01;
686 pub const SUBLANG_RUSSIAN_RUSSIA: WORD = 0x01;
687 pub const SUBLANG_SAKHA_RUSSIA: WORD = 0x01;
688 pub const SUBLANG_SAMI_NORTHERN_NORWAY: WORD = 0x01;
689 pub const SUBLANG_SAMI_NORTHERN_SWEDEN: WORD = 0x02;
690 pub const SUBLANG_SAMI_NORTHERN_FINLAND: WORD = 0x03;
691 pub const SUBLANG_SAMI_LULE_NORWAY: WORD = 0x04;
692 pub const SUBLANG_SAMI_LULE_SWEDEN: WORD = 0x05;
693 pub const SUBLANG_SAMI_SOUTHERN_NORWAY: WORD = 0x06;
694 pub const SUBLANG_SAMI_SOUTHERN_SWEDEN: WORD = 0x07;
695 pub const SUBLANG_SAMI_SKOLT_FINLAND: WORD = 0x08;
696 pub const SUBLANG_SAMI_INARI_FINLAND: WORD = 0x09;
697 pub const SUBLANG_SANSKRIT_INDIA: WORD = 0x01;
698 pub const SUBLANG_SCOTTISH_GAELIC: WORD = 0x01;
699 pub const SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN: WORD = 0x06;
700 pub const SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC: WORD = 0x07;
701 pub const SUBLANG_SERBIAN_MONTENEGRO_LATIN: WORD = 0x0b;
702 pub const SUBLANG_SERBIAN_MONTENEGRO_CYRILLIC: WORD = 0x0c;
703 pub const SUBLANG_SERBIAN_SERBIA_LATIN: WORD = 0x09;
704 pub const SUBLANG_SERBIAN_SERBIA_CYRILLIC: WORD = 0x0a;
705 pub const SUBLANG_SERBIAN_CROATIA: WORD = 0x01;
706 pub const SUBLANG_SERBIAN_LATIN: WORD = 0x02;
707 pub const SUBLANG_SERBIAN_CYRILLIC: WORD = 0x03;
708 pub const SUBLANG_SINDHI_INDIA: WORD = 0x01;
709 pub const SUBLANG_SINDHI_PAKISTAN: WORD = 0x02;
710 pub const SUBLANG_SINDHI_AFGHANISTAN: WORD = 0x02;
711 pub const SUBLANG_SINHALESE_SRI_LANKA: WORD = 0x01;
712 pub const SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA: WORD = 0x01;
713 pub const SUBLANG_SLOVAK_SLOVAKIA: WORD = 0x01;
714 pub const SUBLANG_SLOVENIAN_SLOVENIA: WORD = 0x01;
715 pub const SUBLANG_SPANISH: WORD = 0x01;
716 pub const SUBLANG_SPANISH_MEXICAN: WORD = 0x02;
717 pub const SUBLANG_SPANISH_MODERN: WORD = 0x03;
718 pub const SUBLANG_SPANISH_GUATEMALA: WORD = 0x04;
719 pub const SUBLANG_SPANISH_COSTA_RICA: WORD = 0x05;
720 pub const SUBLANG_SPANISH_PANAMA: WORD = 0x06;
721 pub const SUBLANG_SPANISH_DOMINICAN_REPUBLIC: WORD = 0x07;
722 pub const SUBLANG_SPANISH_VENEZUELA: WORD = 0x08;
723 pub const SUBLANG_SPANISH_COLOMBIA: WORD = 0x09;
724 pub const SUBLANG_SPANISH_PERU: WORD = 0x0a;
725 pub const SUBLANG_SPANISH_ARGENTINA: WORD = 0x0b;
726 pub const SUBLANG_SPANISH_ECUADOR: WORD = 0x0c;
727 pub const SUBLANG_SPANISH_CHILE: WORD = 0x0d;
728 pub const SUBLANG_SPANISH_URUGUAY: WORD = 0x0e;
729 pub const SUBLANG_SPANISH_PARAGUAY: WORD = 0x0f;
730 pub const SUBLANG_SPANISH_BOLIVIA: WORD = 0x10;
731 pub const SUBLANG_SPANISH_EL_SALVADOR: WORD = 0x11;
732 pub const SUBLANG_SPANISH_HONDURAS: WORD = 0x12;
733 pub const SUBLANG_SPANISH_NICARAGUA: WORD = 0x13;
734 pub const SUBLANG_SPANISH_PUERTO_RICO: WORD = 0x14;
735 pub const SUBLANG_SPANISH_US: WORD = 0x15;
736 pub const SUBLANG_SWAHILI_KENYA: WORD = 0x01;
737 pub const SUBLANG_SWEDISH: WORD = 0x01;
738 pub const SUBLANG_SWEDISH_FINLAND: WORD = 0x02;
739 pub const SUBLANG_SYRIAC_SYRIA: WORD = 0x01;
740 pub const SUBLANG_TAJIK_TAJIKISTAN: WORD = 0x01;
741 pub const SUBLANG_TAMAZIGHT_ALGERIA_LATIN: WORD = 0x02;
742 pub const SUBLANG_TAMAZIGHT_MOROCCO_TIFINAGH: WORD = 0x04;
743 pub const SUBLANG_TAMIL_INDIA: WORD = 0x01;
744 pub const SUBLANG_TAMIL_SRI_LANKA: WORD = 0x02;
745 pub const SUBLANG_TATAR_RUSSIA: WORD = 0x01;
746 pub const SUBLANG_TELUGU_INDIA: WORD = 0x01;
747 pub const SUBLANG_THAI_THAILAND: WORD = 0x01;
748 pub const SUBLANG_TIBETAN_PRC: WORD = 0x01;
749 pub const SUBLANG_TIGRIGNA_ERITREA: WORD = 0x02;
750 pub const SUBLANG_TIGRINYA_ERITREA: WORD = 0x02;
751 pub const SUBLANG_TIGRINYA_ETHIOPIA: WORD = 0x01;
752 pub const SUBLANG_TSWANA_BOTSWANA: WORD = 0x02;
753 pub const SUBLANG_TSWANA_SOUTH_AFRICA: WORD = 0x01;
754 pub const SUBLANG_TURKISH_TURKEY: WORD = 0x01;
755 pub const SUBLANG_TURKMEN_TURKMENISTAN: WORD = 0x01;
756 pub const SUBLANG_UIGHUR_PRC: WORD = 0x01;
757 pub const SUBLANG_UKRAINIAN_UKRAINE: WORD = 0x01;
758 pub const SUBLANG_UPPER_SORBIAN_GERMANY: WORD = 0x01;
759 pub const SUBLANG_URDU_PAKISTAN: WORD = 0x01;
760 pub const SUBLANG_URDU_INDIA: WORD = 0x02;
761 pub const SUBLANG_UZBEK_LATIN: WORD = 0x01;
762 pub const SUBLANG_UZBEK_CYRILLIC: WORD = 0x02;
763 pub const SUBLANG_VALENCIAN_VALENCIA: WORD = 0x02;
764 pub const SUBLANG_VIETNAMESE_VIETNAM: WORD = 0x01;
765 pub const SUBLANG_WELSH_UNITED_KINGDOM: WORD = 0x01;
766 pub const SUBLANG_WOLOF_SENEGAL: WORD = 0x01;
767 pub const SUBLANG_XHOSA_SOUTH_AFRICA: WORD = 0x01;
768 pub const SUBLANG_YAKUT_RUSSIA: WORD = 0x01;
769 pub const SUBLANG_YI_PRC: WORD = 0x01;
770 pub const SUBLANG_YORUBA_NIGERIA: WORD = 0x01;
771 pub const SUBLANG_ZULU_SOUTH_AFRICA: WORD = 0x01;
772 pub const SORT_DEFAULT: WORD = 0x0;
773 pub const SORT_INVARIANT_MATH: WORD = 0x1;
774 pub const SORT_JAPANESE_XJIS: WORD = 0x0;
775 pub const SORT_JAPANESE_UNICODE: WORD = 0x1;
776 pub const SORT_JAPANESE_RADICALSTROKE: WORD = 0x4;
777 pub const SORT_CHINESE_BIG5: WORD = 0x0;
778 pub const SORT_CHINESE_PRCP: WORD = 0x0;
779 pub const SORT_CHINESE_UNICODE: WORD = 0x1;
780 pub const SORT_CHINESE_PRC: WORD = 0x2;
781 pub const SORT_CHINESE_BOPOMOFO: WORD = 0x3;
782 pub const SORT_CHINESE_RADICALSTROKE: WORD = 0x4;
783 pub const SORT_KOREAN_KSC: WORD = 0x0;
784 pub const SORT_KOREAN_UNICODE: WORD = 0x1;
785 pub const SORT_GERMAN_PHONE_BOOK: WORD = 0x1;
786 pub const SORT_HUNGARIAN_DEFAULT: WORD = 0x0;
787 pub const SORT_HUNGARIAN_TECHNICAL: WORD = 0x1;
788 pub const SORT_GEORGIAN_TRADITIONAL: WORD = 0x0;
789 pub const SORT_GEORGIAN_MODERN: WORD = 0x1;
790 macro_rules! MAKELANGID { ($p:expr, $s:expr) => (($s << 10) | $p) }
791 #[inline]
MAKELANGID(p: WORD, s: WORD) -> LANGID792 pub fn MAKELANGID(p: WORD, s: WORD) -> LANGID {
793     (s << 10) | p
794 }
795 #[inline]
PRIMARYLANGID(lgid: LANGID) -> WORD796 pub fn PRIMARYLANGID(lgid: LANGID) -> WORD {
797     lgid & 0x3ff
798 }
799 #[inline]
SUBLANGID(lgid: LANGID) -> WORD800 pub fn SUBLANGID(lgid: LANGID) -> WORD {
801     lgid >> 10
802 }
803 pub const NLS_VALID_LOCALE_MASK: DWORD = 0x000fffff;
804 macro_rules! MAKELCID {
805     ($lgid:expr, $srtid:expr) => ((($srtid as DWORD) << 16) | ($lgid as DWORD))
806 }
807 #[inline]
MAKELCID(lgid: LANGID, srtid: WORD) -> LCID808 pub fn MAKELCID(lgid: LANGID, srtid: WORD) -> LCID {
809     ((srtid as DWORD) << 16) | (lgid as DWORD)
810 }
811 #[inline]
MAKESORTLCID(lgid: LANGID, srtid: WORD, ver: WORD) -> LCID812 pub fn MAKESORTLCID(lgid: LANGID, srtid: WORD, ver: WORD) -> LCID {
813     MAKELCID(lgid, srtid) | ((ver as DWORD) << 20)
814 }
815 #[inline]
LANGIDFROMLCID(lcid: LCID) -> LANGID816 pub fn LANGIDFROMLCID(lcid: LCID) -> LANGID {
817     lcid as LANGID
818 }
819 #[inline]
SORTIDFROMLCID(lcid: LCID) -> WORD820 pub fn SORTIDFROMLCID(lcid: LCID) -> WORD {
821     ((lcid >> 16) & 0xf) as WORD
822 }
823 #[inline]
SORTVERSIONFROMLCID(lcid: LCID) -> WORD824 pub fn SORTVERSIONFROMLCID(lcid: LCID) -> WORD {
825     ((lcid >> 16) & 0xf) as WORD
826 }
827 pub const LOCALE_NAME_MAX_LENGTH: usize = 85;
828 pub const LANG_SYSTEM_DEFAULT: LANGID = MAKELANGID!(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT);
829 pub const LANG_USER_DEFAULT: LANGID = MAKELANGID!(LANG_NEUTRAL, SUBLANG_DEFAULT);
830 pub const LOCALE_SYSTEM_DEFAULT: LCID = MAKELCID!(LANG_SYSTEM_DEFAULT, SORT_DEFAULT);
831 pub const LOCALE_USER_DEFAULT: LCID = MAKELCID!(LANG_USER_DEFAULT, SORT_DEFAULT);
832 pub const LOCALE_CUSTOM_DEFAULT: LCID
833     = MAKELCID!(MAKELANGID!(LANG_NEUTRAL, SUBLANG_CUSTOM_DEFAULT), SORT_DEFAULT);
834 pub const LOCALE_CUSTOM_UNSPECIFIED: LCID
835     = MAKELCID!(MAKELANGID!(LANG_NEUTRAL, SUBLANG_CUSTOM_UNSPECIFIED), SORT_DEFAULT);
836 pub const LOCALE_CUSTOM_UI_DEFAULT: LCID
837     = MAKELCID!(MAKELANGID!(LANG_NEUTRAL, SUBLANG_UI_CUSTOM_DEFAULT), SORT_DEFAULT);
838 pub const LOCALE_NEUTRAL: LCID
839     = MAKELCID!(MAKELANGID!(LANG_NEUTRAL, SUBLANG_NEUTRAL), SORT_DEFAULT);
840 pub const LOCALE_INVARIANT: LCID
841     = MAKELCID!(MAKELANGID!(LANG_INVARIANT, SUBLANG_NEUTRAL), SORT_DEFAULT);
842 pub const LOCALE_TRANSIENT_KEYBOARD1: LCID = 0x2000;
843 pub const LOCALE_TRANSIENT_KEYBOARD2: LCID = 0x2400;
844 pub const LOCALE_TRANSIENT_KEYBOARD3: LCID = 0x2800;
845 pub const LOCALE_TRANSIENT_KEYBOARD4: LCID = 0x2c00;
846 pub const LOCALE_UNASSIGNED_LCID: LCID = LOCALE_CUSTOM_UNSPECIFIED;
847 pub const STATUS_WAIT_0: DWORD = 0x00000000;
848 pub const STATUS_ABANDONED_WAIT_0: DWORD = 0x00000080;
849 pub const STATUS_USER_APC: DWORD = 0x000000C0;
850 pub const STATUS_TIMEOUT: DWORD = 0x00000102;
851 pub const STATUS_PENDING: DWORD = 0x00000103;
852 pub const DBG_EXCEPTION_HANDLED: DWORD = 0x00010001;
853 pub const DBG_CONTINUE: DWORD = 0x00010002;
854 pub const STATUS_SEGMENT_NOTIFICATION: DWORD = 0x40000005;
855 pub const STATUS_FATAL_APP_EXIT: DWORD = 0x40000015;
856 pub const DBG_REPLY_LATER: DWORD = 0x40010001;
857 pub const DBG_TERMINATE_THREAD: DWORD = 0x40010003;
858 pub const DBG_TERMINATE_PROCESS: DWORD = 0x40010004;
859 pub const DBG_CONTROL_C: DWORD = 0x40010005;
860 pub const DBG_PRINTEXCEPTION_C: DWORD = 0x40010006;
861 pub const DBG_RIPEXCEPTION: DWORD = 0x40010007;
862 pub const DBG_CONTROL_BREAK: DWORD = 0x40010008;
863 pub const DBG_COMMAND_EXCEPTION: DWORD = 0x40010009;
864 pub const DBG_PRINTEXCEPTION_WIDE_C: DWORD = 0x4001000A;
865 pub const STATUS_GUARD_PAGE_VIOLATION: DWORD = 0x80000001;
866 pub const STATUS_DATATYPE_MISALIGNMENT: DWORD = 0x80000002;
867 pub const STATUS_BREAKPOINT: DWORD = 0x80000003;
868 pub const STATUS_SINGLE_STEP: DWORD = 0x80000004;
869 pub const STATUS_LONGJUMP: DWORD = 0x80000026;
870 pub const STATUS_UNWIND_CONSOLIDATE: DWORD = 0x80000029;
871 pub const DBG_EXCEPTION_NOT_HANDLED: DWORD = 0x80010001;
872 pub const STATUS_ACCESS_VIOLATION: DWORD = 0xC0000005;
873 pub const STATUS_IN_PAGE_ERROR: DWORD = 0xC0000006;
874 pub const STATUS_INVALID_HANDLE: DWORD = 0xC0000008;
875 pub const STATUS_INVALID_PARAMETER: DWORD = 0xC000000D;
876 pub const STATUS_NO_MEMORY: DWORD = 0xC0000017;
877 pub const STATUS_ILLEGAL_INSTRUCTION: DWORD = 0xC000001D;
878 pub const STATUS_NONCONTINUABLE_EXCEPTION: DWORD = 0xC0000025;
879 pub const STATUS_INVALID_DISPOSITION: DWORD = 0xC0000026;
880 pub const STATUS_ARRAY_BOUNDS_EXCEEDED: DWORD = 0xC000008C;
881 pub const STATUS_FLOAT_DENORMAL_OPERAND: DWORD = 0xC000008D;
882 pub const STATUS_FLOAT_DIVIDE_BY_ZERO: DWORD = 0xC000008E;
883 pub const STATUS_FLOAT_INEXACT_RESULT: DWORD = 0xC000008F;
884 pub const STATUS_FLOAT_INVALID_OPERATION: DWORD = 0xC0000090;
885 pub const STATUS_FLOAT_OVERFLOW: DWORD = 0xC0000091;
886 pub const STATUS_FLOAT_STACK_CHECK: DWORD = 0xC0000092;
887 pub const STATUS_FLOAT_UNDERFLOW: DWORD = 0xC0000093;
888 pub const STATUS_INTEGER_DIVIDE_BY_ZERO: DWORD = 0xC0000094;
889 pub const STATUS_INTEGER_OVERFLOW: DWORD = 0xC0000095;
890 pub const STATUS_PRIVILEGED_INSTRUCTION: DWORD = 0xC0000096;
891 pub const STATUS_STACK_OVERFLOW: DWORD = 0xC00000FD;
892 pub const STATUS_DLL_NOT_FOUND: DWORD = 0xC0000135;
893 pub const STATUS_ORDINAL_NOT_FOUND: DWORD = 0xC0000138;
894 pub const STATUS_ENTRYPOINT_NOT_FOUND: DWORD = 0xC0000139;
895 pub const STATUS_CONTROL_C_EXIT: DWORD = 0xC000013A;
896 pub const STATUS_DLL_INIT_FAILED: DWORD = 0xC0000142;
897 pub const STATUS_FLOAT_MULTIPLE_FAULTS: DWORD = 0xC00002B4;
898 pub const STATUS_FLOAT_MULTIPLE_TRAPS: DWORD = 0xC00002B5;
899 pub const STATUS_REG_NAT_CONSUMPTION: DWORD = 0xC00002C9;
900 pub const STATUS_HEAP_CORRUPTION: DWORD = 0xC0000374;
901 pub const STATUS_STACK_BUFFER_OVERRUN: DWORD = 0xC0000409;
902 pub const STATUS_INVALID_CRUNTIME_PARAMETER: DWORD = 0xC0000417;
903 pub const STATUS_ASSERTION_FAILURE: DWORD = 0xC0000420;
904 pub const STATUS_SXS_EARLY_DEACTIVATION: DWORD = 0xC015000F;
905 pub const STATUS_SXS_INVALID_DEACTIVATION: DWORD = 0xC0150010;
906 pub const MAXIMUM_WAIT_OBJECTS: DWORD = 64;
907 pub const MAXIMUM_SUSPEND_COUNT: CHAR = MAXCHAR;
908 pub type KSPIN_LOCK = ULONG_PTR;
909 pub type PKSPIN_LOCK = *mut KSPIN_LOCK;
910 STRUCT!{struct M128A { // FIXME align 16
911     Low: ULONGLONG,
912     High: LONGLONG,
913 }}
914 pub type PM128A = *mut M128A;
915 #[cfg(target_pointer_width = "32")]
916 STRUCT!{struct XSAVE_FORMAT { // FIXME align 16
917     ControlWord: WORD,
918     StatusWord: WORD,
919     TagWord: BYTE,
920     Reserved1: BYTE,
921     ErrorOpcode: WORD,
922     ErrorOffset: DWORD,
923     ErrorSelector: WORD,
924     Reserved2: WORD,
925     DataOffset: DWORD,
926     DataSelector: WORD,
927     Reserved3: WORD,
928     MxCsr: DWORD,
929     MxCsr_Mask: DWORD,
930     FloatRegisters: [M128A; 8],
931     XmmRegisters: [M128A; 8],
932     Reserved4: [BYTE; 224],
933 }}
934 #[cfg(target_pointer_width = "64")]
935 STRUCT!{struct XSAVE_FORMAT { // FIXME align 16
936     ControlWord: WORD,
937     StatusWord: WORD,
938     TagWord: BYTE,
939     Reserved1: BYTE,
940     ErrorOpcode: WORD,
941     ErrorOffset: DWORD,
942     ErrorSelector: WORD,
943     Reserved2: WORD,
944     DataOffset: DWORD,
945     DataSelector: WORD,
946     Reserved3: WORD,
947     MxCsr: DWORD,
948     MxCsr_Mask: DWORD,
949     FloatRegisters: [M128A; 8],
950     XmmRegisters: [M128A; 16],
951     Reserved4: [BYTE; 96],
952 }}
953 #[cfg(target_arch = "x86")]
954 STRUCT!{struct XSTATE_CONTEXT {
955     Mask: DWORD64,
956     Length: DWORD,
957     Reserved1: DWORD,
958     Area: PXSAVE_AREA,
959     Reserved2: DWORD,
960     Buffer: PVOID,
961     Reserved3: DWORD,
962 }}
963 #[cfg(not(target_arch = "x86"))]
964 STRUCT!{struct XSTATE_CONTEXT {
965     Mask: DWORD64,
966     Length: DWORD,
967     Reserved1: DWORD,
968     Area: PXSAVE_AREA,
969     Buffer: PVOID,
970 }}
971 pub type PXSAVE_FORMAT = *mut XSAVE_FORMAT;
972 STRUCT!{struct XSAVE_AREA_HEADER { // FIXME align 8
973     Mask: DWORD64,
974     CompactionMask: DWORD64,
975     Reserved2: [DWORD64; 6],
976 }}
977 pub type PXSAVE_AREA_HEADER = *mut XSAVE_AREA_HEADER;
978 STRUCT!{struct XSAVE_AREA { // FIXME align 16
979     LegacyState: XSAVE_FORMAT,
980     Header: XSAVE_AREA_HEADER,
981 }}
982 pub type PXSAVE_AREA = *mut XSAVE_AREA;
983 pub type PXSTATE_CONTEXT = *mut XSTATE_CONTEXT;
984 STRUCT!{struct SCOPE_TABLE_AMD64 {
985     Count: DWORD,
986     ScopeRecord: [SCOPE_TABLE_AMD64_ScopeRecord; 1],
987 }}
988 STRUCT!{struct SCOPE_TABLE_AMD64_ScopeRecord {
989     BeginAddress: DWORD,
990     EndAddress: DWORD,
991     HandlerAddress: DWORD,
992     JumpTarget: DWORD,
993 }}
994 pub type PSCOPE_TABLE_AMD64 = *mut SCOPE_TABLE_AMD64;
995 STRUCT!{struct SCOPE_TABLE_ARM64 {
996     Count: DWORD,
997     ScopeRecord: [SCOPE_TABLE_ARM64_ScopeRecord; 1],
998 }}
999 STRUCT!{struct SCOPE_TABLE_ARM64_ScopeRecord {
1000     BeginAddress: DWORD,
1001     EndAddress: DWORD,
1002     HandlerAddress: DWORD,
1003     JumpTarget: DWORD,
1004 }}
1005 pub type PSCOPE_TABLE_ARM64 = *mut SCOPE_TABLE_ARM64;
1006 // Skip interlocked and bit manipulation stuff because it is all intrinsics
1007 // Use the native Rust equivalents instead
1008 #[cfg(target_arch = "x86_64")]
1009 IFDEF!{
1010 pub const EXCEPTION_READ_FAULT: DWORD = 0;
1011 pub const EXCEPTION_WRITE_FAULT: DWORD = 1;
1012 pub const EXCEPTION_EXECUTE_FAULT: DWORD = 8;
1013 pub const CONTEXT_AMD64: DWORD = 0x00100000;
1014 pub const CONTEXT_CONTROL: DWORD = CONTEXT_AMD64 | 0x00000001;
1015 pub const CONTEXT_INTEGER: DWORD = CONTEXT_AMD64 | 0x00000002;
1016 pub const CONTEXT_SEGMENTS: DWORD = CONTEXT_AMD64 | 0x00000004;
1017 pub const CONTEXT_FLOATING_POINT: DWORD = CONTEXT_AMD64 | 0x00000008;
1018 pub const CONTEXT_DEBUG_REGISTERS: DWORD = CONTEXT_AMD64 | 0x00000010;
1019 pub const CONTEXT_FULL: DWORD = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT;
1020 pub const CONTEXT_ALL: DWORD = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS
1021     | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS;
1022 pub const CONTEXT_XSTATE: DWORD = CONTEXT_AMD64 | 0x00000040;
1023 pub const CONTEXT_EXCEPTION_ACTIVE: DWORD = 0x08000000;
1024 pub const CONTEXT_SERVICE_ACTIVE: DWORD = 0x10000000;
1025 pub const CONTEXT_EXCEPTION_REQUEST: DWORD = 0x40000000;
1026 pub const CONTEXT_EXCEPTION_REPORTING: DWORD = 0x80000000;
1027 pub const INITIAL_MXCSR: DWORD = 0x1f80;
1028 pub const INITIAL_FPCSR: DWORD = 0x027f;
1029 pub type XMM_SAVE_AREA32 = XSAVE_FORMAT;
1030 pub type PXMM_SAVE_AREA32 = *mut XSAVE_FORMAT;
1031 STRUCT!{struct CONTEXT_u_s {
1032     Header: [M128A; 2],
1033     Legacy: [M128A; 8],
1034     Xmm0: M128A,
1035     Xmm1: M128A,
1036     Xmm2: M128A,
1037     Xmm3: M128A,
1038     Xmm4: M128A,
1039     Xmm5: M128A,
1040     Xmm6: M128A,
1041     Xmm7: M128A,
1042     Xmm8: M128A,
1043     Xmm9: M128A,
1044     Xmm10: M128A,
1045     Xmm11: M128A,
1046     Xmm12: M128A,
1047     Xmm13: M128A,
1048     Xmm14: M128A,
1049     Xmm15: M128A,
1050 }}
1051 UNION!{union CONTEXT_u {
1052     [u64; 64],
1053     FltSave FltSave_mut: XMM_SAVE_AREA32,
1054     s s_mut: CONTEXT_u_s,
1055 }}
1056 STRUCT!{struct CONTEXT { // FIXME align 16
1057     P1Home: DWORD64,
1058     P2Home: DWORD64,
1059     P3Home: DWORD64,
1060     P4Home: DWORD64,
1061     P5Home: DWORD64,
1062     P6Home: DWORD64,
1063     ContextFlags: DWORD,
1064     MxCsr: DWORD,
1065     SegCs: WORD,
1066     SegDs: WORD,
1067     SegEs: WORD,
1068     SegFs: WORD,
1069     SegGs: WORD,
1070     SegSs: WORD,
1071     EFlags: DWORD,
1072     Dr0: DWORD64,
1073     Dr1: DWORD64,
1074     Dr2: DWORD64,
1075     Dr3: DWORD64,
1076     Dr6: DWORD64,
1077     Dr7: DWORD64,
1078     Rax: DWORD64,
1079     Rcx: DWORD64,
1080     Rdx: DWORD64,
1081     Rbx: DWORD64,
1082     Rsp: DWORD64,
1083     Rbp: DWORD64,
1084     Rsi: DWORD64,
1085     Rdi: DWORD64,
1086     R8: DWORD64,
1087     R9: DWORD64,
1088     R10: DWORD64,
1089     R11: DWORD64,
1090     R12: DWORD64,
1091     R13: DWORD64,
1092     R14: DWORD64,
1093     R15: DWORD64,
1094     Rip: DWORD64,
1095     u: CONTEXT_u,
1096     VectorRegister: [M128A; 26],
1097     VectorControl: DWORD64,
1098     DebugControl: DWORD64,
1099     LastBranchToRip: DWORD64,
1100     LastBranchFromRip: DWORD64,
1101     LastExceptionToRip: DWORD64,
1102     LastExceptionFromRip: DWORD64,
1103 }}
1104 pub type PCONTEXT = *mut CONTEXT;
1105 pub type RUNTIME_FUNCTION = IMAGE_RUNTIME_FUNCTION_ENTRY;
1106 pub type PRUNTIME_FUNCTION = *mut IMAGE_RUNTIME_FUNCTION_ENTRY;
1107 pub type SCOPE_TABLE = SCOPE_TABLE_AMD64;
1108 pub type PSCOPE_TABLE = *mut SCOPE_TABLE_AMD64;
1109 pub const RUNTIME_FUNCTION_INDIRECT: DWORD = 0x1;
1110 pub const UNW_FLAG_NHANDLER: DWORD = 0x0;
1111 pub const UNW_FLAG_EHANDLER: DWORD = 0x1;
1112 pub const UNW_FLAG_UHANDLER: DWORD = 0x2;
1113 pub const UNW_FLAG_CHAININFO: DWORD = 0x4;
1114 pub const UNW_FLAG_NO_EPILOGUE: DWORD = 0x80000000;
1115 pub const UNWIND_HISTORY_TABLE_SIZE: usize = 12;
1116 STRUCT!{struct UNWIND_HISTORY_TABLE_ENTRY {
1117     ImageBase: DWORD64,
1118     FunctionEntry: PRUNTIME_FUNCTION,
1119 }}
1120 pub type PUNWIND_HISTORY_TABLE_ENTRY = *mut UNWIND_HISTORY_TABLE_ENTRY;
1121 STRUCT!{struct UNWIND_HISTORY_TABLE {
1122     Count: DWORD,
1123     LocalHint: BYTE,
1124     GlobalHint: BYTE,
1125     Search: BYTE,
1126     Once: BYTE,
1127     LowAddress: DWORD64,
1128     HighAddress: DWORD64,
1129     Entry: [UNWIND_HISTORY_TABLE_ENTRY; UNWIND_HISTORY_TABLE_SIZE],
1130 }}
1131 pub type PUNWIND_HISTORY_TABLE = *mut UNWIND_HISTORY_TABLE;
1132 FN!{cdecl PGET_RUNTIME_FUNCTION_CALLBACK(
1133     ControlPc: DWORD64,
1134     Context: PVOID,
1135 ) -> PRUNTIME_FUNCTION}
1136 FN!{cdecl POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK(
1137     Process: HANDLE,
1138     TableAddress: PVOID,
1139     Entries: PDWORD,
1140     Functions: *mut PRUNTIME_FUNCTION,
1141 ) -> DWORD}
1142 pub const OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME: &'static str
1143     = "OutOfProcessFunctionTableCallback";
1144 STRUCT!{struct DISPATCHER_CONTEXT {
1145     ControlPc: DWORD64,
1146     ImageBase: DWORD64,
1147     FunctionEntry: PRUNTIME_FUNCTION,
1148     EstablisherFrame: DWORD64,
1149     TargetIp: DWORD64,
1150     ContextRecord: PCONTEXT,
1151     LanguageHandler: PEXCEPTION_ROUTINE,
1152     HandlerData: PVOID,
1153     HistoryTable: PUNWIND_HISTORY_TABLE,
1154     ScopeIndex: DWORD,
1155     Fill0: DWORD,
1156 }}
1157 pub type PDISPATCHER_CONTEXT = *mut DISPATCHER_CONTEXT;
1158 FN!{cdecl PEXCEPTION_FILTER(
1159     ExceptionPointers: *mut EXCEPTION_POINTERS,
1160     EstablisherFrame: PVOID,
1161 ) -> LONG}
1162 FN!{cdecl PTERMINATION_HANDLER(
1163     AbnormalTermination: BOOLEAN,
1164     EstablisherFrame: PVOID,
1165 ) -> ()}
1166 STRUCT!{struct KNONVOLATILE_CONTEXT_POINTERS_u1_s {
1167     Xmm0: PM128A,
1168     Xmm1: PM128A,
1169     Xmm2: PM128A,
1170     Xmm3: PM128A,
1171     Xmm4: PM128A,
1172     Xmm5: PM128A,
1173     Xmm6: PM128A,
1174     Xmm7: PM128A,
1175     Xmm8: PM128A,
1176     Xmm9: PM128A,
1177     Xmm10: PM128A,
1178     Xmm11: PM128A,
1179     Xmm12: PM128A,
1180     Xmm13: PM128A,
1181     Xmm14: PM128A,
1182     Xmm15: PM128A,
1183 }}
1184 UNION!{union KNONVOLATILE_CONTEXT_POINTERS_u1 {
1185     [u64; 16],
1186     FloatingContext FloatingContext_mut: [PM128A; 16],
1187     s s_mut: KNONVOLATILE_CONTEXT_POINTERS_u1_s,
1188 }}
1189 STRUCT!{struct KNONVOLATILE_CONTEXT_POINTERS_u2_s {
1190     Rax: PDWORD64,
1191     Rcx: PDWORD64,
1192     Rdx: PDWORD64,
1193     Rbx: PDWORD64,
1194     Rsp: PDWORD64,
1195     Rbp: PDWORD64,
1196     Rsi: PDWORD64,
1197     Rdi: PDWORD64,
1198     R8: PDWORD64,
1199     R9: PDWORD64,
1200     R10: PDWORD64,
1201     R11: PDWORD64,
1202     R12: PDWORD64,
1203     R13: PDWORD64,
1204     R14: PDWORD64,
1205     R15: PDWORD64,
1206 }}
1207 UNION!{union KNONVOLATILE_CONTEXT_POINTERS_u2 {
1208     [u64; 16],
1209     IntegerContext IntegerContext_mut: [PDWORD64; 16],
1210     s s_mut: KNONVOLATILE_CONTEXT_POINTERS_u2_s,
1211 }}
1212 STRUCT!{struct KNONVOLATILE_CONTEXT_POINTERS {
1213     u1: KNONVOLATILE_CONTEXT_POINTERS_u1,
1214     u2: KNONVOLATILE_CONTEXT_POINTERS_u2,
1215 }}
1216 pub type PKNONVOLATILE_CONTEXT_POINTERS = *mut KNONVOLATILE_CONTEXT_POINTERS;
1217 } // IFDEF(x86_64)
1218 #[cfg(target_arch = "x86")]
1219 IFDEF!{
1220 pub const EXCEPTION_READ_FAULT: DWORD = 0;
1221 pub const EXCEPTION_WRITE_FAULT: DWORD = 1;
1222 pub const EXCEPTION_EXECUTE_FAULT: DWORD = 8;
1223 pub const SIZE_OF_80387_REGISTERS: usize = 80;
1224 pub const CONTEXT_i386: DWORD = 0x00010000;
1225 pub const CONTEXT_i486: DWORD = 0x00010000;
1226 pub const CONTEXT_CONTROL: DWORD = CONTEXT_i386 | 0x00000001;
1227 pub const CONTEXT_INTEGER: DWORD = CONTEXT_i386 | 0x00000002;
1228 pub const CONTEXT_SEGMENTS: DWORD = CONTEXT_i386 | 0x00000004;
1229 pub const CONTEXT_FLOATING_POINT: DWORD = CONTEXT_i386 | 0x00000008;
1230 pub const CONTEXT_DEBUG_REGISTERS: DWORD = CONTEXT_i386 | 0x00000010;
1231 pub const CONTEXT_EXTENDED_REGISTERS: DWORD = CONTEXT_i386 | 0x00000020;
1232 pub const CONTEXT_FULL: DWORD = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS;
1233 pub const CONTEXT_ALL: DWORD = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS
1234     | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS;
1235 pub const CONTEXT_XSTATE: DWORD = CONTEXT_i386 | 0x00000040;
1236 pub const CONTEXT_EXCEPTION_ACTIVE: DWORD = 0x08000000;
1237 pub const CONTEXT_SERVICE_ACTIVE: DWORD = 0x10000000;
1238 pub const CONTEXT_EXCEPTION_REQUEST: DWORD = 0x40000000;
1239 pub const CONTEXT_EXCEPTION_REPORTING: DWORD = 0x80000000;
1240 STRUCT!{struct FLOATING_SAVE_AREA {
1241     ControlWord: DWORD,
1242     StatusWord: DWORD,
1243     TagWord: DWORD,
1244     ErrorOffset: DWORD,
1245     ErrorSelector: DWORD,
1246     DataOffset: DWORD,
1247     DataSelector: DWORD,
1248     RegisterArea: [BYTE; SIZE_OF_80387_REGISTERS],
1249     Spare0: DWORD,
1250 }}
1251 pub type PFLOATING_SAVE_AREA = *mut FLOATING_SAVE_AREA;
1252 pub const MAXIMUM_SUPPORTED_EXTENSION: usize = 512;
1253 STRUCT!{struct CONTEXT {
1254     ContextFlags: DWORD,
1255     Dr0: DWORD,
1256     Dr1: DWORD,
1257     Dr2: DWORD,
1258     Dr3: DWORD,
1259     Dr6: DWORD,
1260     Dr7: DWORD,
1261     FloatSave: FLOATING_SAVE_AREA,
1262     SegGs: DWORD,
1263     SegFs: DWORD,
1264     SegEs: DWORD,
1265     SegDs: DWORD,
1266     Edi: DWORD,
1267     Esi: DWORD,
1268     Ebx: DWORD,
1269     Edx: DWORD,
1270     Ecx: DWORD,
1271     Eax: DWORD,
1272     Ebp: DWORD,
1273     Eip: DWORD,
1274     SegCs: DWORD,
1275     EFlags: DWORD,
1276     Esp: DWORD,
1277     SegSs: DWORD,
1278     ExtendedRegisters: [BYTE; MAXIMUM_SUPPORTED_EXTENSION],
1279 }}
1280 pub type PCONTEXT = *mut CONTEXT;
1281 } // IFDEF(x86)
1282 STRUCT!{struct LDT_ENTRY_Bytes {
1283     BaseMid: BYTE,
1284     Flags1: BYTE,
1285     Flags2: BYTE,
1286     BaseHi: BYTE,
1287 }}
1288 STRUCT!{struct LDT_ENTRY_Bits {
1289     Bitfield: DWORD,
1290 }}
1291 BITFIELD!{LDT_ENTRY_Bits Bitfield: DWORD [
1292     BaseMid set_BaseMid[0..8],
1293     Type set_Type[8..13],
1294     Dpl set_Dpl[13..15],
1295     Pres set_Pres[15..16],
1296     LimitHi set_LimitHi[16..20],
1297     Sys set_Sys[20..21],
1298     Reserved_0 set_Reserved_0[21..22],
1299     Default_Big set_Default_Big[22..23],
1300     Granularity set_Granularity[23..24],
1301     BaseHi set_BaseHi[24..32],
1302 ]}
1303 UNION!{union LDT_ENTRY_HighWord {
1304     [u32; 1],
1305     Bytes Bytes_mut: LDT_ENTRY_Bytes,
1306     Bits Bits_mut: LDT_ENTRY_Bits,
1307 }}
1308 STRUCT!{struct LDT_ENTRY {
1309     LimitLow: WORD,
1310     BaseLow: WORD,
1311     HighWord: LDT_ENTRY_HighWord,
1312 }}
1313 pub type PLDT_ENTRY = *mut LDT_ENTRY;
1314 #[cfg(target_arch = "aarch64")]
1315 IFDEF!{
1316 pub const ARM64_MAX_BREAKPOINTS: usize = 8;
1317 pub const ARM64_MAX_WATCHPOINTS: usize = 2;
1318 pub const EXCEPTION_READ_FAULT: DWORD = 0;
1319 pub const EXCEPTION_WRITE_FAULT: DWORD = 1;
1320 pub const EXCEPTION_EXECUTE_FAULT: DWORD = 8;
1321 pub const CONTEXT_ARM64: DWORD = 0x00400000;
1322 pub const CONTEXT_CONTROL: DWORD = CONTEXT_ARM64 | 0x00000001;
1323 pub const CONTEXT_INTEGER: DWORD = CONTEXT_ARM64 | 0x00000002;
1324 pub const CONTEXT_FLOATING_POINT: DWORD = CONTEXT_ARM64 | 0x00000004;
1325 pub const CONTEXT_DEBUG_REGISTERS: DWORD = CONTEXT_ARM64 | 0x00000008;
1326 pub const CONTEXT_X18: DWORD = CONTEXT_ARM64 | 0x00000010;
1327 pub const CONTEXT_FULL: DWORD = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT;
1328 pub const CONTEXT_ALL: DWORD = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT
1329         | CONTEXT_DEBUG_REGISTERS | CONTEXT_X18;
1330 pub const CONTEXT_EXCEPTION_ACTIVE: DWORD = 0x08000000;
1331 pub const CONTEXT_SERVICE_ACTIVE: DWORD = 0x10000000;
1332 pub const CONTEXT_EXCEPTION_REQUEST: DWORD = 0x40000000;
1333 pub const CONTEXT_EXCEPTION_REPORTING: DWORD = 0x80000000;
1334 STRUCT!{struct CONTEXT_u_s {
1335     X0: DWORD64,
1336     X1: DWORD64,
1337     X2: DWORD64,
1338     X3: DWORD64,
1339     X4: DWORD64,
1340     X5: DWORD64,
1341     X6: DWORD64,
1342     X7: DWORD64,
1343     X8: DWORD64,
1344     X9: DWORD64,
1345     X10: DWORD64,
1346     X11: DWORD64,
1347     X12: DWORD64,
1348     X13: DWORD64,
1349     X14: DWORD64,
1350     X15: DWORD64,
1351     X16: DWORD64,
1352     X17: DWORD64,
1353     X18: DWORD64,
1354     X19: DWORD64,
1355     X20: DWORD64,
1356     X21: DWORD64,
1357     X22: DWORD64,
1358     X23: DWORD64,
1359     X24: DWORD64,
1360     X25: DWORD64,
1361     X26: DWORD64,
1362     X27: DWORD64,
1363     X28: DWORD64,
1364     Fp: DWORD64,
1365     Lr: DWORD64,
1366 }}
1367 UNION!{union CONTEXT_u {
1368     [u64; 31],
1369     s s_mut: CONTEXT_u_s,
1370 }}
1371 STRUCT!{struct ARM64_NT_NEON128_s {
1372     Low: ULONGLONG,
1373     High: LONGLONG,
1374 }}
1375 UNION!{union ARM64_NT_NEON128 {
1376     [u64; 2],
1377     s s_mut: ARM64_NT_NEON128_s,
1378     D D_mut: [f64; 2],
1379     S S_mut: [f32; 4],
1380     H H_mut: [WORD; 8],
1381     B B_mut: [BYTE; 16],
1382 }}
1383 STRUCT!{struct CONTEXT { // FIXME align 16
1384     ContextFlags: DWORD,
1385     Cpsr: DWORD,
1386     u: CONTEXT_u,
1387     Sp: DWORD64,
1388     Pc: DWORD64,
1389     V: [ARM64_NT_NEON128; 32],
1390     Fpcr: DWORD,
1391     Fpsr: DWORD,
1392     Bcr: [DWORD; ARM64_MAX_BREAKPOINTS],
1393     Bvr: [DWORD64; ARM64_MAX_BREAKPOINTS],
1394     Wcr: [DWORD; ARM64_MAX_WATCHPOINTS],
1395     Wvr: [DWORD64; ARM64_MAX_WATCHPOINTS],
1396 }}
1397 pub type PCONTEXT = *mut CONTEXT;
1398 pub type RUNTIME_FUNCTION = IMAGE_RUNTIME_FUNCTION_ENTRY;
1399 pub type PRUNTIME_FUNCTION = *mut IMAGE_RUNTIME_FUNCTION_ENTRY;
1400 pub type SCOPE_TABLE = SCOPE_TABLE_ARM64;
1401 pub type PSCOPE_TABLE = *mut SCOPE_TABLE_ARM64;
1402 pub const RUNTIME_FUNCTION_INDIRECT: DWORD = 0x1;
1403 pub const UNW_FLAG_NHANDLER: DWORD = 0x0;
1404 pub const UNW_FLAG_EHANDLER: DWORD = 0x1;
1405 pub const UNW_FLAG_UHANDLER: DWORD = 0x2;
1406 pub const UNWIND_HISTORY_TABLE_SIZE: usize = 12;
1407 STRUCT!{struct UNWIND_HISTORY_TABLE_ENTRY {
1408     ImageBase: DWORD64,
1409     FunctionEntry: PRUNTIME_FUNCTION,
1410 }}
1411 pub type PUNWIND_HISTORY_TABLE_ENTRY = *mut UNWIND_HISTORY_TABLE_ENTRY;
1412 STRUCT!{struct UNWIND_HISTORY_TABLE {
1413     Count: DWORD,
1414     LocalHint: BYTE,
1415     GlobalHint: BYTE,
1416     Search: BYTE,
1417     Once: BYTE,
1418     LowAddress: DWORD64,
1419     HighAddress: DWORD64,
1420     Entry: [UNWIND_HISTORY_TABLE_ENTRY; UNWIND_HISTORY_TABLE_SIZE],
1421 }}
1422 pub type PUNWIND_HISTORY_TABLE = *mut UNWIND_HISTORY_TABLE;
1423 FN!{cdecl PGET_RUNTIME_FUNCTION_CALLBACK(
1424     ControlPc: DWORD64,
1425     Context: PVOID,
1426 ) -> PRUNTIME_FUNCTION}
1427 FN!{cdecl POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK(
1428     Process: HANDLE,
1429     TableAddress: PVOID,
1430     Entries: PDWORD,
1431     Functions: *mut PRUNTIME_FUNCTION,
1432 ) -> DWORD}
1433 pub const OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME: &'static str
1434     = "OutOfProcessFunctionTableCallback";
1435 STRUCT!{struct DISPATCHER_CONTEXT {
1436     ControlPc: ULONG_PTR,
1437     ImageBase: ULONG_PTR,
1438     FunctionEntry: PRUNTIME_FUNCTION,
1439     EstablisherFrame: ULONG_PTR,
1440     TargetPc: ULONG_PTR,
1441     ContextRecord: PCONTEXT,
1442     LanguageHandler: PEXCEPTION_ROUTINE,
1443     HandlerData: PVOID,
1444     HistoryTable: PUNWIND_HISTORY_TABLE,
1445     ScopeIndex: DWORD,
1446     ControlPcIsUnwound: BOOLEAN,
1447     NonVolatileRegisters: PBYTE,
1448 }}
1449 pub type PDISPATCHER_CONTEXT = *mut DISPATCHER_CONTEXT;
1450 FN!{cdecl PEXCEPTION_FILTER(
1451     ExceptionPointers: *mut EXCEPTION_POINTERS,
1452     EstablisherFrame: DWORD64,
1453 ) -> LONG}
1454 FN!{cdecl PTERMINATION_HANDLER(
1455     AbnormalTermination: BOOLEAN,
1456     EstablisherFrame: DWORD64,
1457 ) -> ()}
1458 STRUCT!{struct KNONVOLATILE_CONTEXT_POINTERS {
1459     X19: PDWORD64,
1460     X20: PDWORD64,
1461     X21: PDWORD64,
1462     X22: PDWORD64,
1463     X23: PDWORD64,
1464     X24: PDWORD64,
1465     X25: PDWORD64,
1466     X26: PDWORD64,
1467     X27: PDWORD64,
1468     X28: PDWORD64,
1469     Fp: PDWORD64,
1470     Lr: PDWORD64,
1471     D8: PDWORD64,
1472     D9: PDWORD64,
1473     D10: PDWORD64,
1474     D11: PDWORD64,
1475     D12: PDWORD64,
1476     D13: PDWORD64,
1477     D14: PDWORD64,
1478     D15: PDWORD64,
1479 }}
1480 pub type PKNONVOLATILE_CONTEXT_POINTERS = *mut KNONVOLATILE_CONTEXT_POINTERS;
1481 } // IFDEF(aarch64)
1482 #[cfg(target_arch = "arm")]
1483 IFDEF!{
1484 pub const ARM_MAX_BREAKPOINTS: usize = 8;
1485 pub const ARM_MAX_WATCHPOINTS: usize = 1;
1486 STRUCT!{struct NEON128 {
1487     Low: ULONGLONG,
1488     High: LONGLONG,
1489 }}
1490 pub type PNEON128 = *mut NEON128;
1491 UNION!{union CONTEXT_u {
1492     [u64; 32],
1493     Q Q_mut: [NEON128; 16],
1494     D D_mut: [ULONGLONG; 32],
1495     S S_mut: [DWORD; 32],
1496 }}
1497 STRUCT!{struct CONTEXT {
1498     ContextFlags: DWORD,
1499     R0: DWORD,
1500     R1: DWORD,
1501     R2: DWORD,
1502     R3: DWORD,
1503     R4: DWORD,
1504     R5: DWORD,
1505     R6: DWORD,
1506     R7: DWORD,
1507     R8: DWORD,
1508     R9: DWORD,
1509     R10: DWORD,
1510     R11: DWORD,
1511     R12: DWORD,
1512     Sp: DWORD,
1513     Lr: DWORD,
1514     Pc: DWORD,
1515     Cpsr: DWORD,
1516     Fpsrc: DWORD,
1517     Padding: DWORD,
1518     u: CONTEXT_u,
1519     Bvr: [DWORD; ARM_MAX_BREAKPOINTS],
1520     Bcr: [DWORD; ARM_MAX_BREAKPOINTS],
1521     Wvr: [DWORD; ARM_MAX_WATCHPOINTS],
1522     Wcr: [DWORD; ARM_MAX_WATCHPOINTS],
1523     Padding2: [DWORD; 2],
1524 }}
1525 pub type PCONTEXT = *mut CONTEXT;
1526 } // IFDEF(arm)
1527 pub const WOW64_CONTEXT_i386: DWORD = 0x00010000;
1528 pub const WOW64_CONTEXT_i486: DWORD = 0x00010000;
1529 pub const WOW64_CONTEXT_CONTROL: DWORD = WOW64_CONTEXT_i386 | 0x00000001;
1530 pub const WOW64_CONTEXT_INTEGER: DWORD = WOW64_CONTEXT_i386 | 0x00000002;
1531 pub const WOW64_CONTEXT_SEGMENTS: DWORD = WOW64_CONTEXT_i386 | 0x00000004;
1532 pub const WOW64_CONTEXT_FLOATING_POINT: DWORD = WOW64_CONTEXT_i386 | 0x00000008;
1533 pub const WOW64_CONTEXT_DEBUG_REGISTERS: DWORD = WOW64_CONTEXT_i386 | 0x00000010;
1534 pub const WOW64_CONTEXT_EXTENDED_REGISTERS: DWORD = WOW64_CONTEXT_i386 | 0x00000020;
1535 pub const WOW64_CONTEXT_FULL: DWORD = WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER
1536     | WOW64_CONTEXT_SEGMENTS;
1537 pub const WOW64_CONTEXT_ALL: DWORD = WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER
1538     | WOW64_CONTEXT_SEGMENTS | WOW64_CONTEXT_FLOATING_POINT | WOW64_CONTEXT_DEBUG_REGISTERS
1539     | WOW64_CONTEXT_EXTENDED_REGISTERS;
1540 pub const WOW64_CONTEXT_XSTATE: DWORD = WOW64_CONTEXT_i386 | 0x00000040;
1541 pub const WOW64_CONTEXT_EXCEPTION_ACTIVE: DWORD = 0x08000000;
1542 pub const WOW64_CONTEXT_SERVICE_ACTIVE: DWORD = 0x10000000;
1543 pub const WOW64_CONTEXT_EXCEPTION_REQUEST: DWORD = 0x40000000;
1544 pub const WOW64_CONTEXT_EXCEPTION_REPORTING: DWORD = 0x80000000;
1545 pub const WOW64_SIZE_OF_80387_REGISTERS: usize = 80;
1546 pub const WOW64_MAXIMUM_SUPPORTED_EXTENSION: usize = 512;
1547 STRUCT!{struct WOW64_FLOATING_SAVE_AREA {
1548     ControlWord: DWORD,
1549     StatusWord: DWORD,
1550     TagWord: DWORD,
1551     ErrorOffset: DWORD,
1552     ErrorSelector: DWORD,
1553     DataOffset: DWORD,
1554     DataSelector: DWORD,
1555     RegisterArea: [BYTE; WOW64_SIZE_OF_80387_REGISTERS],
1556     Cr0NpxState: DWORD,
1557 }}
1558 pub type PWOW64_FLOATING_SAVE_AREA = *mut WOW64_FLOATING_SAVE_AREA;
1559 STRUCT!{struct WOW64_CONTEXT {
1560     ContextFlags: DWORD,
1561     Dr0: DWORD,
1562     Dr1: DWORD,
1563     Dr2: DWORD,
1564     Dr3: DWORD,
1565     Dr6: DWORD,
1566     Dr7: DWORD,
1567     FloatSave: WOW64_FLOATING_SAVE_AREA,
1568     SegGs: DWORD,
1569     SegFs: DWORD,
1570     SegEs: DWORD,
1571     SegDs: DWORD,
1572     Edi: DWORD,
1573     Esi: DWORD,
1574     Ebx: DWORD,
1575     Edx: DWORD,
1576     Ecx: DWORD,
1577     Eax: DWORD,
1578     Ebp: DWORD,
1579     Eip: DWORD,
1580     SegCs: DWORD,
1581     EFlags: DWORD,
1582     Esp: DWORD,
1583     SegSs: DWORD,
1584     ExtendedRegisters: [BYTE; WOW64_MAXIMUM_SUPPORTED_EXTENSION],
1585 }}
1586 pub type PWOW64_CONTEXT = *mut WOW64_CONTEXT;
1587 STRUCT!{struct WOW64_LDT_ENTRY_Bytes {
1588     BaseMid: BYTE,
1589     Flags1: BYTE,
1590     Flags2: BYTE,
1591     BaseHi: BYTE,
1592 }}
1593 STRUCT!{struct WOW64_LDT_ENTRY_Bits {
1594     BitFields: DWORD,
1595 }}
1596 BITFIELD!{WOW64_LDT_ENTRY_Bits BitFields: DWORD [
1597     BaseMid set_BaseMid[0..8],
1598     Type set_Type[8..13],
1599     Dpl set_Dpl[13..15],
1600     Pres set_Pres[15..16],
1601     LimitHi set_LimitHi[16..20],
1602     Sys set_Sys[20..21],
1603     Reserved_0 set_Reserved_0[21..22],
1604     Default_Big set_Default_Big[22..23],
1605     Granularity set_Granularity[23..24],
1606     BaseHi set_BaseHi[24..32],
1607 ]}
1608 UNION!{union WOW64_LDT_ENTRY_HighWord {
1609     [u32; 1],
1610     Bytes Bytes_mut: WOW64_LDT_ENTRY_Bytes,
1611     Bits Bits_mut: WOW64_LDT_ENTRY_Bits,
1612 }}
1613 STRUCT!{struct WOW64_LDT_ENTRY {
1614     LimitLow: WORD,
1615     BaseLow: WORD,
1616     HighWord: WOW64_LDT_ENTRY_HighWord,
1617 }}
1618 pub type PWOW64_LDT_ENTRY = *mut WOW64_LDT_ENTRY;
1619 STRUCT!{struct WOW64_DESCRIPTOR_TABLE_ENTRY {
1620     Selector: DWORD,
1621     Descriptor: WOW64_LDT_ENTRY,
1622 }}
1623 pub type PWOW64_DESCRIPTOR_TABLE_ENTRY = *mut WOW64_DESCRIPTOR_TABLE_ENTRY;
1624 pub const EXCEPTION_NONCONTINUABLE: DWORD = 0x1;
1625 pub const EXCEPTION_UNWINDING: DWORD = 0x2;
1626 pub const EXCEPTION_EXIT_UNWIND: DWORD = 0x4;
1627 pub const EXCEPTION_STACK_INVALID: DWORD = 0x8;
1628 pub const EXCEPTION_NESTED_CALL: DWORD = 0x10;
1629 pub const EXCEPTION_TARGET_UNWIND: DWORD = 0x20;
1630 pub const EXCEPTION_COLLIDED_UNWIND: DWORD = 0x40;
1631 pub const EXCEPTION_UNWIND: DWORD = EXCEPTION_UNWINDING | EXCEPTION_EXIT_UNWIND
1632     | EXCEPTION_TARGET_UNWIND | EXCEPTION_COLLIDED_UNWIND;
1633 #[inline]
IS_UNWINDING(Flag: DWORD) -> bool1634 pub fn IS_UNWINDING(Flag: DWORD) -> bool {
1635     (Flag & EXCEPTION_UNWIND) != 0
1636 }
1637 #[inline]
IS_DISPATCHING(Flag: DWORD) -> bool1638 pub fn IS_DISPATCHING(Flag: DWORD) -> bool {
1639     (Flag & EXCEPTION_UNWIND) == 0
1640 }
1641 #[inline]
IS_TARGET_UNWIND(Flag: DWORD) -> bool1642 pub fn IS_TARGET_UNWIND(Flag: DWORD) -> bool {
1643     (Flag & EXCEPTION_TARGET_UNWIND) != 0
1644 }
1645 pub const EXCEPTION_MAXIMUM_PARAMETERS: usize = 15;
1646 STRUCT!{struct EXCEPTION_RECORD {
1647     ExceptionCode: DWORD,
1648     ExceptionFlags: DWORD,
1649     ExceptionRecord: *mut EXCEPTION_RECORD,
1650     ExceptionAddress: PVOID,
1651     NumberParameters: DWORD,
1652     ExceptionInformation: [ULONG_PTR; EXCEPTION_MAXIMUM_PARAMETERS],
1653 }}
1654 pub type PEXCEPTION_RECORD = *mut EXCEPTION_RECORD;
1655 STRUCT!{struct EXCEPTION_RECORD32 {
1656     ExceptionCode: DWORD,
1657     ExceptionFlags: DWORD,
1658     ExceptionRecord: DWORD,
1659     ExceptionAddress: DWORD,
1660     NumberParameters: DWORD,
1661     ExceptionInformation: [DWORD; EXCEPTION_MAXIMUM_PARAMETERS],
1662 }}
1663 pub type PEXCEPTION_RECORD32 = *mut EXCEPTION_RECORD32;
1664 STRUCT!{struct EXCEPTION_RECORD64 {
1665     ExceptionCode: DWORD,
1666     ExceptionFlags: DWORD,
1667     ExceptionRecord: DWORD64,
1668     ExceptionAddress: DWORD64,
1669     NumberParameters: DWORD,
1670     __unusedAlignment: DWORD,
1671     ExceptionInformation: [DWORD64; EXCEPTION_MAXIMUM_PARAMETERS],
1672 }}
1673 pub type PEXCEPTION_RECORD64 = *mut EXCEPTION_RECORD64;
1674 STRUCT!{struct EXCEPTION_POINTERS {
1675     ExceptionRecord: PEXCEPTION_RECORD,
1676     ContextRecord: PCONTEXT,
1677 }}
1678 pub type PEXCEPTION_POINTERS = *mut EXCEPTION_POINTERS;
1679 pub type PACCESS_TOKEN = PVOID;
1680 pub type PSECURITY_DESCRIPTOR = PVOID;
1681 pub type PSID = PVOID;
1682 pub type PCLAIMS_BLOB = PVOID;
1683 pub type ACCESS_MASK = DWORD;
1684 pub type PACCESS_MASK = *mut ACCESS_MASK;
1685 pub const DELETE: DWORD = 0x00010000;
1686 pub const READ_CONTROL: DWORD = 0x00020000;
1687 pub const WRITE_DAC: DWORD = 0x00040000;
1688 pub const WRITE_OWNER: DWORD = 0x00080000;
1689 pub const SYNCHRONIZE: DWORD = 0x00100000;
1690 pub const STANDARD_RIGHTS_REQUIRED: DWORD = 0x000F0000;
1691 pub const STANDARD_RIGHTS_READ: DWORD = READ_CONTROL;
1692 pub const STANDARD_RIGHTS_WRITE: DWORD = READ_CONTROL;
1693 pub const STANDARD_RIGHTS_EXECUTE: DWORD = READ_CONTROL;
1694 pub const STANDARD_RIGHTS_ALL: DWORD = 0x001F0000;
1695 pub const SPECIFIC_RIGHTS_ALL: DWORD = 0x0000FFFF;
1696 pub const ACCESS_SYSTEM_SECURITY: DWORD = 0x01000000;
1697 pub const MAXIMUM_ALLOWED: DWORD = 0x02000000;
1698 pub const GENERIC_READ: DWORD = 0x80000000;
1699 pub const GENERIC_WRITE: DWORD = 0x40000000;
1700 pub const GENERIC_EXECUTE: DWORD = 0x20000000;
1701 pub const GENERIC_ALL: DWORD = 0x10000000;
1702 STRUCT!{struct GENERIC_MAPPING {
1703     GenericRead: ACCESS_MASK,
1704     GenericWrite: ACCESS_MASK,
1705     GenericExecute: ACCESS_MASK,
1706     GenericAll: ACCESS_MASK,
1707 }}
1708 pub type PGENERIC_MAPPING = *mut GENERIC_MAPPING;
1709 STRUCT!{struct LUID_AND_ATTRIBUTES {
1710     Luid: LUID,
1711     Attributes: DWORD,
1712 }}
1713 pub type PLUID_AND_ATTRIBUTES = *mut LUID_AND_ATTRIBUTES;
1714 pub type LUID_AND_ATTRIBUTES_ARRAY = LUID_AND_ATTRIBUTES;
1715 pub type PLUID_AND_ATTRIBUTES_ARRAY = *mut LUID_AND_ATTRIBUTES;
1716 STRUCT!{struct SID_IDENTIFIER_AUTHORITY {
1717     Value: [BYTE; 6],
1718 }}
1719 pub type PSID_IDENTIFIER_AUTHORITY = *mut SID_IDENTIFIER_AUTHORITY;
1720 STRUCT!{struct SID {
1721     Revision: BYTE,
1722     SubAuthorityCount: BYTE,
1723     IdentifierAuthority: SID_IDENTIFIER_AUTHORITY,
1724     SubAuthority: [DWORD; 1],
1725 }}
1726 pub type PISID = *mut SID;
1727 pub const SID_REVISION: BYTE = 1;
1728 pub const SID_MAX_SUB_AUTHORITIES: BYTE = 15;
1729 pub const SID_RECOMMENDED_SUB_AUTHORITIES: BYTE = 1;
1730 pub const SECURITY_MAX_SID_SIZE: usize = 12 - 4 + (SID_MAX_SUB_AUTHORITIES as usize * 4);
1731 pub const SECURITY_MAX_SID_STRING_CHARACTERS: BYTE = 2 + 4 + 15 + (11 * SID_MAX_SUB_AUTHORITIES)
1732     + 1;
1733 UNION!{union SE_SID {
1734     [u32; 17],
1735     Sid Sid_mut: SID,
1736     Buffer Buffer_mut: [BYTE; SECURITY_MAX_SID_SIZE],
1737 }}
1738 pub type PSE_SID = *mut SE_SID;
1739 ENUM!{enum SID_NAME_USE {
1740     SidTypeUser = 1,
1741     SidTypeGroup,
1742     SidTypeDomain,
1743     SidTypeAlias,
1744     SidTypeWellKnownGroup,
1745     SidTypeDeletedAccount,
1746     SidTypeInvalid,
1747     SidTypeUnknown,
1748     SidTypeComputer,
1749     SidTypeLabel,
1750     SidTypeLogonSession,
1751 }}
1752 pub type PSID_NAME_USE = *mut SID_NAME_USE;
1753 STRUCT!{struct SID_AND_ATTRIBUTES {
1754     Sid: PSID,
1755     Attributes: DWORD,
1756 }}
1757 pub type PSID_AND_ATTRIBUTES = *mut SID_AND_ATTRIBUTES;
1758 pub type SID_AND_ATTRIBUTES_ARRAY = SID_AND_ATTRIBUTES;
1759 pub type PSID_AND_ATTRIBUTES_ARRAY = *mut SID_AND_ATTRIBUTES;
1760 pub const SID_HASH_SIZE: usize = 32;
1761 pub type SID_HASH_ENTRY = ULONG_PTR;
1762 pub type PSID_HASH_ENTRY = *mut ULONG_PTR;
1763 STRUCT!{struct SID_AND_ATTRIBUTES_HASH {
1764     SidCount: DWORD,
1765     SidAttr: PSID_AND_ATTRIBUTES,
1766     Hash: [SID_HASH_ENTRY; SID_HASH_SIZE],
1767 }}
1768 pub type PSID_AND_ATTRIBUTES_HASH = *mut SID_AND_ATTRIBUTES_HASH;
1769 pub const SECURITY_NULL_SID_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 0];
1770 pub const SECURITY_WORLD_SID_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 1];
1771 pub const SECURITY_LOCAL_SID_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 2];
1772 pub const SECURITY_CREATOR_SID_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 3];
1773 pub const SECURITY_NON_UNIQUE_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 4];
1774 pub const SECURITY_RESOURCE_MANAGER_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 9];
1775 pub const SECURITY_NULL_RID: DWORD = 0x00000000;
1776 pub const SECURITY_WORLD_RID: DWORD = 0x00000000;
1777 pub const SECURITY_LOCAL_RID: DWORD = 0x00000000;
1778 pub const SECURITY_LOCAL_LOGON_RID: DWORD = 0x00000001;
1779 pub const SECURITY_CREATOR_OWNER_RID: DWORD = 0x00000000;
1780 pub const SECURITY_CREATOR_GROUP_RID: DWORD = 0x00000001;
1781 pub const SECURITY_CREATOR_OWNER_SERVER_RID: DWORD = 0x00000002;
1782 pub const SECURITY_CREATOR_GROUP_SERVER_RID: DWORD = 0x00000003;
1783 pub const SECURITY_CREATOR_OWNER_RIGHTS_RID: DWORD = 0x00000004;
1784 pub const SECURITY_NT_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 5];
1785 pub const SECURITY_DIALUP_RID: DWORD = 0x00000001;
1786 pub const SECURITY_NETWORK_RID: DWORD = 0x00000002;
1787 pub const SECURITY_BATCH_RID: DWORD = 0x00000003;
1788 pub const SECURITY_INTERACTIVE_RID: DWORD = 0x00000004;
1789 pub const SECURITY_LOGON_IDS_RID: DWORD = 0x00000005;
1790 pub const SECURITY_LOGON_IDS_RID_COUNT: DWORD = 3;
1791 pub const SECURITY_SERVICE_RID: DWORD = 0x00000006;
1792 pub const SECURITY_ANONYMOUS_LOGON_RID: DWORD = 0x00000007;
1793 pub const SECURITY_PROXY_RID: DWORD = 0x00000008;
1794 pub const SECURITY_ENTERPRISE_CONTROLLERS_RID: DWORD = 0x00000009;
1795 pub const SECURITY_SERVER_LOGON_RID: DWORD = SECURITY_ENTERPRISE_CONTROLLERS_RID;
1796 pub const SECURITY_PRINCIPAL_SELF_RID: DWORD = 0x0000000A;
1797 pub const SECURITY_AUTHENTICATED_USER_RID: DWORD = 0x0000000B;
1798 pub const SECURITY_RESTRICTED_CODE_RID: DWORD = 0x0000000C;
1799 pub const SECURITY_TERMINAL_SERVER_RID: DWORD = 0x0000000D;
1800 pub const SECURITY_REMOTE_LOGON_RID: DWORD = 0x0000000E;
1801 pub const SECURITY_THIS_ORGANIZATION_RID: DWORD = 0x0000000F;
1802 pub const SECURITY_IUSER_RID: DWORD = 0x00000011;
1803 pub const SECURITY_LOCAL_SYSTEM_RID: DWORD = 0x00000012;
1804 pub const SECURITY_LOCAL_SERVICE_RID: DWORD = 0x00000013;
1805 pub const SECURITY_NETWORK_SERVICE_RID: DWORD = 0x00000014;
1806 pub const SECURITY_NT_NON_UNIQUE: DWORD = 0x00000015;
1807 pub const SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT: DWORD = 3;
1808 pub const SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID: DWORD = 0x00000016;
1809 pub const SECURITY_BUILTIN_DOMAIN_RID: DWORD = 0x00000020;
1810 pub const SECURITY_WRITE_RESTRICTED_CODE_RID: DWORD = 0x00000021;
1811 pub const SECURITY_PACKAGE_BASE_RID: DWORD = 0x00000040;
1812 pub const SECURITY_PACKAGE_RID_COUNT: DWORD = 2;
1813 pub const SECURITY_PACKAGE_NTLM_RID: DWORD = 0x0000000A;
1814 pub const SECURITY_PACKAGE_SCHANNEL_RID: DWORD = 0x0000000E;
1815 pub const SECURITY_PACKAGE_DIGEST_RID: DWORD = 0x00000015;
1816 pub const SECURITY_CRED_TYPE_BASE_RID: DWORD = 0x00000041;
1817 pub const SECURITY_CRED_TYPE_RID_COUNT: DWORD = 2;
1818 pub const SECURITY_CRED_TYPE_THIS_ORG_CERT_RID: DWORD = 0x00000001;
1819 pub const SECURITY_MIN_BASE_RID: DWORD = 0x00000050;
1820 pub const SECURITY_SERVICE_ID_BASE_RID: DWORD = 0x00000050;
1821 pub const SECURITY_SERVICE_ID_RID_COUNT: DWORD = 6;
1822 pub const SECURITY_RESERVED_ID_BASE_RID: DWORD = 0x00000051;
1823 pub const SECURITY_APPPOOL_ID_BASE_RID: DWORD = 0x00000052;
1824 pub const SECURITY_APPPOOL_ID_RID_COUNT: DWORD = 6;
1825 pub const SECURITY_VIRTUALSERVER_ID_BASE_RID: DWORD = 0x00000053;
1826 pub const SECURITY_VIRTUALSERVER_ID_RID_COUNT: DWORD = 6;
1827 pub const SECURITY_USERMODEDRIVERHOST_ID_BASE_RID: DWORD = 0x00000054;
1828 pub const SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT: DWORD = 6;
1829 pub const SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID: DWORD = 0x00000055;
1830 pub const SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT: DWORD = 6;
1831 pub const SECURITY_WMIHOST_ID_BASE_RID: DWORD = 0x00000056;
1832 pub const SECURITY_WMIHOST_ID_RID_COUNT: DWORD = 6;
1833 pub const SECURITY_TASK_ID_BASE_RID: DWORD = 0x00000057;
1834 pub const SECURITY_NFS_ID_BASE_RID: DWORD = 0x00000058;
1835 pub const SECURITY_COM_ID_BASE_RID: DWORD = 0x00000059;
1836 pub const SECURITY_WINDOW_MANAGER_BASE_RID: DWORD = 0x0000005A;
1837 pub const SECURITY_RDV_GFX_BASE_RID: DWORD = 0x0000005B;
1838 pub const SECURITY_DASHOST_ID_BASE_RID: DWORD = 0x0000005C;
1839 pub const SECURITY_DASHOST_ID_RID_COUNT: DWORD = 6;
1840 pub const SECURITY_USERMANAGER_ID_BASE_RID: DWORD = 0x0000005D;
1841 pub const SECURITY_USERMANAGER_ID_RID_COUNT: DWORD = 6;
1842 pub const SECURITY_WINRM_ID_BASE_RID: DWORD = 0x0000005E;
1843 pub const SECURITY_WINRM_ID_RID_COUNT: DWORD = 6;
1844 pub const SECURITY_CCG_ID_BASE_RID: DWORD = 0x0000005F;
1845 pub const SECURITY_UMFD_BASE_RID: DWORD = 0x00000060;
1846 pub const SECURITY_VIRTUALACCOUNT_ID_RID_COUNT: DWORD = 6;
1847 pub const SECURITY_MAX_BASE_RID: DWORD = 0x0000006F;
1848 pub const SECURITY_MAX_ALWAYS_FILTERED: DWORD = 0x000003E7;
1849 pub const SECURITY_MIN_NEVER_FILTERED: DWORD = 0x000003E8;
1850 pub const SECURITY_OTHER_ORGANIZATION_RID: DWORD = 0x000003E8;
1851 pub const SECURITY_WINDOWSMOBILE_ID_BASE_RID: DWORD = 0x00000070;
1852 pub const SECURITY_INSTALLER_GROUP_CAPABILITY_BASE: DWORD = 0x20;
1853 pub const SECURITY_INSTALLER_GROUP_CAPABILITY_RID_COUNT: DWORD = 9;
1854 pub const SECURITY_INSTALLER_CAPABILITY_RID_COUNT: DWORD = 10;
1855 pub const SECURITY_LOCAL_ACCOUNT_RID: DWORD = 0x00000071;
1856 pub const SECURITY_LOCAL_ACCOUNT_AND_ADMIN_RID: DWORD = 0x00000072;
1857 pub const DOMAIN_GROUP_RID_AUTHORIZATION_DATA_IS_COMPOUNDED: DWORD = 0x000001F0;
1858 pub const DOMAIN_GROUP_RID_AUTHORIZATION_DATA_CONTAINS_CLAIMS: DWORD = 0x000001F1;
1859 pub const DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS: DWORD = 0x000001F2;
1860 pub const FOREST_USER_RID_MAX: DWORD = 0x000001F3;
1861 pub const DOMAIN_USER_RID_ADMIN: DWORD = 0x000001F4;
1862 pub const DOMAIN_USER_RID_GUEST: DWORD = 0x000001F5;
1863 pub const DOMAIN_USER_RID_KRBTGT: DWORD = 0x000001F6;
1864 pub const DOMAIN_USER_RID_DEFAULT_ACCOUNT: DWORD = 0x000001F7;
1865 pub const DOMAIN_USER_RID_MAX: DWORD = 0x000003E7;
1866 pub const DOMAIN_GROUP_RID_ADMINS: DWORD = 0x00000200;
1867 pub const DOMAIN_GROUP_RID_USERS: DWORD = 0x00000201;
1868 pub const DOMAIN_GROUP_RID_GUESTS: DWORD = 0x00000202;
1869 pub const DOMAIN_GROUP_RID_COMPUTERS: DWORD = 0x00000203;
1870 pub const DOMAIN_GROUP_RID_CONTROLLERS: DWORD = 0x00000204;
1871 pub const DOMAIN_GROUP_RID_CERT_ADMINS: DWORD = 0x00000205;
1872 pub const DOMAIN_GROUP_RID_SCHEMA_ADMINS: DWORD = 0x00000206;
1873 pub const DOMAIN_GROUP_RID_ENTERPRISE_ADMINS: DWORD = 0x00000207;
1874 pub const DOMAIN_GROUP_RID_POLICY_ADMINS: DWORD = 0x00000208;
1875 pub const DOMAIN_GROUP_RID_READONLY_CONTROLLERS: DWORD = 0x00000209;
1876 pub const DOMAIN_GROUP_RID_CLONEABLE_CONTROLLERS: DWORD = 0x0000020A;
1877 pub const DOMAIN_GROUP_RID_CDC_RESERVED: DWORD = 0x0000020C;
1878 pub const DOMAIN_GROUP_RID_PROTECTED_USERS: DWORD = 0x0000020D;
1879 pub const DOMAIN_GROUP_RID_KEY_ADMINS: DWORD = 0x0000020E;
1880 pub const DOMAIN_GROUP_RID_ENTERPRISE_KEY_ADMINS: DWORD = 0x0000020F;
1881 pub const DOMAIN_ALIAS_RID_ADMINS: DWORD = 0x00000220;
1882 pub const DOMAIN_ALIAS_RID_USERS: DWORD = 0x00000221;
1883 pub const DOMAIN_ALIAS_RID_GUESTS: DWORD = 0x00000222;
1884 pub const DOMAIN_ALIAS_RID_POWER_USERS: DWORD = 0x00000223;
1885 pub const DOMAIN_ALIAS_RID_ACCOUNT_OPS: DWORD = 0x00000224;
1886 pub const DOMAIN_ALIAS_RID_SYSTEM_OPS: DWORD = 0x00000225;
1887 pub const DOMAIN_ALIAS_RID_PRINT_OPS: DWORD = 0x00000226;
1888 pub const DOMAIN_ALIAS_RID_BACKUP_OPS: DWORD = 0x00000227;
1889 pub const DOMAIN_ALIAS_RID_REPLICATOR: DWORD = 0x00000228;
1890 pub const DOMAIN_ALIAS_RID_RAS_SERVERS: DWORD = 0x00000229;
1891 pub const DOMAIN_ALIAS_RID_PREW2KCOMPACCESS: DWORD = 0x0000022A;
1892 pub const DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS: DWORD = 0x0000022B;
1893 pub const DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS: DWORD = 0x0000022C;
1894 pub const DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS: DWORD = 0x0000022D;
1895 pub const DOMAIN_ALIAS_RID_MONITORING_USERS: DWORD = 0x0000022E;
1896 pub const DOMAIN_ALIAS_RID_LOGGING_USERS: DWORD = 0x0000022F;
1897 pub const DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS: DWORD = 0x00000230;
1898 pub const DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS: DWORD = 0x00000231;
1899 pub const DOMAIN_ALIAS_RID_DCOM_USERS: DWORD = 0x00000232;
1900 pub const DOMAIN_ALIAS_RID_IUSERS: DWORD = 0x00000238;
1901 pub const DOMAIN_ALIAS_RID_CRYPTO_OPERATORS: DWORD = 0x00000239;
1902 pub const DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP: DWORD = 0x0000023B;
1903 pub const DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP: DWORD = 0x0000023C;
1904 pub const DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP: DWORD = 0x0000023D;
1905 pub const DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP: DWORD = 0x0000023E;
1906 pub const DOMAIN_ALIAS_RID_RDS_REMOTE_ACCESS_SERVERS: DWORD = 0x0000023F;
1907 pub const DOMAIN_ALIAS_RID_RDS_ENDPOINT_SERVERS: DWORD = 0x00000240;
1908 pub const DOMAIN_ALIAS_RID_RDS_MANAGEMENT_SERVERS: DWORD = 0x00000241;
1909 pub const DOMAIN_ALIAS_RID_HYPER_V_ADMINS: DWORD = 0x00000242;
1910 pub const DOMAIN_ALIAS_RID_ACCESS_CONTROL_ASSISTANCE_OPS: DWORD = 0x00000243;
1911 pub const DOMAIN_ALIAS_RID_REMOTE_MANAGEMENT_USERS: DWORD = 0x00000244;
1912 pub const DOMAIN_ALIAS_RID_DEFAULT_ACCOUNT: DWORD = 0x00000245;
1913 pub const DOMAIN_ALIAS_RID_STORAGE_REPLICA_ADMINS: DWORD = 0x00000246;
1914 pub const SECURITY_APP_PACKAGE_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 15];
1915 pub const SECURITY_APP_PACKAGE_BASE_RID: DWORD = 0x00000002;
1916 pub const SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT: DWORD = 2;
1917 pub const SECURITY_APP_PACKAGE_RID_COUNT: DWORD = 8;
1918 pub const SECURITY_CAPABILITY_BASE_RID: DWORD = 0x00000003;
1919 pub const SECURITY_CAPABILITY_APP_RID: DWORD = 0x00000040;
1920 pub const SECURITY_BUILTIN_CAPABILITY_RID_COUNT: DWORD = 2;
1921 pub const SECURITY_CAPABILITY_RID_COUNT: DWORD = 5;
1922 pub const SECURITY_PARENT_PACKAGE_RID_COUNT: DWORD = SECURITY_APP_PACKAGE_RID_COUNT;
1923 pub const SECURITY_CHILD_PACKAGE_RID_COUNT: DWORD = 12;
1924 pub const SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE: DWORD = 0x00000001;
1925 pub const SECURITY_BUILTIN_PACKAGE_ANY_RESTRICTED_PACKAGE: DWORD = 0x00000002;
1926 pub const SECURITY_CAPABILITY_INTERNET_CLIENT: DWORD = 0x00000001;
1927 pub const SECURITY_CAPABILITY_INTERNET_CLIENT_SERVER: DWORD = 0x00000002;
1928 pub const SECURITY_CAPABILITY_PRIVATE_NETWORK_CLIENT_SERVER: DWORD = 0x00000003;
1929 pub const SECURITY_CAPABILITY_PICTURES_LIBRARY: DWORD = 0x00000004;
1930 pub const SECURITY_CAPABILITY_VIDEOS_LIBRARY: DWORD = 0x00000005;
1931 pub const SECURITY_CAPABILITY_MUSIC_LIBRARY: DWORD = 0x00000006;
1932 pub const SECURITY_CAPABILITY_DOCUMENTS_LIBRARY: DWORD = 0x00000007;
1933 pub const SECURITY_CAPABILITY_ENTERPRISE_AUTHENTICATION: DWORD = 0x00000008;
1934 pub const SECURITY_CAPABILITY_SHARED_USER_CERTIFICATES: DWORD = 0x00000009;
1935 pub const SECURITY_CAPABILITY_REMOVABLE_STORAGE: DWORD = 0x0000000A;
1936 pub const SECURITY_CAPABILITY_APPOINTMENTS: DWORD = 0x0000000B;
1937 pub const SECURITY_CAPABILITY_CONTACTS: DWORD = 0x0000000C;
1938 pub const SECURITY_CAPABILITY_INTERNET_EXPLORER: DWORD = 0x00001000;
1939 pub const SECURITY_MANDATORY_LABEL_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 16];
1940 pub const SECURITY_MANDATORY_UNTRUSTED_RID: DWORD = 0x00000000;
1941 pub const SECURITY_MANDATORY_LOW_RID: DWORD = 0x00001000;
1942 pub const SECURITY_MANDATORY_MEDIUM_RID: DWORD = 0x00002000;
1943 pub const SECURITY_MANDATORY_MEDIUM_PLUS_RID: DWORD = SECURITY_MANDATORY_MEDIUM_RID + 0x10;
1944 pub const SECURITY_MANDATORY_HIGH_RID: DWORD = 0x00003000;
1945 pub const SECURITY_MANDATORY_SYSTEM_RID: DWORD = 0x00004000;
1946 pub const SECURITY_MANDATORY_MAXIMUM_USER_RID: DWORD = SECURITY_MANDATORY_SYSTEM_RID;
1947 #[inline]
MANDATORY_LEVEL_TO_MANDATORY_RID(IL: DWORD) -> DWORD1948 pub fn MANDATORY_LEVEL_TO_MANDATORY_RID(IL: DWORD) -> DWORD {
1949     IL * 0x1000
1950 }
1951 pub const SECURITY_SCOPED_POLICY_ID_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 17];
1952 pub const SECURITY_AUTHENTICATION_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 18];
1953 pub const SECURITY_AUTHENTICATION_AUTHORITY_RID_COUNT: DWORD = 1;
1954 pub const SECURITY_AUTHENTICATION_AUTHORITY_ASSERTED_RID: DWORD = 0x00000001;
1955 pub const SECURITY_AUTHENTICATION_SERVICE_ASSERTED_RID: DWORD = 0x00000002;
1956 pub const SECURITY_AUTHENTICATION_FRESH_KEY_AUTH_RID: DWORD = 0x00000003;
1957 pub const SECURITY_AUTHENTICATION_KEY_TRUST_RID: DWORD = 0x00000004;
1958 pub const SECURITY_AUTHENTICATION_KEY_PROPERTY_MFA_RID: DWORD = 0x00000005;
1959 pub const SECURITY_AUTHENTICATION_KEY_PROPERTY_ATTESTATION_RID: DWORD = 0x00000006;
1960 pub const SECURITY_PROCESS_TRUST_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 19];
1961 pub const SECURITY_PROCESS_TRUST_AUTHORITY_RID_COUNT: DWORD = 2;
1962 pub const SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID: DWORD = 0x00000400;
1963 pub const SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID: DWORD = 0x00000200;
1964 pub const SECURITY_PROCESS_PROTECTION_TYPE_NONE_RID: DWORD = 0x00000000;
1965 pub const SECURITY_PROCESS_PROTECTION_LEVEL_WINTCB_RID: DWORD = 0x00002000;
1966 pub const SECURITY_PROCESS_PROTECTION_LEVEL_WINDOWS_RID: DWORD = 0x00001000;
1967 pub const SECURITY_PROCESS_PROTECTION_LEVEL_APP_RID: DWORD = 0x00000800;
1968 pub const SECURITY_PROCESS_PROTECTION_LEVEL_NONE_RID: DWORD = 0x00000000;
1969 pub const SECURITY_TRUSTED_INSTALLER_RID1: DWORD = 95600888;
1970 pub const SECURITY_TRUSTED_INSTALLER_RID2: DWORD = 341852264;
1971 pub const SECURITY_TRUSTED_INSTALLER_RID3: DWORD = 183103804;
1972 pub const SECURITY_TRUSTED_INSTALLER_RID4: DWORD = 185329263;
1973 pub const SECURITY_TRUSTED_INSTALLER_RID5: DWORD = 227147846;
1974 ENUM!{enum WELL_KNOWN_SID_TYPE {
1975     WinNullSid = 0,
1976     WinWorldSid = 1,
1977     WinLocalSid = 2,
1978     WinCreatorOwnerSid = 3,
1979     WinCreatorGroupSid = 4,
1980     WinCreatorOwnerServerSid = 5,
1981     WinCreatorGroupServerSid = 6,
1982     WinNtAuthoritySid = 7,
1983     WinDialupSid = 8,
1984     WinNetworkSid = 9,
1985     WinBatchSid = 10,
1986     WinInteractiveSid = 11,
1987     WinServiceSid = 12,
1988     WinAnonymousSid = 13,
1989     WinProxySid = 14,
1990     WinEnterpriseControllersSid = 15,
1991     WinSelfSid = 16,
1992     WinAuthenticatedUserSid = 17,
1993     WinRestrictedCodeSid = 18,
1994     WinTerminalServerSid = 19,
1995     WinRemoteLogonIdSid = 20,
1996     WinLogonIdsSid = 21,
1997     WinLocalSystemSid = 22,
1998     WinLocalServiceSid = 23,
1999     WinNetworkServiceSid = 24,
2000     WinBuiltinDomainSid = 25,
2001     WinBuiltinAdministratorsSid = 26,
2002     WinBuiltinUsersSid = 27,
2003     WinBuiltinGuestsSid = 28,
2004     WinBuiltinPowerUsersSid = 29,
2005     WinBuiltinAccountOperatorsSid = 30,
2006     WinBuiltinSystemOperatorsSid = 31,
2007     WinBuiltinPrintOperatorsSid = 32,
2008     WinBuiltinBackupOperatorsSid = 33,
2009     WinBuiltinReplicatorSid = 34,
2010     WinBuiltinPreWindows2000CompatibleAccessSid = 35,
2011     WinBuiltinRemoteDesktopUsersSid = 36,
2012     WinBuiltinNetworkConfigurationOperatorsSid = 37,
2013     WinAccountAdministratorSid = 38,
2014     WinAccountGuestSid = 39,
2015     WinAccountKrbtgtSid = 40,
2016     WinAccountDomainAdminsSid = 41,
2017     WinAccountDomainUsersSid = 42,
2018     WinAccountDomainGuestsSid = 43,
2019     WinAccountComputersSid = 44,
2020     WinAccountControllersSid = 45,
2021     WinAccountCertAdminsSid = 46,
2022     WinAccountSchemaAdminsSid = 47,
2023     WinAccountEnterpriseAdminsSid = 48,
2024     WinAccountPolicyAdminsSid = 49,
2025     WinAccountRasAndIasServersSid = 50,
2026     WinNTLMAuthenticationSid = 51,
2027     WinDigestAuthenticationSid = 52,
2028     WinSChannelAuthenticationSid = 53,
2029     WinThisOrganizationSid = 54,
2030     WinOtherOrganizationSid = 55,
2031     WinBuiltinIncomingForestTrustBuildersSid = 56,
2032     WinBuiltinPerfMonitoringUsersSid = 57,
2033     WinBuiltinPerfLoggingUsersSid = 58,
2034     WinBuiltinAuthorizationAccessSid = 59,
2035     WinBuiltinTerminalServerLicenseServersSid = 60,
2036     WinBuiltinDCOMUsersSid = 61,
2037     WinBuiltinIUsersSid = 62,
2038     WinIUserSid = 63,
2039     WinBuiltinCryptoOperatorsSid = 64,
2040     WinUntrustedLabelSid = 65,
2041     WinLowLabelSid = 66,
2042     WinMediumLabelSid = 67,
2043     WinHighLabelSid = 68,
2044     WinSystemLabelSid = 69,
2045     WinWriteRestrictedCodeSid = 70,
2046     WinCreatorOwnerRightsSid = 71,
2047     WinCacheablePrincipalsGroupSid = 72,
2048     WinNonCacheablePrincipalsGroupSid = 73,
2049     WinEnterpriseReadonlyControllersSid = 74,
2050     WinAccountReadonlyControllersSid = 75,
2051     WinBuiltinEventLogReadersGroup = 76,
2052     WinNewEnterpriseReadonlyControllersSid = 77,
2053     WinBuiltinCertSvcDComAccessGroup = 78,
2054     WinMediumPlusLabelSid = 79,
2055     WinLocalLogonSid = 80,
2056     WinConsoleLogonSid = 81,
2057     WinThisOrganizationCertificateSid = 82,
2058     WinApplicationPackageAuthoritySid = 83,
2059     WinBuiltinAnyPackageSid = 84,
2060     WinCapabilityInternetClientSid = 85,
2061     WinCapabilityInternetClientServerSid = 86,
2062     WinCapabilityPrivateNetworkClientServerSid = 87,
2063     WinCapabilityPicturesLibrarySid = 88,
2064     WinCapabilityVideosLibrarySid = 89,
2065     WinCapabilityMusicLibrarySid = 90,
2066     WinCapabilityDocumentsLibrarySid = 91,
2067     WinCapabilitySharedUserCertificatesSid = 92,
2068     WinCapabilityEnterpriseAuthenticationSid = 93,
2069     WinCapabilityRemovableStorageSid = 94,
2070     WinBuiltinRDSRemoteAccessServersSid = 95,
2071     WinBuiltinRDSEndpointServersSid = 96,
2072     WinBuiltinRDSManagementServersSid = 97,
2073     WinUserModeDriversSid = 98,
2074     WinBuiltinHyperVAdminsSid = 99,
2075     WinAccountCloneableControllersSid = 100,
2076     WinBuiltinAccessControlAssistanceOperatorsSid = 101,
2077     WinBuiltinRemoteManagementUsersSid = 102,
2078     WinAuthenticationAuthorityAssertedSid = 103,
2079     WinAuthenticationServiceAssertedSid = 104,
2080     WinLocalAccountSid = 105,
2081     WinLocalAccountAndAdministratorSid = 106,
2082     WinAccountProtectedUsersSid = 107,
2083     WinCapabilityAppointmentsSid = 108,
2084     WinCapabilityContactsSid = 109,
2085     WinAccountDefaultSystemManagedSid = 110,
2086     WinBuiltinDefaultSystemManagedGroupSid = 111,
2087     WinBuiltinStorageReplicaAdminsSid = 112,
2088     WinAccountKeyAdminsSid = 113,
2089     WinAccountEnterpriseKeyAdminsSid = 114,
2090     WinAuthenticationKeyTrustSid = 115,
2091     WinAuthenticationKeyPropertyMFASid = 116,
2092     WinAuthenticationKeyPropertyAttestationSid = 117,
2093     WinAuthenticationFreshKeyAuthSid = 118,
2094 }}
2095 pub const SYSTEM_LUID: LUID = LUID { LowPart: 0x3e7, HighPart: 0x0 };
2096 pub const ANONYMOUS_LOGON_LUID: LUID = LUID { LowPart: 0x3e6, HighPart: 0x0 };
2097 pub const LOCALSERVICE_LUID: LUID = LUID { LowPart: 0x3e5, HighPart: 0x0 };
2098 pub const NETWORKSERVICE_LUID: LUID = LUID { LowPart: 0x3e4, HighPart: 0x0 };
2099 pub const IUSER_LUID: LUID = LUID { LowPart: 0x3e3, HighPart: 0x0 };
2100 pub const SE_GROUP_MANDATORY: DWORD = 0x00000001;
2101 pub const SE_GROUP_ENABLED_BY_DEFAULT: DWORD = 0x00000002;
2102 pub const SE_GROUP_ENABLED: DWORD = 0x00000004;
2103 pub const SE_GROUP_OWNER: DWORD = 0x00000008;
2104 pub const SE_GROUP_USE_FOR_DENY_ONLY: DWORD = 0x00000010;
2105 pub const SE_GROUP_INTEGRITY: DWORD = 0x00000020;
2106 pub const SE_GROUP_INTEGRITY_ENABLED: DWORD = 0x00000040;
2107 pub const SE_GROUP_LOGON_ID: DWORD = 0xC0000000;
2108 pub const SE_GROUP_RESOURCE: DWORD = 0x20000000;
2109 pub const SE_GROUP_VALID_ATTRIBUTES: DWORD = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT
2110     | SE_GROUP_ENABLED | SE_GROUP_OWNER | SE_GROUP_USE_FOR_DENY_ONLY | SE_GROUP_LOGON_ID
2111     | SE_GROUP_RESOURCE | SE_GROUP_INTEGRITY | SE_GROUP_INTEGRITY_ENABLED;
2112 pub const ACL_REVISION: BYTE = 2;
2113 pub const ACL_REVISION_DS: BYTE = 4;
2114 pub const ACL_REVISION1: BYTE = 1;
2115 pub const MIN_ACL_REVISION: BYTE = ACL_REVISION2;
2116 pub const ACL_REVISION2: BYTE = 2;
2117 pub const ACL_REVISION3: BYTE = 3;
2118 pub const ACL_REVISION4: BYTE = 4;
2119 pub const MAX_ACL_REVISION: BYTE = ACL_REVISION4;
2120 STRUCT!{struct ACL {
2121     AclRevision: BYTE,
2122     Sbz1: BYTE,
2123     AclSize: WORD,
2124     AceCount: WORD,
2125     Sbz2: WORD,
2126 }}
2127 pub type PACL = *mut ACL;
2128 STRUCT!{struct ACE_HEADER {
2129     AceType: BYTE,
2130     AceFlags: BYTE,
2131     AceSize: WORD,
2132 }}
2133 pub type PACE_HEADER = *mut ACE_HEADER;
2134 pub const ACCESS_MIN_MS_ACE_TYPE: BYTE = 0x0;
2135 pub const ACCESS_ALLOWED_ACE_TYPE: BYTE = 0x0;
2136 pub const ACCESS_DENIED_ACE_TYPE: BYTE = 0x1;
2137 pub const SYSTEM_AUDIT_ACE_TYPE: BYTE = 0x2;
2138 pub const SYSTEM_ALARM_ACE_TYPE: BYTE = 0x3;
2139 pub const ACCESS_MAX_MS_V2_ACE_TYPE: BYTE = 0x3;
2140 pub const ACCESS_ALLOWED_COMPOUND_ACE_TYPE: BYTE = 0x4;
2141 pub const ACCESS_MAX_MS_V3_ACE_TYPE: BYTE = 0x4;
2142 pub const ACCESS_MIN_MS_OBJECT_ACE_TYPE: BYTE = 0x5;
2143 pub const ACCESS_ALLOWED_OBJECT_ACE_TYPE: BYTE = 0x5;
2144 pub const ACCESS_DENIED_OBJECT_ACE_TYPE: BYTE = 0x6;
2145 pub const SYSTEM_AUDIT_OBJECT_ACE_TYPE: BYTE = 0x7;
2146 pub const SYSTEM_ALARM_OBJECT_ACE_TYPE: BYTE = 0x8;
2147 pub const ACCESS_MAX_MS_OBJECT_ACE_TYPE: BYTE = 0x8;
2148 pub const ACCESS_MAX_MS_V4_ACE_TYPE: BYTE = 0x8;
2149 pub const ACCESS_MAX_MS_ACE_TYPE: BYTE = 0x8;
2150 pub const ACCESS_ALLOWED_CALLBACK_ACE_TYPE: BYTE = 0x9;
2151 pub const ACCESS_DENIED_CALLBACK_ACE_TYPE: BYTE = 0xA;
2152 pub const ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE: BYTE = 0xB;
2153 pub const ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE: BYTE = 0xC;
2154 pub const SYSTEM_AUDIT_CALLBACK_ACE_TYPE: BYTE = 0xD;
2155 pub const SYSTEM_ALARM_CALLBACK_ACE_TYPE: BYTE = 0xE;
2156 pub const SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE: BYTE = 0xF;
2157 pub const SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE: BYTE = 0x10;
2158 pub const SYSTEM_MANDATORY_LABEL_ACE_TYPE: BYTE = 0x11;
2159 pub const SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE: BYTE = 0x12;
2160 pub const SYSTEM_SCOPED_POLICY_ID_ACE_TYPE: BYTE = 0x13;
2161 pub const SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE: BYTE = 0x14;
2162 pub const SYSTEM_ACCESS_FILTER_ACE_TYPE: BYTE = 0x15;
2163 pub const ACCESS_MAX_MS_V5_ACE_TYPE: BYTE = 0x15;
2164 pub const OBJECT_INHERIT_ACE: BYTE = 0x1;
2165 pub const CONTAINER_INHERIT_ACE: BYTE = 0x2;
2166 pub const NO_PROPAGATE_INHERIT_ACE: BYTE = 0x4;
2167 pub const INHERIT_ONLY_ACE: BYTE = 0x8;
2168 pub const INHERITED_ACE: BYTE = 0x10;
2169 pub const VALID_INHERIT_FLAGS: BYTE = 0x1F;
2170 pub const SUCCESSFUL_ACCESS_ACE_FLAG: BYTE = 0x40;
2171 pub const FAILED_ACCESS_ACE_FLAG: BYTE = 0x80;
2172 pub const TRUST_PROTECTED_FILTER_ACE_FLAG: BYTE = 0x40;
2173 STRUCT!{struct ACCESS_ALLOWED_ACE {
2174     Header: ACE_HEADER,
2175     Mask: ACCESS_MASK,
2176     SidStart: DWORD,
2177 }}
2178 pub type PACCESS_ALLOWED_ACE = *mut ACCESS_ALLOWED_ACE;
2179 STRUCT!{struct ACCESS_DENIED_ACE {
2180     Header: ACE_HEADER,
2181     Mask: ACCESS_MASK,
2182     SidStart: DWORD,
2183 }}
2184 pub type PACCESS_DENIED_ACE = *mut ACCESS_DENIED_ACE;
2185 STRUCT!{struct SYSTEM_AUDIT_ACE {
2186     Header: ACE_HEADER,
2187     Mask: ACCESS_MASK,
2188     SidStart: DWORD,
2189 }}
2190 pub type PSYSTEM_AUDIT_ACE = *mut SYSTEM_AUDIT_ACE;
2191 STRUCT!{struct SYSTEM_ALARM_ACE {
2192     Header: ACE_HEADER,
2193     Mask: ACCESS_MASK,
2194     SidStart: DWORD,
2195 }}
2196 pub type PSYSTEM_ALARM_ACE = *mut SYSTEM_ALARM_ACE;
2197 STRUCT!{struct SYSTEM_RESOURCE_ATTRIBUTE_ACE {
2198     Header: ACE_HEADER,
2199     Mask: ACCESS_MASK,
2200     SidStart: DWORD,
2201 }}
2202 pub type PSYSTEM_RESOURCE_ATTRIBUTE_ACE = *mut SYSTEM_RESOURCE_ATTRIBUTE_ACE;
2203 STRUCT!{struct SYSTEM_SCOPED_POLICY_ID_ACE {
2204     Header: ACE_HEADER,
2205     Mask: ACCESS_MASK,
2206     SidStart: DWORD,
2207 }}
2208 pub type PSYSTEM_SCOPED_POLICY_ID_ACE = *mut SYSTEM_SCOPED_POLICY_ID_ACE;
2209 STRUCT!{struct SYSTEM_MANDATORY_LABEL_ACE {
2210     Header: ACE_HEADER,
2211     Mask: ACCESS_MASK,
2212     SidStart: DWORD,
2213 }}
2214 pub type PSYSTEM_MANDATORY_LABEL_ACE = *mut SYSTEM_MANDATORY_LABEL_ACE;
2215 STRUCT!{struct SYSTEM_PROCESS_TRUST_LABEL_ACE {
2216     Header: ACE_HEADER,
2217     Mask: ACCESS_MASK,
2218     SidStart: DWORD,
2219 }}
2220 pub type PSYSTEM_PROCESS_TRUST_LABEL_ACE = *mut SYSTEM_PROCESS_TRUST_LABEL_ACE;
2221 STRUCT!{struct SYSTEM_ACCESS_FILTER_ACE {
2222     Header: ACE_HEADER,
2223     Mask: ACCESS_MASK,
2224     SidStart: DWORD,
2225 }}
2226 pub type PSYSTEM_ACCESS_FILTER_ACE = *mut SYSTEM_ACCESS_FILTER_ACE;
2227 pub const SYSTEM_MANDATORY_LABEL_NO_WRITE_UP: ACCESS_MASK = 0x1;
2228 pub const SYSTEM_MANDATORY_LABEL_NO_READ_UP: ACCESS_MASK = 0x2;
2229 pub const SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP: ACCESS_MASK = 0x4;
2230 pub const SYSTEM_MANDATORY_LABEL_VALID_MASK: ACCESS_MASK = SYSTEM_MANDATORY_LABEL_NO_WRITE_UP
2231     | SYSTEM_MANDATORY_LABEL_NO_READ_UP | SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP;
2232 pub const SYSTEM_PROCESS_TRUST_LABEL_VALID_MASK: ACCESS_MASK = 0x00ffffff;
2233 pub const SYSTEM_PROCESS_TRUST_NOCONSTRAINT_MASK: ACCESS_MASK = 0xffffffff;
2234 pub const SYSTEM_ACCESS_FILTER_VALID_MASK: ACCESS_MASK = 0x00ffffff;
2235 pub const SYSTEM_ACCESS_FILTER_NOCONSTRAINT_MASK: ACCESS_MASK = 0xffffffff;
2236 STRUCT!{struct ACCESS_ALLOWED_OBJECT_ACE {
2237     Header: ACE_HEADER,
2238     Mask: ACCESS_MASK,
2239     Flags: DWORD,
2240     ObjectType: GUID,
2241     InheritedObjectType: GUID,
2242     SidStart: DWORD,
2243 }}
2244 pub type PACCESS_ALLOWED_OBJECT_ACE = *mut ACCESS_ALLOWED_OBJECT_ACE;
2245 STRUCT!{struct ACCESS_DENIED_OBJECT_ACE {
2246     Header: ACE_HEADER,
2247     Mask: ACCESS_MASK,
2248     Flags: DWORD,
2249     ObjectType: GUID,
2250     InheritedObjectType: GUID,
2251     SidStart: DWORD,
2252 }}
2253 pub type PACCESS_DENIED_OBJECT_ACE = *mut ACCESS_DENIED_OBJECT_ACE;
2254 STRUCT!{struct SYSTEM_AUDIT_OBJECT_ACE {
2255     Header: ACE_HEADER,
2256     Mask: ACCESS_MASK,
2257     Flags: DWORD,
2258     ObjectType: GUID,
2259     InheritedObjectType: GUID,
2260     SidStart: DWORD,
2261 }}
2262 pub type PSYSTEM_AUDIT_OBJECT_ACE = *mut SYSTEM_AUDIT_OBJECT_ACE;
2263 STRUCT!{struct SYSTEM_ALARM_OBJECT_ACE {
2264     Header: ACE_HEADER,
2265     Mask: ACCESS_MASK,
2266     Flags: DWORD,
2267     ObjectType: GUID,
2268     InheritedObjectType: GUID,
2269     SidStart: DWORD,
2270 }}
2271 pub type PSYSTEM_ALARM_OBJECT_ACE = *mut SYSTEM_ALARM_OBJECT_ACE;
2272 STRUCT!{struct ACCESS_ALLOWED_CALLBACK_ACE {
2273     Header: ACE_HEADER,
2274     Mask: ACCESS_MASK,
2275     SidStart: DWORD,
2276 }}
2277 pub type PACCESS_ALLOWED_CALLBACK_ACE = *mut ACCESS_ALLOWED_CALLBACK_ACE;
2278 STRUCT!{struct ACCESS_DENIED_CALLBACK_ACE {
2279     Header: ACE_HEADER,
2280     Mask: ACCESS_MASK,
2281     SidStart: DWORD,
2282 }}
2283 pub type PACCESS_DENIED_CALLBACK_ACE = *mut ACCESS_DENIED_CALLBACK_ACE;
2284 STRUCT!{struct SYSTEM_AUDIT_CALLBACK_ACE {
2285     Header: ACE_HEADER,
2286     Mask: ACCESS_MASK,
2287     SidStart: DWORD,
2288 }}
2289 pub type PSYSTEM_AUDIT_CALLBACK_ACE = *mut SYSTEM_AUDIT_CALLBACK_ACE;
2290 STRUCT!{struct SYSTEM_ALARM_CALLBACK_ACE {
2291     Header: ACE_HEADER,
2292     Mask: ACCESS_MASK,
2293     SidStart: DWORD,
2294 }}
2295 pub type PSYSTEM_ALARM_CALLBACK_ACE = *mut SYSTEM_ALARM_CALLBACK_ACE;
2296 STRUCT!{struct ACCESS_ALLOWED_CALLBACK_OBJECT_ACE {
2297     Header: ACE_HEADER,
2298     Mask: ACCESS_MASK,
2299     Flags: DWORD,
2300     ObjectType: GUID,
2301     InheritedObjectType: GUID,
2302     SidStart: DWORD,
2303 }}
2304 pub type PACCESS_ALLOWED_CALLBACK_OBJECT_ACE = *mut ACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
2305 STRUCT!{struct ACCESS_DENIED_CALLBACK_OBJECT_ACE {
2306     Header: ACE_HEADER,
2307     Mask: ACCESS_MASK,
2308     Flags: DWORD,
2309     ObjectType: GUID,
2310     InheritedObjectType: GUID,
2311     SidStart: DWORD,
2312 }}
2313 pub type PACCESS_DENIED_CALLBACK_OBJECT_ACE = *mut ACCESS_DENIED_CALLBACK_OBJECT_ACE;
2314 STRUCT!{struct SYSTEM_AUDIT_CALLBACK_OBJECT_ACE {
2315     Header: ACE_HEADER,
2316     Mask: ACCESS_MASK,
2317     Flags: DWORD,
2318     ObjectType: GUID,
2319     InheritedObjectType: GUID,
2320     SidStart: DWORD,
2321 }}
2322 pub type PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE = *mut SYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
2323 STRUCT!{struct SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
2324     Header: ACE_HEADER,
2325     Mask: ACCESS_MASK,
2326     Flags: DWORD,
2327     ObjectType: GUID,
2328     InheritedObjectType: GUID,
2329     SidStart: DWORD,
2330 }}
2331 pub type PSYSTEM_ALARM_CALLBACK_OBJECT_ACE = *mut SYSTEM_ALARM_CALLBACK_OBJECT_ACE;
2332 pub const ACE_OBJECT_TYPE_PRESENT: DWORD = 0x1;
2333 pub const ACE_INHERITED_OBJECT_TYPE_PRESENT: DWORD = 0x2;
2334 ENUM!{enum ACL_INFORMATION_CLASS {
2335     AclRevisionInformation = 1,
2336     AclSizeInformation,
2337 }}
2338 STRUCT!{struct ACL_REVISION_INFORMATION {
2339     AclRevision: DWORD,
2340 }}
2341 pub type PACL_REVISION_INFORMATION = *mut ACL_REVISION_INFORMATION;
2342 STRUCT!{struct ACL_SIZE_INFORMATION {
2343     AceCount: DWORD,
2344     AclBytesInUse: DWORD,
2345     AclBytesFree: DWORD,
2346 }}
2347 pub type PACL_SIZE_INFORMATION = *mut ACL_SIZE_INFORMATION;
2348 pub const SECURITY_DESCRIPTOR_REVISION: DWORD = 1;
2349 pub const SECURITY_DESCRIPTOR_REVISION1: DWORD = 1;
2350 #[cfg(target_pointer_width = "64")]
2351 pub const SECURITY_DESCRIPTOR_MIN_LENGTH: usize = 40;
2352 #[cfg(target_pointer_width = "32")]
2353 pub const SECURITY_DESCRIPTOR_MIN_LENGTH: usize = 20;
2354 pub type SECURITY_DESCRIPTOR_CONTROL = WORD;
2355 pub type PSECURITY_DESCRIPTOR_CONTROL = *mut WORD;
2356 pub const SE_OWNER_DEFAULTED: SECURITY_DESCRIPTOR_CONTROL = 0x0001;
2357 pub const SE_GROUP_DEFAULTED: SECURITY_DESCRIPTOR_CONTROL = 0x0002;
2358 pub const SE_DACL_PRESENT: SECURITY_DESCRIPTOR_CONTROL = 0x0004;
2359 pub const SE_DACL_DEFAULTED: SECURITY_DESCRIPTOR_CONTROL = 0x0008;
2360 pub const SE_SACL_PRESENT: SECURITY_DESCRIPTOR_CONTROL = 0x0010;
2361 pub const SE_SACL_DEFAULTED: SECURITY_DESCRIPTOR_CONTROL = 0x0020;
2362 pub const SE_DACL_AUTO_INHERIT_REQ: SECURITY_DESCRIPTOR_CONTROL = 0x0100;
2363 pub const SE_SACL_AUTO_INHERIT_REQ: SECURITY_DESCRIPTOR_CONTROL = 0x0200;
2364 pub const SE_DACL_AUTO_INHERITED: SECURITY_DESCRIPTOR_CONTROL = 0x0400;
2365 pub const SE_SACL_AUTO_INHERITED: SECURITY_DESCRIPTOR_CONTROL = 0x0800;
2366 pub const SE_DACL_PROTECTED: SECURITY_DESCRIPTOR_CONTROL = 0x1000;
2367 pub const SE_SACL_PROTECTED: SECURITY_DESCRIPTOR_CONTROL = 0x2000;
2368 pub const SE_RM_CONTROL_VALID: SECURITY_DESCRIPTOR_CONTROL = 0x4000;
2369 pub const SE_SELF_RELATIVE: SECURITY_DESCRIPTOR_CONTROL = 0x8000;
2370 STRUCT!{struct SECURITY_DESCRIPTOR_RELATIVE {
2371     Revision: BYTE,
2372     Sbz1: BYTE,
2373     Control: SECURITY_DESCRIPTOR_CONTROL,
2374     Owner: DWORD,
2375     Group: DWORD,
2376     Sacl: DWORD,
2377     Dacl: DWORD,
2378 }}
2379 pub type PISECURITY_DESCRIPTOR_RELATIVE = *mut SECURITY_DESCRIPTOR_RELATIVE;
2380 STRUCT!{struct SECURITY_DESCRIPTOR {
2381     Revision: BYTE,
2382     Sbz1: BYTE,
2383     Control: SECURITY_DESCRIPTOR_CONTROL,
2384     Owner: PSID,
2385     Group: PSID,
2386     Sacl: PACL,
2387     Dacl: PACL,
2388 }}
2389 pub type PISECURITY_DESCRIPTOR = *mut SECURITY_DESCRIPTOR;
2390 STRUCT!{struct SECURITY_OBJECT_AI_PARAMS {
2391     Size: DWORD,
2392     ConstraintMask: DWORD,
2393 }}
2394 pub type PSECURITY_OBJECT_AI_PARAMS = *mut SECURITY_OBJECT_AI_PARAMS;
2395 STRUCT!{struct OBJECT_TYPE_LIST {
2396     Level: WORD,
2397     Sbz: WORD,
2398     ObjectType: *mut GUID,
2399 }}
2400 pub type POBJECT_TYPE_LIST = *mut OBJECT_TYPE_LIST;
2401 pub const ACCESS_OBJECT_GUID: WORD = 0;
2402 pub const ACCESS_PROPERTY_SET_GUID: WORD = 1;
2403 pub const ACCESS_PROPERTY_GUID: WORD = 2;
2404 pub const ACCESS_MAX_LEVEL: WORD = 4;
2405 ENUM!{enum AUDIT_EVENT_TYPE {
2406     AuditEventObjectAccess,
2407     AuditEventDirectoryServiceAccess,
2408 }}
2409 pub const AUDIT_ALLOW_NO_PRIVILEGE: DWORD = 0x1;
2410 pub const ACCESS_DS_SOURCE: &'static str = "DS";
2411 pub const ACCESS_DS_OBJECT_TYPE_NAME: &'static str = "Directory Service Object";
2412 pub const SE_PRIVILEGE_ENABLED_BY_DEFAULT: DWORD = 0x00000001;
2413 pub const SE_PRIVILEGE_ENABLED: DWORD = 0x00000002;
2414 pub const SE_PRIVILEGE_REMOVED: DWORD = 0x00000004;
2415 pub const SE_PRIVILEGE_USED_FOR_ACCESS: DWORD = 0x80000000;
2416 pub const SE_PRIVILEGE_VALID_ATTRIBUTES: DWORD = SE_PRIVILEGE_ENABLED_BY_DEFAULT
2417     | SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_REMOVED | SE_PRIVILEGE_USED_FOR_ACCESS;
2418 pub const PRIVILEGE_SET_ALL_NECESSARY: DWORD = 1;
2419 STRUCT!{struct PRIVILEGE_SET {
2420     PrivilegeCount: DWORD,
2421     Control: DWORD,
2422     Privilege: [LUID_AND_ATTRIBUTES; ANYSIZE_ARRAY],
2423 }}
2424 pub type PPRIVILEGE_SET = *mut PRIVILEGE_SET;
2425 pub const ACCESS_REASON_TYPE_MASK: ACCESS_REASON = 0x00ff0000;
2426 pub const ACCESS_REASON_DATA_MASK: ACCESS_REASON = 0x0000ffff;
2427 pub const ACCESS_REASON_STAGING_MASK: ACCESS_REASON = 0x80000000;
2428 pub const ACCESS_REASON_EXDATA_MASK: ACCESS_REASON = 0x7f000000;
2429 ENUM!{enum ACCESS_REASON_TYPE {
2430     AccessReasonNone = 0x00000000,
2431     AccessReasonAllowedAce = 0x00010000,
2432     AccessReasonDeniedAce = 0x00020000,
2433     AccessReasonAllowedParentAce = 0x00030000,
2434     AccessReasonDeniedParentAce = 0x00040000,
2435     AccessReasonNotGrantedByCape = 0x00050000,
2436     AccessReasonNotGrantedByParentCape = 0x00060000,
2437     AccessReasonNotGrantedToAppContainer = 0x00070000,
2438     AccessReasonMissingPrivilege = 0x00100000,
2439     AccessReasonFromPrivilege = 0x00200000,
2440     AccessReasonIntegrityLevel = 0x00300000,
2441     AccessReasonOwnership = 0x00400000,
2442     AccessReasonNullDacl = 0x00500000,
2443     AccessReasonEmptyDacl = 0x00600000,
2444     AccessReasonNoSD = 0x00700000,
2445     AccessReasonNoGrant = 0x00800000,
2446     AccessReasonTrustLabel = 0x00900000,
2447     AccessReasonFilterAce = 0x00a00000,
2448 }}
2449 pub type ACCESS_REASON = DWORD;
2450 STRUCT!{struct ACCESS_REASONS {
2451     Data: [ACCESS_REASON; 32],
2452 }}
2453 pub type PACCESS_REASONS = *mut ACCESS_REASONS;
2454 pub const SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE: DWORD = 0x00000001;
2455 pub const SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE: DWORD = 0x00000002;
2456 pub const SE_SECURITY_DESCRIPTOR_FLAG_NO_ACCESS_FILTER_ACE: DWORD = 0x00000004;
2457 pub const SE_SECURITY_DESCRIPTOR_VALID_FLAGS: DWORD = 0x00000007;
2458 STRUCT!{struct SE_SECURITY_DESCRIPTOR {
2459     Size: DWORD,
2460     Flags: DWORD,
2461     SecurityDescriptor: PSECURITY_DESCRIPTOR,
2462 }}
2463 pub type PSE_SECURITY_DESCRIPTOR = *mut SE_SECURITY_DESCRIPTOR;
2464 STRUCT!{struct SE_ACCESS_REQUEST {
2465     Size: DWORD,
2466     SeSecurityDescriptor: PSE_SECURITY_DESCRIPTOR,
2467     DesiredAccess: ACCESS_MASK,
2468     PreviouslyGrantedAccess: ACCESS_MASK,
2469     PrincipalSelfSid: PSID,
2470     GenericMapping: PGENERIC_MAPPING,
2471     ObjectTypeListCount: DWORD,
2472     ObjectTypeList: POBJECT_TYPE_LIST,
2473 }}
2474 pub type PSE_ACCESS_REQUEST = *mut SE_ACCESS_REQUEST;
2475 STRUCT!{struct SE_ACCESS_REPLY {
2476     Size: DWORD,
2477     ResultListCount: DWORD,
2478     GrantedAccess: PACCESS_MASK,
2479     AccessStatus: PDWORD,
2480     AccessReason: PACCESS_REASONS,
2481     Privileges: *mut PPRIVILEGE_SET,
2482 }}
2483 pub type PSE_ACCESS_REPLY = *mut SE_ACCESS_REPLY;
2484 pub const SE_CREATE_TOKEN_NAME: &'static str = "SeCreateTokenPrivilege";
2485 pub const SE_ASSIGNPRIMARYTOKEN_NAME: &'static str = "SeAssignPrimaryTokenPrivilege";
2486 pub const SE_LOCK_MEMORY_NAME: &'static str = "SeLockMemoryPrivilege";
2487 pub const SE_INCREASE_QUOTA_NAME: &'static str = "SeIncreaseQuotaPrivilege";
2488 pub const SE_UNSOLICITED_INPUT_NAME: &'static str = "SeUnsolicitedInputPrivilege";
2489 pub const SE_MACHINE_ACCOUNT_NAME: &'static str = "SeMachineAccountPrivilege";
2490 pub const SE_TCB_NAME: &'static str = "SeTcbPrivilege";
2491 pub const SE_SECURITY_NAME: &'static str = "SeSecurityPrivilege";
2492 pub const SE_TAKE_OWNERSHIP_NAME: &'static str = "SeTakeOwnershipPrivilege";
2493 pub const SE_LOAD_DRIVER_NAME: &'static str = "SeLoadDriverPrivilege";
2494 pub const SE_SYSTEM_PROFILE_NAME: &'static str = "SeSystemProfilePrivilege";
2495 pub const SE_SYSTEMTIME_NAME: &'static str = "SeSystemtimePrivilege";
2496 pub const SE_PROF_SINGLE_PROCESS_NAME: &'static str = "SeProfileSingleProcessPrivilege";
2497 pub const SE_INC_BASE_PRIORITY_NAME: &'static str = "SeIncreaseBasePriorityPrivilege";
2498 pub const SE_CREATE_PAGEFILE_NAME: &'static str = "SeCreatePagefilePrivilege";
2499 pub const SE_CREATE_PERMANENT_NAME: &'static str = "SeCreatePermanentPrivilege";
2500 pub const SE_BACKUP_NAME: &'static str = "SeBackupPrivilege";
2501 pub const SE_RESTORE_NAME: &'static str = "SeRestorePrivilege";
2502 pub const SE_SHUTDOWN_NAME: &'static str = "SeShutdownPrivilege";
2503 pub const SE_DEBUG_NAME: &'static str = "SeDebugPrivilege";
2504 pub const SE_AUDIT_NAME: &'static str = "SeAuditPrivilege";
2505 pub const SE_SYSTEM_ENVIRONMENT_NAME: &'static str = "SeSystemEnvironmentPrivilege";
2506 pub const SE_CHANGE_NOTIFY_NAME: &'static str = "SeChangeNotifyPrivilege";
2507 pub const SE_REMOTE_SHUTDOWN_NAME: &'static str = "SeRemoteShutdownPrivilege";
2508 pub const SE_UNDOCK_NAME: &'static str = "SeUndockPrivilege";
2509 pub const SE_SYNC_AGENT_NAME: &'static str = "SeSyncAgentPrivilege";
2510 pub const SE_ENABLE_DELEGATION_NAME: &'static str = "SeEnableDelegationPrivilege";
2511 pub const SE_MANAGE_VOLUME_NAME: &'static str = "SeManageVolumePrivilege";
2512 pub const SE_IMPERSONATE_NAME: &'static str = "SeImpersonatePrivilege";
2513 pub const SE_CREATE_GLOBAL_NAME: &'static str = "SeCreateGlobalPrivilege";
2514 pub const SE_TRUSTED_CREDMAN_ACCESS_NAME: &'static str = "SeTrustedCredManAccessPrivilege";
2515 pub const SE_RELABEL_NAME: &'static str = "SeRelabelPrivilege";
2516 pub const SE_INC_WORKING_SET_NAME: &'static str = "SeIncreaseWorkingSetPrivilege";
2517 pub const SE_TIME_ZONE_NAME: &'static str = "SeTimeZonePrivilege";
2518 pub const SE_CREATE_SYMBOLIC_LINK_NAME: &'static str = "SeCreateSymbolicLinkPrivilege";
2519 pub const SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME: &'static str
2520     = "SeDelegateSessionUserImpersonatePrivilege";
2521 pub const SE_ACTIVATE_AS_USER_CAPABILITY: &'static str = "activateAsUser";
2522 pub const SE_CONSTRAINED_IMPERSONATION_CAPABILITY: &'static str = "constrainedImpersonation";
2523 pub const SE_SESSION_IMPERSONATION_CAPABILITY: &'static str = "sessionImpersonation";
2524 pub const SE_MUMA_CAPABILITY: &'static str = "muma";
2525 pub const SE_DEVELOPMENT_MODE_NETWORK_CAPABILITY: &'static str = "developmentModeNetwork";
2526 ENUM!{enum SECURITY_IMPERSONATION_LEVEL {
2527     SecurityAnonymous,
2528     SecurityIdentification,
2529     SecurityImpersonation,
2530     SecurityDelegation,
2531 }}
2532 pub type PSECURITY_IMPERSONATION_LEVEL = *mut SECURITY_IMPERSONATION_LEVEL;
2533 pub const SECURITY_MAX_IMPERSONATION_LEVEL: SECURITY_IMPERSONATION_LEVEL = SecurityDelegation;
2534 pub const SECURITY_MIN_IMPERSONATION_LEVEL: SECURITY_IMPERSONATION_LEVEL = SecurityAnonymous;
2535 pub const DEFAULT_IMPERSONATION_LEVEL: SECURITY_IMPERSONATION_LEVEL = SecurityImpersonation;
2536 #[inline]
VALID_IMPERSONATION_LEVEL(L: SECURITY_IMPERSONATION_LEVEL) -> bool2537 pub fn VALID_IMPERSONATION_LEVEL(L: SECURITY_IMPERSONATION_LEVEL) -> bool {
2538     (L >= SECURITY_MIN_IMPERSONATION_LEVEL) && (L <= SECURITY_MAX_IMPERSONATION_LEVEL)
2539 }
2540 pub const TOKEN_ASSIGN_PRIMARY: DWORD = 0x0001;
2541 pub const TOKEN_DUPLICATE: DWORD = 0x0002;
2542 pub const TOKEN_IMPERSONATE: DWORD = 0x0004;
2543 pub const TOKEN_QUERY: DWORD = 0x0008;
2544 pub const TOKEN_QUERY_SOURCE: DWORD = 0x0010;
2545 pub const TOKEN_ADJUST_PRIVILEGES: DWORD = 0x0020;
2546 pub const TOKEN_ADJUST_GROUPS: DWORD = 0x0040;
2547 pub const TOKEN_ADJUST_DEFAULT: DWORD = 0x0080;
2548 pub const TOKEN_ADJUST_SESSIONID: DWORD = 0x0100;
2549 pub const TOKEN_ALL_ACCESS_P: DWORD = STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY
2550     | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE
2551     | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT;
2552 pub const TOKEN_ALL_ACCESS: DWORD = TOKEN_ALL_ACCESS_P | TOKEN_ADJUST_SESSIONID;
2553 pub const TOKEN_READ: DWORD = STANDARD_RIGHTS_READ | TOKEN_QUERY;
2554 pub const TOKEN_WRITE: DWORD = STANDARD_RIGHTS_WRITE | TOKEN_ADJUST_PRIVILEGES
2555     | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT;
2556 pub const TOKEN_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE;
2557 pub const TOKEN_TRUST_CONSTRAINT_MASK: DWORD = STANDARD_RIGHTS_READ | TOKEN_QUERY
2558     | TOKEN_QUERY_SOURCE;
2559 pub const TOKEN_ACCESS_PSEUDO_HANDLE_WIN8: DWORD = TOKEN_QUERY | TOKEN_QUERY_SOURCE;
2560 pub const TOKEN_ACCESS_PSEUDO_HANDLE: DWORD = TOKEN_ACCESS_PSEUDO_HANDLE_WIN8;
2561 ENUM!{enum TOKEN_TYPE {
2562     TokenPrimary = 1,
2563     TokenImpersonation,
2564 }}
2565 pub type PTOKEN_TYPE = *mut TOKEN_TYPE;
2566 ENUM!{enum TOKEN_ELEVATION_TYPE {
2567     TokenElevationTypeDefault = 1,
2568     TokenElevationTypeFull,
2569     TokenElevationTypeLimited,
2570 }}
2571 pub type PTOKEN_ELEVATION_TYPE = *mut TOKEN_ELEVATION_TYPE;
2572 ENUM!{enum TOKEN_INFORMATION_CLASS {
2573     TokenUser = 1,
2574     TokenGroups,
2575     TokenPrivileges,
2576     TokenOwner,
2577     TokenPrimaryGroup,
2578     TokenDefaultDacl,
2579     TokenSource,
2580     TokenType,
2581     TokenImpersonationLevel,
2582     TokenStatistics,
2583     TokenRestrictedSids,
2584     TokenSessionId,
2585     TokenGroupsAndPrivileges,
2586     TokenSessionReference,
2587     TokenSandBoxInert,
2588     TokenAuditPolicy,
2589     TokenOrigin,
2590     TokenElevationType,
2591     TokenLinkedToken,
2592     TokenElevation,
2593     TokenHasRestrictions,
2594     TokenAccessInformation,
2595     TokenVirtualizationAllowed,
2596     TokenVirtualizationEnabled,
2597     TokenIntegrityLevel,
2598     TokenUIAccess,
2599     TokenMandatoryPolicy,
2600     TokenLogonSid,
2601     TokenIsAppContainer,
2602     TokenCapabilities,
2603     TokenAppContainerSid,
2604     TokenAppContainerNumber,
2605     TokenUserClaimAttributes,
2606     TokenDeviceClaimAttributes,
2607     TokenRestrictedUserClaimAttributes,
2608     TokenRestrictedDeviceClaimAttributes,
2609     TokenDeviceGroups,
2610     TokenRestrictedDeviceGroups,
2611     TokenSecurityAttributes,
2612     TokenIsRestricted,
2613     TokenProcessTrustLevel,
2614     TokenPrivateNameSpace,
2615     TokenSingletonAttributes,
2616     TokenBnoIsolation,
2617     MaxTokenInfoClass,
2618 }}
2619 pub type PTOKEN_INFORMATION_CLASS = *mut TOKEN_INFORMATION_CLASS;
2620 STRUCT!{struct TOKEN_USER {
2621     User: SID_AND_ATTRIBUTES,
2622 }}
2623 pub type PTOKEN_USER = *mut TOKEN_USER;
2624 UNION!{union SE_TOKEN_USER_u1 {
2625     [usize; 2],
2626     TokenUser TokenUser_mut: TOKEN_USER,
2627     User User_mut: SID_AND_ATTRIBUTES,
2628 }}
2629 UNION!{union SE_TOKEN_USER_u2 {
2630     [u32; 17],
2631     Sid Sid_mut: SID,
2632     Buffer Buffer_mut: [BYTE; SECURITY_MAX_SID_SIZE],
2633 }}
2634 STRUCT!{struct SE_TOKEN_USER {
2635     u1: SE_TOKEN_USER_u1,
2636     u2: SE_TOKEN_USER_u2,
2637 }}
2638 pub type PSE_TOKEN_USER = *mut SE_TOKEN_USER;
2639 STRUCT!{struct TOKEN_GROUPS {
2640     GroupCount: DWORD,
2641     Groups: [SID_AND_ATTRIBUTES; ANYSIZE_ARRAY],
2642 }}
2643 pub type PTOKEN_GROUPS = *mut TOKEN_GROUPS;
2644 STRUCT!{struct TOKEN_PRIVILEGES {
2645     PrivilegeCount: DWORD,
2646     Privileges: [LUID_AND_ATTRIBUTES; ANYSIZE_ARRAY],
2647 }}
2648 pub type PTOKEN_PRIVILEGES = *mut TOKEN_PRIVILEGES;
2649 STRUCT!{struct TOKEN_OWNER {
2650     Owner: PSID,
2651 }}
2652 pub type PTOKEN_OWNER = *mut TOKEN_OWNER;
2653 STRUCT!{struct TOKEN_PRIMARY_GROUP {
2654     PrimaryGroup: PSID,
2655 }}
2656 pub type PTOKEN_PRIMARY_GROUP = *mut TOKEN_PRIMARY_GROUP;
2657 STRUCT!{struct TOKEN_DEFAULT_DACL {
2658     DefaultDacl: PACL,
2659 }}
2660 pub type PTOKEN_DEFAULT_DACL = *mut TOKEN_DEFAULT_DACL;
2661 STRUCT!{struct TOKEN_USER_CLAIMS {
2662     UserClaims: PCLAIMS_BLOB,
2663 }}
2664 pub type PTOKEN_USER_CLAIMS = *mut TOKEN_USER_CLAIMS;
2665 STRUCT!{struct TOKEN_DEVICE_CLAIMS {
2666     DeviceClaims: PCLAIMS_BLOB,
2667 }}
2668 pub type PTOKEN_DEVICE_CLAIMS = *mut TOKEN_DEVICE_CLAIMS;
2669 STRUCT!{struct TOKEN_GROUPS_AND_PRIVILEGES {
2670     SidCount: DWORD,
2671     SidLength: DWORD,
2672     Sids: PSID_AND_ATTRIBUTES,
2673     RestrictedSidCount: DWORD,
2674     RestrictedSidLength: DWORD,
2675     RestrictedSids: PSID_AND_ATTRIBUTES,
2676     PrivilegeCount: DWORD,
2677     PrivilegeLength: DWORD,
2678     Privileges: PLUID_AND_ATTRIBUTES,
2679     AuthenticationId: LUID,
2680 }}
2681 pub type PTOKEN_GROUPS_AND_PRIVILEGES = *mut TOKEN_GROUPS_AND_PRIVILEGES;
2682 STRUCT!{struct TOKEN_LINKED_TOKEN {
2683     LinkedToken: HANDLE,
2684 }}
2685 pub type PTOKEN_LINKED_TOKEN = *mut TOKEN_LINKED_TOKEN;
2686 STRUCT!{struct TOKEN_ELEVATION {
2687     TokenIsElevated: DWORD,
2688 }}
2689 pub type PTOKEN_ELEVATION = *mut TOKEN_ELEVATION;
2690 STRUCT!{struct TOKEN_MANDATORY_LABEL {
2691     Label: SID_AND_ATTRIBUTES,
2692 }}
2693 pub type PTOKEN_MANDATORY_LABEL = *mut TOKEN_MANDATORY_LABEL;
2694 pub const TOKEN_MANDATORY_POLICY_OFF: DWORD = 0x0;
2695 pub const TOKEN_MANDATORY_POLICY_NO_WRITE_UP: DWORD = 0x1;
2696 pub const TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN: DWORD = 0x2;
2697 pub const TOKEN_MANDATORY_POLICY_VALID_MASK: DWORD = TOKEN_MANDATORY_POLICY_NO_WRITE_UP
2698     | TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN;
2699 STRUCT!{struct TOKEN_MANDATORY_POLICY {
2700     Policy: DWORD,
2701 }}
2702 pub type PTOKEN_MANDATORY_POLICY = *mut TOKEN_MANDATORY_POLICY;
2703 pub type PSECURITY_ATTRIBUTES_OPAQUE = PVOID;
2704 STRUCT!{struct TOKEN_ACCESS_INFORMATION {
2705     SidHash: PSID_AND_ATTRIBUTES_HASH,
2706     RestrictedSidHash: PSID_AND_ATTRIBUTES_HASH,
2707     Privileges: PTOKEN_PRIVILEGES,
2708     AuthenticationId: LUID,
2709     TokenType: TOKEN_TYPE,
2710     ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL,
2711     MandatoryPolicy: TOKEN_MANDATORY_POLICY,
2712     Flags: DWORD,
2713     AppContainerNumber: DWORD,
2714     PackageSid: PSID,
2715     CapabilitiesHash: PSID_AND_ATTRIBUTES_HASH,
2716     TrustLevelSid: PSID,
2717     SecurityAttributes: PSECURITY_ATTRIBUTES_OPAQUE,
2718 }}
2719 pub type PTOKEN_ACCESS_INFORMATION = *mut TOKEN_ACCESS_INFORMATION;
2720 pub const POLICY_AUDIT_SUBCATEGORY_COUNT: usize = 59;
2721 STRUCT!{struct TOKEN_AUDIT_POLICY {
2722     PerUserPolicy: [BYTE; (POLICY_AUDIT_SUBCATEGORY_COUNT >> 1) + 1],
2723 }}
2724 pub type PTOKEN_AUDIT_POLICY = *mut TOKEN_AUDIT_POLICY;
2725 pub const TOKEN_SOURCE_LENGTH: usize = 8;
2726 STRUCT!{struct TOKEN_SOURCE {
2727     SourceName: [CHAR; TOKEN_SOURCE_LENGTH],
2728     SourceIdentifier: LUID,
2729 }}
2730 pub type PTOKEN_SOURCE = *mut TOKEN_SOURCE;
2731 STRUCT!{struct TOKEN_STATISTICS {
2732     TokenId: LUID,
2733     AuthenticationId: LUID,
2734     ExpirationTime: LARGE_INTEGER,
2735     TokenType: TOKEN_TYPE,
2736     ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL,
2737     DynamicCharged: DWORD,
2738     DynamicAvailable: DWORD,
2739     GroupCount: DWORD,
2740     PrivilegeCount: DWORD,
2741     ModifiedId: LUID,
2742 }}
2743 pub type PTOKEN_STATISTICS = *mut TOKEN_STATISTICS;
2744 STRUCT!{struct TOKEN_CONTROL {
2745     TokenId: LUID,
2746     AuthenticationId: LUID,
2747     ModifiedId: LUID,
2748     TokenSource: TOKEN_SOURCE,
2749 }}
2750 pub type PTOKEN_CONTROL = *mut TOKEN_CONTROL;
2751 STRUCT!{struct TOKEN_ORIGIN {
2752     OriginatingLogonSession: LUID,
2753 }}
2754 pub type PTOKEN_ORIGIN = *mut TOKEN_ORIGIN;
2755 ENUM!{enum MANDATORY_LEVEL {
2756     MandatoryLevelUntrusted = 0,
2757     MandatoryLevelLow,
2758     MandatoryLevelMedium,
2759     MandatoryLevelHigh,
2760     MandatoryLevelSystem,
2761     MandatoryLevelSecureProcess,
2762     MandatoryLevelCount,
2763 }}
2764 pub type PMANDATORY_LEVEL = *mut MANDATORY_LEVEL;
2765 STRUCT!{struct TOKEN_APPCONTAINER_INFORMATION {
2766     TokenAppContainer: PSID,
2767 }}
2768 pub type PTOKEN_APPCONTAINER_INFORMATION = *mut TOKEN_APPCONTAINER_INFORMATION;
2769 STRUCT!{struct TOKEN_SID_INFORMATION {
2770     Sid: PSID,
2771 }}
2772 pub type PTOKEN_SID_INFORMATION = *mut TOKEN_SID_INFORMATION;
2773 STRUCT!{struct TOKEN_BNO_ISOLATION_INFORMATION {
2774     IsolationPrefix: PWSTR,
2775     IsolationEnabled: BOOLEAN,
2776 }}
2777 pub type PTOKEN_BNO_ISOLATION_INFORMATION = *mut TOKEN_BNO_ISOLATION_INFORMATION;
2778 pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_INVALID: WORD = 0x00;
2779 pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_INT64: WORD = 0x01;
2780 pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_UINT64: WORD = 0x02;
2781 pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_STRING: WORD = 0x03;
2782 STRUCT!{struct CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE {
2783     Version: DWORD64,
2784     Name: PWSTR,
2785 }}
2786 pub type PCLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE = *mut CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE;
2787 pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_FQBN: WORD = 0x04;
2788 pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_SID: WORD = 0x05;
2789 pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_BOOLEAN: WORD = 0x06;
2790 STRUCT!{struct CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE {
2791     pValue: PVOID,
2792     ValueLength: DWORD,
2793 }}
2794 pub type PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE =
2795     *mut CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE;
2796 pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING: WORD = 0x10;
2797 pub const CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE: DWORD = 0x0001;
2798 pub const CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE: DWORD = 0x0002;
2799 pub const CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY: DWORD = 0x0004;
2800 pub const CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT: DWORD = 0x0008;
2801 pub const CLAIM_SECURITY_ATTRIBUTE_DISABLED: DWORD = 0x0010;
2802 pub const CLAIM_SECURITY_ATTRIBUTE_MANDATORY: DWORD = 0x0020;
2803 pub const CLAIM_SECURITY_ATTRIBUTE_VALID_FLAGS: DWORD = CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE
2804     | CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE | CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY
2805     | CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT | CLAIM_SECURITY_ATTRIBUTE_DISABLED
2806     | CLAIM_SECURITY_ATTRIBUTE_MANDATORY;
2807 pub const CLAIM_SECURITY_ATTRIBUTE_CUSTOM_FLAGS: DWORD = 0xFFFF0000;
2808 UNION!{union CLAIM_SECURITY_ATTRIBUTE_V1_Values {
2809     [usize; 1],
2810     pInt64 pInt64_mut: PLONG64,
2811     pUint64 pUint64_mut: PDWORD64,
2812     ppString ppString_mut: PWSTR,
2813     pFqbn pFqbn_mut: PCLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE,
2814     pOctetString pOctetString_mut: PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE,
2815 }}
2816 STRUCT!{struct CLAIM_SECURITY_ATTRIBUTE_V1 {
2817     Name: PWSTR,
2818     ValueType: WORD,
2819     Reserved: WORD,
2820     Flags: DWORD,
2821     ValueCount: DWORD,
2822     Values: CLAIM_SECURITY_ATTRIBUTE_V1_Values,
2823 }}
2824 pub type PCLAIM_SECURITY_ATTRIBUTE_V1 = *mut CLAIM_SECURITY_ATTRIBUTE_V1;
2825 UNION!{union CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1_Values {
2826     [u32; 1],
2827     pInt64 pInt64_mut: [DWORD; ANYSIZE_ARRAY],
2828     pUint64 pUint64_mut: [DWORD; ANYSIZE_ARRAY],
2829     ppString ppString_mut: [DWORD; ANYSIZE_ARRAY],
2830     pFqbn pFqbn_mut: [DWORD; ANYSIZE_ARRAY],
2831     pOctetString pOctetString_mut: [DWORD; ANYSIZE_ARRAY],
2832 }}
2833 STRUCT!{struct CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1 {
2834     Name: DWORD,
2835     ValueType: WORD,
2836     Reserved: WORD,
2837     Flags: DWORD,
2838     ValueCount: DWORD,
2839     Values: CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1_Values,
2840 }}
2841 pub type PCLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1 = *mut CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1;
2842 pub const CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION_V1: WORD = 1;
2843 pub const CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION: WORD =
2844     CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION_V1;
2845 UNION!{union CLAIM_SECURITY_ATTRIBUTES_INFORMATION_Attribute {
2846     [usize; 1],
2847     pAttributeV1 pAttributeV1_mut: PCLAIM_SECURITY_ATTRIBUTE_V1,
2848 }}
2849 STRUCT!{struct CLAIM_SECURITY_ATTRIBUTES_INFORMATION {
2850     Version: WORD,
2851     Reserved: WORD,
2852     AttributeCount: DWORD,
2853     Attribute: CLAIM_SECURITY_ATTRIBUTES_INFORMATION_Attribute,
2854 }}
2855 pub type PCLAIM_SECURITY_ATTRIBUTES_INFORMATION = *mut CLAIM_SECURITY_ATTRIBUTES_INFORMATION;
2856 pub const SECURITY_DYNAMIC_TRACKING: BOOLEAN = TRUE as u8;
2857 pub const SECURITY_STATIC_TRACKING: BOOLEAN = FALSE as u8;
2858 pub type SECURITY_CONTEXT_TRACKING_MODE = BOOLEAN;
2859 pub type PSECURITY_CONTEXT_TRACKING_MODE = *mut BOOLEAN;
2860 STRUCT!{struct SECURITY_QUALITY_OF_SERVICE {
2861     Length: DWORD,
2862     ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL,
2863     ContextTrackingMode: SECURITY_CONTEXT_TRACKING_MODE,
2864     EffectiveOnly: BOOLEAN,
2865 }}
2866 pub type PSECURITY_QUALITY_OF_SERVICE = *mut SECURITY_QUALITY_OF_SERVICE;
2867 STRUCT!{struct SE_IMPERSONATION_STATE {
2868     Token: PACCESS_TOKEN,
2869     CopyOnOpen: BOOLEAN,
2870     EffectiveOnly: BOOLEAN,
2871     Level: SECURITY_IMPERSONATION_LEVEL,
2872 }}
2873 pub type PSE_IMPERSONATION_STATE = *mut SE_IMPERSONATION_STATE;
2874 pub const DISABLE_MAX_PRIVILEGE: DWORD = 0x1;
2875 pub const SANDBOX_INERT: DWORD = 0x2;
2876 pub const LUA_TOKEN: DWORD = 0x4;
2877 pub const WRITE_RESTRICTED: DWORD = 0x8;
2878 pub type SECURITY_INFORMATION = DWORD;
2879 pub type PSECURITY_INFORMATION = *mut DWORD;
2880 pub const OWNER_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000001;
2881 pub const GROUP_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000002;
2882 pub const DACL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000004;
2883 pub const SACL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000008;
2884 pub const LABEL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000010;
2885 pub const ATTRIBUTE_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000020;
2886 pub const SCOPE_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000040;
2887 pub const PROCESS_TRUST_LABEL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000080;
2888 pub const ACCESS_FILTER_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000100;
2889 pub const BACKUP_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00010000;
2890 pub const PROTECTED_DACL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x80000000;
2891 pub const PROTECTED_SACL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x40000000;
2892 pub const UNPROTECTED_DACL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x20000000;
2893 pub const UNPROTECTED_SACL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x10000000;
2894 pub type SE_SIGNING_LEVEL = BYTE;
2895 pub type PSE_SIGNING_LEVEL = *mut BYTE;
2896 pub const SE_SIGNING_LEVEL_UNCHECKED: BYTE = 0x00000000;
2897 pub const SE_SIGNING_LEVEL_UNSIGNED: BYTE = 0x00000001;
2898 pub const SE_SIGNING_LEVEL_ENTERPRISE: BYTE = 0x00000002;
2899 pub const SE_SIGNING_LEVEL_CUSTOM_1: BYTE = 0x00000003;
2900 pub const SE_SIGNING_LEVEL_AUTHENTICODE: BYTE = 0x00000004;
2901 pub const SE_SIGNING_LEVEL_CUSTOM_2: BYTE = 0x00000005;
2902 pub const SE_SIGNING_LEVEL_STORE: BYTE = 0x00000006;
2903 pub const SE_SIGNING_LEVEL_CUSTOM_3: BYTE = 0x00000007;
2904 pub const SE_SIGNING_LEVEL_ANTIMALWARE: BYTE = SE_SIGNING_LEVEL_CUSTOM_3;
2905 pub const SE_SIGNING_LEVEL_MICROSOFT: BYTE = 0x00000008;
2906 pub const SE_SIGNING_LEVEL_CUSTOM_4: BYTE = 0x00000009;
2907 pub const SE_SIGNING_LEVEL_CUSTOM_5: BYTE = 0x0000000A;
2908 pub const SE_SIGNING_LEVEL_DYNAMIC_CODEGEN: BYTE = 0x0000000B;
2909 pub const SE_SIGNING_LEVEL_WINDOWS: BYTE = 0x0000000C;
2910 pub const SE_SIGNING_LEVEL_CUSTOM_7: BYTE = 0x0000000D;
2911 pub const SE_SIGNING_LEVEL_WINDOWS_TCB: BYTE = 0x0000000E;
2912 pub const SE_SIGNING_LEVEL_CUSTOM_6: BYTE = 0x0000000F;
2913 ENUM!{enum SE_IMAGE_SIGNATURE_TYPE {
2914     SeImageSignatureNone = 0,
2915     SeImageSignatureEmbedded,
2916     SeImageSignatureCache,
2917     SeImageSignatureCatalogCached,
2918     SeImageSignatureCatalogNotCached,
2919     SeImageSignatureCatalogHint,
2920     SeImageSignaturePackageCatalog,
2921 }}
2922 pub type PSE_IMAGE_SIGNATURE_TYPE = *mut SE_IMAGE_SIGNATURE_TYPE;
2923 ENUM!{enum SE_LEARNING_MODE_DATA_TYPE {
2924     SeLearningModeInvalidType = 0,
2925     SeLearningModeSettings,
2926     SeLearningModeMax,
2927 }}
2928 STRUCT!{struct SECURITY_CAPABILITIES {
2929     AppContainerSid: PSID,
2930     Capabilities: PSID_AND_ATTRIBUTES,
2931     CapabilityCount: DWORD,
2932     Reserved: DWORD,
2933 }}
2934 pub type PSECURITY_CAPABILITIES = *mut SECURITY_CAPABILITIES;
2935 pub type LPSECURITY_CAPABILITIES = *mut SECURITY_CAPABILITIES;
2936 pub const PROCESS_TERMINATE: DWORD = 0x0001;
2937 pub const PROCESS_CREATE_THREAD: DWORD = 0x0002;
2938 pub const PROCESS_SET_SESSIONID: DWORD = 0x0004;
2939 pub const PROCESS_VM_OPERATION: DWORD = 0x0008;
2940 pub const PROCESS_VM_READ: DWORD = 0x0010;
2941 pub const PROCESS_VM_WRITE: DWORD = 0x0020;
2942 pub const PROCESS_DUP_HANDLE: DWORD = 0x0040;
2943 pub const PROCESS_CREATE_PROCESS: DWORD = 0x0080;
2944 pub const PROCESS_SET_QUOTA: DWORD = 0x0100;
2945 pub const PROCESS_SET_INFORMATION: DWORD = 0x0200;
2946 pub const PROCESS_QUERY_INFORMATION: DWORD = 0x0400;
2947 pub const PROCESS_SUSPEND_RESUME: DWORD = 0x0800;
2948 pub const PROCESS_QUERY_LIMITED_INFORMATION: DWORD = 0x1000;
2949 pub const PROCESS_SET_LIMITED_INFORMATION: DWORD = 0x2000;
2950 pub const PROCESS_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF;
2951 pub const THREAD_TERMINATE: DWORD = 0x0001;
2952 pub const THREAD_SUSPEND_RESUME: DWORD = 0x0002;
2953 pub const THREAD_GET_CONTEXT: DWORD = 0x0008;
2954 pub const THREAD_SET_CONTEXT: DWORD = 0x0010;
2955 pub const THREAD_QUERY_INFORMATION: DWORD = 0x0040;
2956 pub const THREAD_SET_INFORMATION: DWORD = 0x0020;
2957 pub const THREAD_SET_THREAD_TOKEN: DWORD = 0x0080;
2958 pub const THREAD_IMPERSONATE: DWORD = 0x0100;
2959 pub const THREAD_DIRECT_IMPERSONATION: DWORD = 0x0200;
2960 pub const THREAD_SET_LIMITED_INFORMATION: DWORD = 0x0400;
2961 pub const THREAD_QUERY_LIMITED_INFORMATION: DWORD = 0x0800;
2962 pub const THREAD_RESUME: DWORD = 0x1000;
2963 pub const THREAD_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF;
2964 pub const JOB_OBJECT_ASSIGN_PROCESS: DWORD = 0x0001;
2965 pub const JOB_OBJECT_SET_ATTRIBUTES: DWORD = 0x0002;
2966 pub const JOB_OBJECT_QUERY: DWORD = 0x0004;
2967 pub const JOB_OBJECT_TERMINATE: DWORD = 0x0008;
2968 pub const JOB_OBJECT_SET_SECURITY_ATTRIBUTES: DWORD = 0x0010;
2969 pub const JOB_OBJECT_IMPERSONATE: DWORD = 0x0020;
2970 pub const JOB_OBJECT_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3F;
2971 STRUCT!{struct JOB_SET_ARRAY {
2972     JobHandle: HANDLE,
2973     MemberLevel: DWORD,
2974     Flags: DWORD,
2975 }}
2976 pub type PJOB_SET_ARRAY = *mut JOB_SET_ARRAY;
2977 pub const FLS_MAXIMUM_AVAILABLE: DWORD = 128;
2978 pub const TLS_MINIMUM_AVAILABLE: DWORD = 64;
2979 STRUCT!{struct EXCEPTION_REGISTRATION_RECORD {
2980     Next: *mut EXCEPTION_REGISTRATION_RECORD,
2981     Handler: PEXCEPTION_ROUTINE,
2982 }}
2983 pub type PEXCEPTION_REGISTRATION_RECORD = *mut EXCEPTION_REGISTRATION_RECORD;
2984 UNION!{union NT_TIB_u {
2985     [usize; 1],
2986     FiberData FiberData_mut: PVOID,
2987     Version Version_mut: DWORD,
2988 }}
2989 STRUCT!{struct NT_TIB {
2990     ExceptionList: *mut EXCEPTION_REGISTRATION_RECORD,
2991     StackBase: PVOID,
2992     StackLimit: PVOID,
2993     SubSystemTib: PVOID,
2994     u: NT_TIB_u,
2995     ArbitraryUserPointer: PVOID,
2996     _Self: *mut NT_TIB,
2997 }}
2998 pub type PNT_TIB = *mut NT_TIB;
2999 UNION!{union NT_TIB32_u {
3000     [u32; 1],
3001     FiberData FiberData_mut: DWORD,
3002     Version Version_mut: DWORD,
3003 }}
3004 STRUCT!{struct NT_TIB32 {
3005     ExceptionList: DWORD,
3006     StackBase: DWORD,
3007     StackLimit: DWORD,
3008     SubSystemTib: DWORD,
3009     u: NT_TIB32_u,
3010     ArbitraryUserPointer: DWORD,
3011     Self_: DWORD,
3012 }}
3013 pub type PNT_TIB32 = *mut NT_TIB32;
3014 UNION!{union NT_TIB64_u {
3015     [u64; 1],
3016     FiberData FiberData_mut: DWORD64,
3017     Version Version_mut: DWORD,
3018 }}
3019 STRUCT!{struct NT_TIB64 {
3020     ExceptionList: DWORD64,
3021     StackBase: DWORD64,
3022     StackLimit: DWORD64,
3023     SubSystemTib: DWORD64,
3024     u: NT_TIB64_u,
3025     ArbitraryUserPointer: DWORD64,
3026     _Self: DWORD64,
3027 }}
3028 pub type PNT_TIB64 = *mut NT_TIB64;
3029 pub const THREAD_DYNAMIC_CODE_ALLOW: DWORD = 1;
3030 pub const THREAD_BASE_PRIORITY_LOWRT: DWORD = 15;
3031 pub const THREAD_BASE_PRIORITY_MAX: DWORD = 2;
3032 pub const THREAD_BASE_PRIORITY_MIN: DWORD = -2i32 as u32;
3033 pub const THREAD_BASE_PRIORITY_IDLE: DWORD = -15i32 as u32;
3034 STRUCT!{struct UMS_CREATE_THREAD_ATTRIBUTES {
3035     UmsVersion: DWORD,
3036     UmsContext: PVOID,
3037     UmsCompletionList: PVOID,
3038 }}
3039 pub type PUMS_CREATE_THREAD_ATTRIBUTES = *mut UMS_CREATE_THREAD_ATTRIBUTES;
3040 STRUCT!{struct WOW64_ARCHITECTURE_INFORMATION {
3041     BitFields: DWORD,
3042 }}
3043 pub type PWOW64_ARCHITECTURE_INFORMATION = *mut WOW64_ARCHITECTURE_INFORMATION;
3044 BITFIELD!{WOW64_ARCHITECTURE_INFORMATION BitFields: DWORD [
3045     Machine set_Machine[0..16],
3046     KernelMode set_KernelMode[16..17],
3047     UserMode set_UserMode[17..18],
3048     Native set_Native[18..19],
3049     Process set_Process[19..20],
3050     ReservedZero0 set_ReservedZero0[20..32],
3051 ]}
3052 pub const MEMORY_PRIORITY_LOWEST: ULONG = 0;
3053 pub const MEMORY_PRIORITY_VERY_LOW: ULONG = 1;
3054 pub const MEMORY_PRIORITY_LOW: ULONG = 2;
3055 pub const MEMORY_PRIORITY_MEDIUM: ULONG = 3;
3056 pub const MEMORY_PRIORITY_BELOW_NORMAL: ULONG = 4;
3057 pub const MEMORY_PRIORITY_NORMAL: ULONG = 5;
3058 STRUCT!{struct QUOTA_LIMITS {
3059     PagedPoolLimit: SIZE_T,
3060     NonPagedPoolLimit: SIZE_T,
3061     MinimumWorkingSetSize: SIZE_T,
3062     MaximumWorkingSetSize: SIZE_T,
3063     PagefileLimit: SIZE_T,
3064     TimeLimit: LARGE_INTEGER,
3065 }}
3066 pub type PQUOTA_LIMITS = *mut QUOTA_LIMITS;
3067 pub const QUOTA_LIMITS_HARDWS_MIN_ENABLE: DWORD = 0x00000001;
3068 pub const QUOTA_LIMITS_HARDWS_MIN_DISABLE: DWORD = 0x00000002;
3069 pub const QUOTA_LIMITS_HARDWS_MAX_ENABLE: DWORD = 0x00000004;
3070 pub const QUOTA_LIMITS_HARDWS_MAX_DISABLE: DWORD = 0x00000008;
3071 pub const QUOTA_LIMITS_USE_DEFAULT_LIMITS: DWORD = 0x00000010;
3072 STRUCT!{struct RATE_QUOTA_LIMIT {
3073     RateData: DWORD,
3074 }}
3075 BITFIELD!{RATE_QUOTA_LIMIT RateData: DWORD [
3076     RatePercent set_RatePercent[0..7],
3077     Reserved0 set_Reserved0[7..32],
3078 ]}
3079 pub type PRATE_QUOTA_LIMIT = *mut RATE_QUOTA_LIMIT;
3080 STRUCT!{struct QUOTA_LIMITS_EX {
3081     PagedPoolLimit: SIZE_T,
3082     NonPagedPoolLimit: SIZE_T,
3083     MinimumWorkingSetSize: SIZE_T,
3084     MaximumWorkingSetSize: SIZE_T,
3085     PagefileLimit: SIZE_T,
3086     TimeLimit: LARGE_INTEGER,
3087     WorkingSetLimit: SIZE_T,
3088     Reserved2: SIZE_T,
3089     Reserved3: SIZE_T,
3090     Reserved4: SIZE_T,
3091     Flags: DWORD,
3092     CpuRateLimit: RATE_QUOTA_LIMIT,
3093 }}
3094 pub type PQUOTA_LIMITS_EX = *mut QUOTA_LIMITS_EX;
3095 STRUCT!{struct IO_COUNTERS {
3096     ReadOperationCount: ULONGLONG,
3097     WriteOperationCount: ULONGLONG,
3098     OtherOperationCount: ULONGLONG,
3099     ReadTransferCount: ULONGLONG,
3100     WriteTransferCount: ULONGLONG,
3101     OtherTransferCount: ULONGLONG,
3102 }}
3103 pub type PIO_COUNTERS = *mut IO_COUNTERS;
3104 pub const MAX_HW_COUNTERS: usize = 16;
3105 pub const THREAD_PROFILING_FLAG_DISPATCH: DWORD = 0x00000001;
3106 ENUM!{enum HARDWARE_COUNTER_TYPE {
3107     PMCCounter,
3108     MaxHardwareCounterType,
3109 }}
3110 pub type PHARDWARE_COUNTER_TYPE = *mut HARDWARE_COUNTER_TYPE;
3111 ENUM!{enum PROCESS_MITIGATION_POLICY {
3112     ProcessDEPPolicy,
3113     ProcessASLRPolicy,
3114     ProcessDynamicCodePolicy,
3115     ProcessStrictHandleCheckPolicy,
3116     ProcessSystemCallDisablePolicy,
3117     ProcessMitigationOptionsMask,
3118     ProcessExtensionPointDisablePolicy,
3119     ProcessControlFlowGuardPolicy,
3120     ProcessSignaturePolicy,
3121     ProcessFontDisablePolicy,
3122     ProcessImageLoadPolicy,
3123     MaxProcessMitigationPolicy,
3124 }}
3125 pub type PPROCESS_MITIGATION_POLICY = *mut PROCESS_MITIGATION_POLICY;
3126 STRUCT!{struct PROCESS_MITIGATION_ASLR_POLICY {
3127     Flags: DWORD,
3128 }}
3129 BITFIELD!{PROCESS_MITIGATION_ASLR_POLICY Flags: DWORD [
3130     EnableBottomUpRandomization set_EnableBottomUpRandomization[0..1],
3131     EnableForceRelocateImages set_EnableForceRelocateImages[1..2],
3132     EnableHighEntropy set_EnableHighEntropy[2..3],
3133     DisallowStrippedImages set_DisallowStrippedImages[3..4],
3134     ReservedFlags set_ReservedFlags[4..32],
3135 ]}
3136 pub type PPROCESS_MITIGATION_ASLR_POLICY = *mut PROCESS_MITIGATION_ASLR_POLICY;
3137 STRUCT!{struct PROCESS_MITIGATION_DEP_POLICY {
3138     Flags: DWORD,
3139     Permanent: BOOLEAN,
3140 }}
3141 BITFIELD!{PROCESS_MITIGATION_DEP_POLICY Flags: DWORD [
3142     Enable set_Enable[0..1],
3143     DisableAtlThunkEmulation set_DisableAtlThunkEmulation[1..2],
3144     ReservedFlags set_ReservedFlags[2..32],
3145 ]}
3146 pub type PPROCESS_MITIGATION_DEP_POLICY = *mut PROCESS_MITIGATION_DEP_POLICY;
3147 STRUCT!{struct PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY {
3148     Flags: DWORD,
3149 }}
3150 BITFIELD!{PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY Flags: DWORD [
3151     RaiseExceptionOnInvalidHandleReference set_RaiseExceptionOnInvalidHandleReference[0..1],
3152     HandleExceptionsPermanentlyEnabled set_HandleExceptionsPermanentlyEnabled[1..2],
3153     ReservedFlags set_ReservedFlags[2..32],
3154 ]}
3155 pub type PPROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY
3156     = *mut PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY;
3157 STRUCT!{struct PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY {
3158     Flags: DWORD,
3159 }}
3160 BITFIELD!{PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY Flags: DWORD [
3161     DisallowWin32kSystemCalls set_DisallowWin32kSystemCalls[0..1],
3162     ReservedFlags set_ReservedFlags[1..32],
3163 ]}
3164 pub type PPROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY
3165     = *mut PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY;
3166 STRUCT!{struct PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY {
3167     Flags: DWORD,
3168 }}
3169 BITFIELD!{PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY Flags: DWORD [
3170     DisableExtensionPoints set_DisableExtensionPoints[0..1],
3171     ReservedFlags set_ReservedFlags[1..32],
3172 ]}
3173 pub type PPROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY
3174     = *mut PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY;
3175 STRUCT!{struct PROCESS_MITIGATION_DYNAMIC_CODE_POLICY {
3176     Flags: DWORD,
3177 }}
3178 BITFIELD!{PROCESS_MITIGATION_DYNAMIC_CODE_POLICY Flags: DWORD [
3179     ProhibitDynamicCode set_ProhibitDynamicCode[0..1],
3180     AllowThreadOptOut set_AllowThreadOptOut[1..2],
3181     AllowRemoteDowngrade set_AllowRemoteDowngrade[2..3],
3182     ReservedFlags set_ReservedFlags[3..32],
3183 ]}
3184 pub type PPROCESS_MITIGATION_DYNAMIC_CODE_POLICY = *mut PROCESS_MITIGATION_DYNAMIC_CODE_POLICY;
3185 STRUCT!{struct PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY {
3186     Flags: DWORD,
3187 }}
3188 BITFIELD!{PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY Flags: DWORD [
3189     EnableControlFlowGuard set_EnableControlFlowGuard[0..1],
3190     EnableExportSuppression set_EnableExportSuppression[1..2],
3191     StrictMode set_StrictMode[2..3],
3192     ReservedFlags set_ReservedFlags[3..32],
3193 ]}
3194 pub type PPROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY
3195     = *mut PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY;
3196 STRUCT!{struct PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY {
3197     Flags: DWORD,
3198 }}
3199 BITFIELD!{PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY Flags: DWORD [
3200     MicrosoftSignedOnly set_MicrosoftSignedOnly[0..1],
3201     StoreSignedOnly set_StoreSignedOnly[1..2],
3202     MitigationOptIn set_MitigationOptIn[2..3],
3203     ReservedFlags set_ReservedFlags[3..32],
3204 ]}
3205 pub type PPROCESS_MITIGATION_BINARY_SIGNATURE_POLICY
3206     = *mut PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY;
3207 STRUCT!{struct PROCESS_MITIGATION_FONT_DISABLE_POLICY {
3208     Flags: DWORD,
3209 }}
3210 BITFIELD!{PROCESS_MITIGATION_FONT_DISABLE_POLICY Flags: DWORD [
3211     DisableNonSystemFonts set_DisableNonSystemFonts[0..1],
3212     AuditNonSystemFontLoading set_AuditNonSystemFontLoading[1..2],
3213     ReservedFlags set_ReservedFlags[2..32],
3214 ]}
3215 pub type PPROCESS_MITIGATION_FONT_DISABLE_POLICY = *mut PROCESS_MITIGATION_FONT_DISABLE_POLICY;
3216 STRUCT!{struct PROCESS_MITIGATION_IMAGE_LOAD_POLICY {
3217     Flags: DWORD,
3218 }}
3219 BITFIELD!{PROCESS_MITIGATION_IMAGE_LOAD_POLICY Flags: DWORD [
3220     NoRemoteImages set_NoRemoteImages[0..1],
3221     NoLowMandatoryLabelImages set_NoLowMandatoryLabelImages[1..2],
3222     PreferSystem32Images set_PreferSystem32Images[2..3],
3223     ReservedFlags set_ReservedFlags[3..32],
3224 ]}
3225 pub type PPROCESS_MITIGATION_IMAGE_LOAD_POLICY = *mut PROCESS_MITIGATION_IMAGE_LOAD_POLICY;
3226 STRUCT!{struct PROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY {
3227     Flags: DWORD,
3228 }}
3229 pub type PPPROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY =
3230     *mut PROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY;
3231 BITFIELD!{PROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY Flags: DWORD [
3232     FilterId set_FilterId[0..4],
3233     ReservedFlags set_ReservedFlags[4..32],
3234 ]}
3235 STRUCT!{struct PROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY {
3236     Flags: DWORD,
3237 }}
3238 pub type PPROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY =
3239     *mut PROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY;
3240 BITFIELD!{PROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY Flags: DWORD [
3241     EnableExportAddressFilter set_EnableExportAddressFilter[0..1],
3242     AuditExportAddressFilter set_AuditExportAddressFilter[1..2],
3243     EnableExportAddressFilterPlus set_EnableExportAddressFilterPlus[2..3],
3244     AuditExportAddressFilterPlus set_AuditExportAddressFilterPlus[3..4],
3245     EnableImportAddressFilter set_EnableImportAddressFilter[4..5],
3246     AuditImportAddressFilter set_AuditImportAddressFilter[5..6],
3247     EnableRopStackPivot set_EnableRopStackPivot[6..7],
3248     AuditRopStackPivot set_AuditRopStackPivot[7..8],
3249     EnableRopCallerCheck set_EnableRopCallerCheck[8..9],
3250     AuditRopCallerCheck set_AuditRopCallerCheck[9..10],
3251     EnableRopSimExec set_EnableRopSimExec[10..11],
3252     AuditRopSimExec set_AuditRopSimExec[11..12],
3253     ReservedFlags set_ReservedFlags[12..32],
3254 ]}
3255 STRUCT!{struct PROCESS_MITIGATION_CHILD_PROCESS_POLICY {
3256     Flags: DWORD,
3257 }}
3258 pub type PPROCESS_MITIGATION_CHILD_PROCESS_POLICY = *mut PROCESS_MITIGATION_CHILD_PROCESS_POLICY;
3259 BITFIELD!{PROCESS_MITIGATION_CHILD_PROCESS_POLICY Flags: DWORD [
3260     NoChildProcessCreation set_NoChildProcessCreation[0..1],
3261     AuditNoChildProcessCreation set_AuditNoChildProcessCreation[1..2],
3262     AllowSecureProcessCreation set_AllowSecureProcessCreation[2..3],
3263     ReservedFlags set_ReservedFlags[3..32],
3264 ]}
3265 STRUCT!{struct JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {
3266     TotalUserTime: LARGE_INTEGER,
3267     TotalKernelTime: LARGE_INTEGER,
3268     ThisPeriodTotalUserTime: LARGE_INTEGER,
3269     ThisPeriodTotalKernelTime: LARGE_INTEGER,
3270     TotalPageFaultCount: DWORD,
3271     TotalProcesses: DWORD,
3272     ActiveProcesses: DWORD,
3273     TotalTerminatedProcesses: DWORD,
3274 }}
3275 pub type PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION = *mut JOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
3276 STRUCT!{struct JOBOBJECT_BASIC_LIMIT_INFORMATION {
3277     PerProcessUserTimeLimit: LARGE_INTEGER,
3278     PerJobUserTimeLimit: LARGE_INTEGER,
3279     LimitFlags: DWORD,
3280     MinimumWorkingSetSize: SIZE_T,
3281     MaximumWorkingSetSize: SIZE_T,
3282     ActiveProcessLimit: DWORD,
3283     Affinity: ULONG_PTR,
3284     PriorityClass: DWORD,
3285     SchedulingClass: DWORD,
3286 }}
3287 pub type PJOBOBJECT_BASIC_LIMIT_INFORMATION = *mut JOBOBJECT_BASIC_LIMIT_INFORMATION;
3288 STRUCT!{struct JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
3289     BasicLimitInformation: JOBOBJECT_BASIC_LIMIT_INFORMATION,
3290     IoInfo: IO_COUNTERS,
3291     ProcessMemoryLimit: SIZE_T,
3292     JobMemoryLimit: SIZE_T,
3293     PeakProcessMemoryUsed: SIZE_T,
3294     PeakJobMemoryUsed: SIZE_T,
3295 }}
3296 pub type PJOBOBJECT_EXTENDED_LIMIT_INFORMATION = *mut JOBOBJECT_EXTENDED_LIMIT_INFORMATION;
3297 STRUCT!{struct JOBOBJECT_BASIC_PROCESS_ID_LIST {
3298     NumberOfAssignedProcesses: DWORD,
3299     NumberOfProcessIdsInList: DWORD,
3300     ProcessIdList: [ULONG_PTR; 1],
3301 }}
3302 pub type PJOBOBJECT_BASIC_PROCESS_ID_LIST = *mut JOBOBJECT_BASIC_PROCESS_ID_LIST;
3303 STRUCT!{struct JOBOBJECT_BASIC_UI_RESTRICTIONS {
3304     UIRestrictionsClass: DWORD,
3305 }}
3306 pub type PJOBOBJECT_BASIC_UI_RESTRICTIONS = *mut JOBOBJECT_BASIC_UI_RESTRICTIONS;
3307 STRUCT!{struct JOBOBJECT_SECURITY_LIMIT_INFORMATION {
3308     SecurityLimitFlags: DWORD,
3309     JobToken: HANDLE,
3310     SidsToDisable: PTOKEN_GROUPS,
3311     PrivilegesToDelete: PTOKEN_PRIVILEGES,
3312     RestrictedSids: PTOKEN_GROUPS,
3313 }}
3314 pub type PJOBOBJECT_SECURITY_LIMIT_INFORMATION = *mut JOBOBJECT_SECURITY_LIMIT_INFORMATION;
3315 STRUCT!{struct JOBOBJECT_END_OF_JOB_TIME_INFORMATION {
3316     EndOfJobTimeAction: DWORD,
3317 }}
3318 pub type PJOBOBJECT_END_OF_JOB_TIME_INFORMATION = *mut JOBOBJECT_END_OF_JOB_TIME_INFORMATION;
3319 STRUCT!{struct JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
3320     CompletionKey: PVOID,
3321     CompletionPort: HANDLE,
3322 }}
3323 pub type PJOBOBJECT_ASSOCIATE_COMPLETION_PORT = *mut JOBOBJECT_ASSOCIATE_COMPLETION_PORT;
3324 STRUCT!{struct JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION {
3325     BasicInfo: JOBOBJECT_BASIC_ACCOUNTING_INFORMATION,
3326     IoInfo: IO_COUNTERS,
3327 }}
3328 pub type PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
3329     = *mut JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
3330 STRUCT!{struct JOBOBJECT_JOBSET_INFORMATION {
3331     MemberLevel: DWORD,
3332 }}
3333 pub type PJOBOBJECT_JOBSET_INFORMATION = *mut JOBOBJECT_JOBSET_INFORMATION;
3334 ENUM!{enum JOBOBJECT_RATE_CONTROL_TOLERANCE {
3335     ToleranceLow = 1,
3336     ToleranceMedium,
3337     ToleranceHigh,
3338 }}
3339 pub type PJOBOBJECT_RATE_CONTROL_TOLERANCE = *mut JOBOBJECT_RATE_CONTROL_TOLERANCE;
3340 ENUM!{enum JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL {
3341     ToleranceIntervalShort = 1,
3342     ToleranceIntervalMedium,
3343     ToleranceIntervalLong,
3344 }}
3345 pub type PJOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL
3346     = *mut JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL;
3347 STRUCT!{struct JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION {
3348     IoReadBytesLimit: DWORD64,
3349     IoWriteBytesLimit: DWORD64,
3350     PerJobUserTimeLimit: LARGE_INTEGER,
3351     JobMemoryLimit: DWORD64,
3352     RateControlTolerance: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3353     RateControlToleranceInterval: JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL,
3354     LimitFlags: DWORD,
3355 }}
3356 pub type PJOBOBJECT_NOTIFICATION_LIMIT_INFORMATION = *mut JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION;
3357 UNION!{union JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2_u1 {
3358     [u64; 1],
3359     JobHighMemoryLimit JobHighMemoryLimit_mut: DWORD64,
3360     JobMemoryLimit JobMemoryLimit_mut: DWORD64,
3361 }}
3362 UNION!{union JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2_u2 {
3363     [u32; 1],
3364     RateControlTolerance RateControlTolerance_mut: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3365     CpuRateControlTolerance CpuRateControlTolerance_mut: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3366 }}
3367 UNION!{union JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2_u3 {
3368     [u32; 1],
3369     RateControlToleranceInterval RateControlToleranceInterval_mut:
3370         JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL,
3371     CpuRateControlToleranceInterval CpuRateControlToleranceInterval_mut:
3372         JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL,
3373 }}
3374 STRUCT!{struct JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2 {
3375     IoReadBytesLimit: DWORD64,
3376     IoWriteBytesLimit: DWORD64,
3377     PerJobUserTimeLimit: LARGE_INTEGER,
3378     u1: JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2_u1,
3379     u2: JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2_u2,
3380     u3: JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2_u3,
3381     LimitFlags: DWORD,
3382     IoRateControlTolerance: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3383     JobLowMemoryLimit: DWORD64,
3384     IoRateControlToleranceInterval: JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL,
3385     NetRateControlTolerance: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3386     NetRateControlToleranceInterval: JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL,
3387 }}
3388 STRUCT!{struct JOBOBJECT_LIMIT_VIOLATION_INFORMATION {
3389     LimitFlags: DWORD,
3390     ViolationLimitFlags: DWORD,
3391     IoReadBytes: DWORD64,
3392     IoReadBytesLimit: DWORD64,
3393     IoWriteBytes: DWORD64,
3394     IoWriteBytesLimit: DWORD64,
3395     PerJobUserTime: LARGE_INTEGER,
3396     PerJobUserTimeLimit: LARGE_INTEGER,
3397     JobMemory: DWORD64,
3398     JobMemoryLimit: DWORD64,
3399     RateControlTolerance: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3400     RateControlToleranceLimit: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3401 }}
3402 pub type PJOBOBJECT_LIMIT_VIOLATION_INFORMATION = *mut JOBOBJECT_LIMIT_VIOLATION_INFORMATION;
3403 UNION!{union JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2_u1 {
3404     [u64; 1],
3405     JobHighMemoryLimit JobHighMemoryLimit_mut: DWORD64,
3406     JobMemoryLimit JobMemoryLimit_mut: DWORD64,
3407 }}
3408 UNION!{union JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2_u2 {
3409     [u32; 1],
3410     RateControlTolerance RateControlTolerance_mut: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3411     CpuRateControlTolerance CpuRateControlTolerance_mut: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3412 }}
3413 UNION!{union JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2_u3 {
3414     [u32; 1],
3415     RateControlToleranceLimit RateControlToleranceLimit_mut: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3416     CpuRateControlToleranceLimit CpuRateControlToleranceLimit_mut:
3417         JOBOBJECT_RATE_CONTROL_TOLERANCE,
3418 }}
3419 STRUCT!{struct JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2 {
3420     LimitFlags: DWORD,
3421     ViolationLimitFlags: DWORD,
3422     IoReadBytes: DWORD64,
3423     IoReadBytesLimit: DWORD64,
3424     IoWriteBytes: DWORD64,
3425     IoWriteBytesLimit: DWORD64,
3426     PerJobUserTime: LARGE_INTEGER,
3427     PerJobUserTimeLimit: LARGE_INTEGER,
3428     JobMemory: DWORD64,
3429     u1: JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2_u1,
3430     u2: JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2_u2,
3431     u3: JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2_u3,
3432     JobLowMemoryLimit: DWORD64,
3433     IoRateControlTolerance: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3434     IoRateControlToleranceLimit: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3435     NetRateControlTolerance: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3436     NetRateControlToleranceLimit: JOBOBJECT_RATE_CONTROL_TOLERANCE,
3437 }}
3438 STRUCT!{struct JOBOBJECT_CPU_RATE_CONTROL_INFORMATION_u_s {
3439     MinRate: WORD,
3440     MaxRate: WORD,
3441 }}
3442 UNION!{union JOBOBJECT_CPU_RATE_CONTROL_INFORMATION_u {
3443     [u32; 1],
3444     CpuRate CpuRate_mut: DWORD,
3445     Weight Weight_mut: DWORD,
3446     s s_mut: JOBOBJECT_CPU_RATE_CONTROL_INFORMATION_u_s,
3447 }}
3448 STRUCT!{struct JOBOBJECT_CPU_RATE_CONTROL_INFORMATION {
3449     ControlFlags: DWORD,
3450     u: JOBOBJECT_CPU_RATE_CONTROL_INFORMATION_u,
3451 }}
3452 pub type PJOBOBJECT_CPU_RATE_CONTROL_INFORMATION = *mut JOBOBJECT_CPU_RATE_CONTROL_INFORMATION;
3453 ENUM!{enum JOB_OBJECT_NET_RATE_CONTROL_FLAGS {
3454     JOB_OBJECT_NET_RATE_CONTROL_ENABLE = 0x1,
3455     JOB_OBJECT_NET_RATE_CONTROL_MAX_BANDWIDTH = 0x2,
3456     JOB_OBJECT_NET_RATE_CONTROL_DSCP_TAG = 0x4,
3457     JOB_OBJECT_NET_RATE_CONTROL_VALID_FLAGS = 0x7,
3458 }}
3459 pub const JOB_OBJECT_NET_RATE_CONTROL_MAX_DSCP_TAG: DWORD = 64;
3460 STRUCT!{struct JOBOBJECT_NET_RATE_CONTROL_INFORMATION {
3461     MaxBandwidth: DWORD64,
3462     ControlFlags: JOB_OBJECT_NET_RATE_CONTROL_FLAGS,
3463     DscpTag: BYTE,
3464 }}
3465 ENUM!{enum JOB_OBJECT_IO_RATE_CONTROL_FLAGS {
3466     JOB_OBJECT_IO_RATE_CONTROL_ENABLE = 0x1,
3467     JOB_OBJECT_IO_RATE_CONTROL_STANDALONE_VOLUME = 0x2,
3468     JOB_OBJECT_IO_RATE_CONTROL_VALID_FLAGS = JOB_OBJECT_IO_RATE_CONTROL_ENABLE
3469         | JOB_OBJECT_IO_RATE_CONTROL_STANDALONE_VOLUME,
3470 }}
3471 STRUCT!{struct JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE {
3472     MaxIops: LONG64,
3473     MaxBandwidth: LONG64,
3474     ReservationIops: LONG64,
3475     VolumeName: PWSTR,
3476     BaseIoSize: DWORD,
3477     ControlFlags: JOB_OBJECT_IO_RATE_CONTROL_FLAGS,
3478     VolumeNameLength: WORD,
3479 }}
3480 pub type JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V1
3481     = JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE;
3482 STRUCT!{struct JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V2 {
3483     MaxIops: LONG64,
3484     MaxBandwidth: LONG64,
3485     ReservationIops: LONG64,
3486     VolumeName: PWSTR,
3487     BaseIoSize: DWORD,
3488     ControlFlags: JOB_OBJECT_IO_RATE_CONTROL_FLAGS,
3489     VolumeNameLength: WORD,
3490     CriticalReservationIops: LONG64,
3491     ReservationBandwidth: LONG64,
3492     CriticalReservationBandwidth: LONG64,
3493     MaxTimePercent: LONG64,
3494     ReservationTimePercent: LONG64,
3495     CriticalReservationTimePercent: LONG64,
3496 }}
3497 STRUCT!{struct JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V3 {
3498     MaxIops: LONG64,
3499     MaxBandwidth: LONG64,
3500     ReservationIops: LONG64,
3501     VolumeName: PWSTR,
3502     BaseIoSize: DWORD,
3503     ControlFlags: JOB_OBJECT_IO_RATE_CONTROL_FLAGS,
3504     VolumeNameLength: WORD,
3505     CriticalReservationIops: LONG64,
3506     ReservationBandwidth: LONG64,
3507     CriticalReservationBandwidth: LONG64,
3508     MaxTimePercent: LONG64,
3509     ReservationTimePercent: LONG64,
3510     CriticalReservationTimePercent: LONG64,
3511     SoftMaxIops: LONG64,
3512     SoftMaxBandwidth: LONG64,
3513     SoftMaxTimePercent: LONG64,
3514     LimitExcessNotifyIops: LONG64,
3515     LimitExcessNotifyBandwidth: LONG64,
3516     LimitExcessNotifyTimePercent: LONG64,
3517 }}
3518 ENUM!{enum JOBOBJECT_IO_ATTRIBUTION_CONTROL_FLAGS {
3519     JOBOBJECT_IO_ATTRIBUTION_CONTROL_ENABLE = 0x1,
3520     JOBOBJECT_IO_ATTRIBUTION_CONTROL_DISABLE = 0x2,
3521     JOBOBJECT_IO_ATTRIBUTION_CONTROL_VALID_FLAGS = 0x3,
3522 }}
3523 STRUCT!{struct JOBOBJECT_IO_ATTRIBUTION_STATS {
3524     IoCount: ULONG_PTR,
3525     TotalNonOverlappedQueueTime: ULONGLONG,
3526     TotalNonOverlappedServiceTime: ULONGLONG,
3527     TotalSize: ULONGLONG,
3528 }}
3529 pub type PJOBOBJECT_IO_ATTRIBUTION_STATS = *mut JOBOBJECT_IO_ATTRIBUTION_STATS;
3530 STRUCT!{struct JOBOBJECT_IO_ATTRIBUTION_INFORMATION {
3531     ControlFlags: DWORD,
3532     ReadStats: JOBOBJECT_IO_ATTRIBUTION_STATS,
3533     WriteStats: JOBOBJECT_IO_ATTRIBUTION_STATS,
3534 }}
3535 pub type PJOBOBJECT_IO_ATTRIBUTION_INFORMATION = *mut JOBOBJECT_IO_ATTRIBUTION_INFORMATION;
3536 pub const JOB_OBJECT_TERMINATE_AT_END_OF_JOB: DWORD = 0;
3537 pub const JOB_OBJECT_POST_AT_END_OF_JOB: DWORD = 1;
3538 pub const JOB_OBJECT_MSG_END_OF_JOB_TIME: DWORD = 1;
3539 pub const JOB_OBJECT_MSG_END_OF_PROCESS_TIME: DWORD = 2;
3540 pub const JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT: DWORD = 3;
3541 pub const JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO: DWORD = 4;
3542 pub const JOB_OBJECT_MSG_NEW_PROCESS: DWORD = 6;
3543 pub const JOB_OBJECT_MSG_EXIT_PROCESS: DWORD = 7;
3544 pub const JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS: DWORD = 8;
3545 pub const JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT: DWORD = 9;
3546 pub const JOB_OBJECT_MSG_JOB_MEMORY_LIMIT: DWORD = 10;
3547 pub const JOB_OBJECT_MSG_NOTIFICATION_LIMIT: DWORD = 11;
3548 pub const JOB_OBJECT_MSG_JOB_CYCLE_TIME_LIMIT: DWORD = 12;
3549 pub const JOB_OBJECT_MSG_SILO_TERMINATED: DWORD = 13;
3550 pub const JOB_OBJECT_MSG_MINIMUM: DWORD = 1;
3551 pub const JOB_OBJECT_MSG_MAXIMUM: DWORD = 13;
3552 pub const JOB_OBJECT_VALID_COMPLETION_FILTER: DWORD = ((1 << (JOB_OBJECT_MSG_MAXIMUM + 1)) - 1)
3553     - ((1 << JOB_OBJECT_MSG_MINIMUM) - 1);
3554 pub const JOB_OBJECT_LIMIT_WORKINGSET: DWORD = 0x00000001;
3555 pub const JOB_OBJECT_LIMIT_PROCESS_TIME: DWORD = 0x00000002;
3556 pub const JOB_OBJECT_LIMIT_JOB_TIME: DWORD = 0x00000004;
3557 pub const JOB_OBJECT_LIMIT_ACTIVE_PROCESS: DWORD = 0x00000008;
3558 pub const JOB_OBJECT_LIMIT_AFFINITY: DWORD = 0x00000010;
3559 pub const JOB_OBJECT_LIMIT_PRIORITY_CLASS: DWORD = 0x00000020;
3560 pub const JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME: DWORD = 0x00000040;
3561 pub const JOB_OBJECT_LIMIT_SCHEDULING_CLASS: DWORD = 0x00000080;
3562 pub const JOB_OBJECT_LIMIT_PROCESS_MEMORY: DWORD = 0x00000100;
3563 pub const JOB_OBJECT_LIMIT_JOB_MEMORY: DWORD = 0x00000200;
3564 pub const JOB_OBJECT_LIMIT_JOB_MEMORY_HIGH: DWORD = JOB_OBJECT_LIMIT_JOB_MEMORY;
3565 pub const JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION: DWORD = 0x00000400;
3566 pub const JOB_OBJECT_LIMIT_BREAKAWAY_OK: DWORD = 0x00000800;
3567 pub const JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK: DWORD = 0x00001000;
3568 pub const JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE: DWORD = 0x00002000;
3569 pub const JOB_OBJECT_LIMIT_SUBSET_AFFINITY: DWORD = 0x00004000;
3570 pub const JOB_OBJECT_LIMIT_JOB_MEMORY_LOW: DWORD = 0x00008000;
3571 pub const JOB_OBJECT_LIMIT_JOB_READ_BYTES: DWORD = 0x00010000;
3572 pub const JOB_OBJECT_LIMIT_JOB_WRITE_BYTES: DWORD = 0x00020000;
3573 pub const JOB_OBJECT_LIMIT_RATE_CONTROL: DWORD = 0x00040000;
3574 pub const JOB_OBJECT_LIMIT_CPU_RATE_CONTROL: DWORD = JOB_OBJECT_LIMIT_RATE_CONTROL;
3575 pub const JOB_OBJECT_LIMIT_IO_RATE_CONTROL: DWORD = 0x00008000;
3576 pub const JOB_OBJECT_LIMIT_NET_RATE_CONTROL: DWORD = 0x00010000;
3577 pub const JOB_OBJECT_LIMIT_VALID_FLAGS: DWORD = 0x0007ffff;
3578 pub const JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS: DWORD = 0x000000ff;
3579 pub const JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS: DWORD = 0x00007fff;
3580 pub const JOB_OBJECT_NOTIFICATION_LIMIT_VALID_FLAGS: DWORD = JOB_OBJECT_LIMIT_JOB_READ_BYTES
3581     | JOB_OBJECT_LIMIT_JOB_WRITE_BYTES | JOB_OBJECT_LIMIT_JOB_TIME
3582     | JOB_OBJECT_LIMIT_JOB_MEMORY_LOW | JOB_OBJECT_LIMIT_JOB_MEMORY_HIGH
3583     | JOB_OBJECT_LIMIT_CPU_RATE_CONTROL | JOB_OBJECT_LIMIT_IO_RATE_CONTROL
3584     | JOB_OBJECT_LIMIT_NET_RATE_CONTROL;
3585 pub const JOB_OBJECT_UILIMIT_NONE: DWORD = 0x00000000;
3586 pub const JOB_OBJECT_UILIMIT_HANDLES: DWORD = 0x00000001;
3587 pub const JOB_OBJECT_UILIMIT_READCLIPBOARD: DWORD = 0x00000002;
3588 pub const JOB_OBJECT_UILIMIT_WRITECLIPBOARD: DWORD = 0x00000004;
3589 pub const JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS: DWORD = 0x00000008;
3590 pub const JOB_OBJECT_UILIMIT_DISPLAYSETTINGS: DWORD = 0x00000010;
3591 pub const JOB_OBJECT_UILIMIT_GLOBALATOMS: DWORD = 0x00000020;
3592 pub const JOB_OBJECT_UILIMIT_DESKTOP: DWORD = 0x00000040;
3593 pub const JOB_OBJECT_UILIMIT_EXITWINDOWS: DWORD = 0x00000080;
3594 pub const JOB_OBJECT_UILIMIT_ALL: DWORD = 0x000000FF;
3595 pub const JOB_OBJECT_UI_VALID_FLAGS: DWORD = 0x000000FF;
3596 pub const JOB_OBJECT_SECURITY_NO_ADMIN: DWORD = 0x00000001;
3597 pub const JOB_OBJECT_SECURITY_RESTRICTED_TOKEN: DWORD = 0x00000002;
3598 pub const JOB_OBJECT_SECURITY_ONLY_TOKEN: DWORD = 0x00000004;
3599 pub const JOB_OBJECT_SECURITY_FILTER_TOKENS: DWORD = 0x00000008;
3600 pub const JOB_OBJECT_SECURITY_VALID_FLAGS: DWORD = 0x0000000f;
3601 pub const JOB_OBJECT_CPU_RATE_CONTROL_ENABLE: DWORD = 0x1;
3602 pub const JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED: DWORD = 0x2;
3603 pub const JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP: DWORD = 0x4;
3604 pub const JOB_OBJECT_CPU_RATE_CONTROL_NOTIFY: DWORD = 0x8;
3605 pub const JOB_OBJECT_CPU_RATE_CONTROL_MIN_MAX_RATE: DWORD = 0x10;
3606 pub const JOB_OBJECT_CPU_RATE_CONTROL_VALID_FLAGS: DWORD = 0x1f;
3607 ENUM!{enum JOBOBJECTINFOCLASS {
3608     JobObjectBasicAccountingInformation = 1,
3609     JobObjectBasicLimitInformation,
3610     JobObjectBasicProcessIdList,
3611     JobObjectBasicUIRestrictions,
3612     JobObjectSecurityLimitInformation,
3613     JobObjectEndOfJobTimeInformation,
3614     JobObjectAssociateCompletionPortInformation,
3615     JobObjectBasicAndIoAccountingInformation,
3616     JobObjectExtendedLimitInformation,
3617     JobObjectJobSetInformation,
3618     JobObjectGroupInformation,
3619     JobObjectNotificationLimitInformation,
3620     JobObjectLimitViolationInformation,
3621     JobObjectGroupInformationEx,
3622     JobObjectCpuRateControlInformation,
3623     JobObjectCompletionFilter,
3624     JobObjectCompletionCounter,
3625     JobObjectReserved1Information = 18,
3626     JobObjectReserved2Information,
3627     JobObjectReserved3Information,
3628     JobObjectReserved4Information,
3629     JobObjectReserved5Information,
3630     JobObjectReserved6Information,
3631     JobObjectReserved7Information,
3632     JobObjectReserved8Information,
3633     JobObjectReserved9Information,
3634     JobObjectReserved10Information,
3635     JobObjectReserved11Information,
3636     JobObjectReserved12Information,
3637     JobObjectReserved13Information,
3638     JobObjectReserved14Information = 31,
3639     JobObjectNetRateControlInformation,
3640     JobObjectNotificationLimitInformation2,
3641     JobObjectLimitViolationInformation2,
3642     JobObjectCreateSilo,
3643     JobObjectSiloBasicInformation,
3644     JobObjectReserved15Information = 37,
3645     JobObjectReserved16Information = 38,
3646     JobObjectReserved17Information = 39,
3647     JobObjectReserved18Information = 40,
3648     JobObjectReserved19Information = 41,
3649     JobObjectReserved20Information = 42,
3650     JobObjectReserved21Information = 43,
3651     JobObjectReserved22Information = 44,
3652     JobObjectReserved23Information = 45,
3653     JobObjectReserved24Information = 46,
3654     JobObjectReserved25Information = 47,
3655     MaxJobObjectInfoClass,
3656 }}
3657 STRUCT!{struct SILOOBJECT_BASIC_INFORMATION {
3658     SiloId: DWORD,
3659     SiloParentId: DWORD,
3660     NumberOfProcesses: DWORD,
3661     IsInServerSilo: BOOLEAN,
3662     Reserved: [BYTE; 3],
3663 }}
3664 pub type PSILOOBJECT_BASIC_INFORMATION = *mut SILOOBJECT_BASIC_INFORMATION;
3665 ENUM!{enum SERVERSILO_STATE {
3666     SERVERSILO_INITING = 0,
3667     SERVERSILO_STARTED,
3668     SERVERSILO_SHUTTING_DOWN,
3669     SERVERSILO_TERMINATING,
3670     SERVERSILO_TERMINATED,
3671 }}
3672 pub type PSERVERSILO_STATE = *mut SERVERSILO_STATE;
3673 STRUCT!{struct SERVERSILO_BASIC_INFORMATION {
3674     ServiceSessionId: DWORD,
3675     State: SERVERSILO_STATE,
3676     ExitStatus: DWORD,
3677 }}
3678 pub type PSERVERSILO_BASIC_INFORMATION = *mut SERVERSILO_BASIC_INFORMATION;
3679 ENUM!{enum FIRMWARE_TYPE {
3680     FirmwareTypeUnknown,
3681     FirmwareTypeBios,
3682     FirmwareTypeUefi,
3683     FirmwareTypeMax,
3684 }}
3685 pub type PFIRMWARE_TYPE = *mut FIRMWARE_TYPE;
3686 pub const EVENT_MODIFY_STATE: DWORD = 0x0002;
3687 pub const EVENT_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3;
3688 pub const MUTANT_QUERY_STATE: DWORD = 0x0001;
3689 pub const MUTANT_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MUTANT_QUERY_STATE;
3690 pub const SEMAPHORE_MODIFY_STATE: DWORD = 0x0002;
3691 pub const SEMAPHORE_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3;
3692 pub const TIMER_QUERY_STATE: DWORD = 0x0001;
3693 pub const TIMER_MODIFY_STATE: DWORD = 0x0002;
3694 pub const TIMER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | TIMER_QUERY_STATE
3695     | TIMER_MODIFY_STATE;
3696 pub const TIME_ZONE_ID_UNKNOWN: DWORD = 0;
3697 pub const TIME_ZONE_ID_STANDARD: DWORD = 1;
3698 pub const TIME_ZONE_ID_DAYLIGHT: DWORD = 2;
3699 ENUM!{enum LOGICAL_PROCESSOR_RELATIONSHIP {
3700     RelationProcessorCore,
3701     RelationNumaNode,
3702     RelationCache,
3703     RelationProcessorPackage,
3704     RelationGroup,
3705     RelationAll = 0xffff,
3706 }}
3707 pub const LTP_PC_SMT: BYTE = 0x1;
3708 ENUM!{enum PROCESSOR_CACHE_TYPE {
3709     CacheUnified,
3710     CacheInstruction,
3711     CacheData,
3712     CacheTrace,
3713 }}
3714 pub const CACHE_FULLY_ASSOCIATIVE: BYTE = 0xFF;
3715 STRUCT!{struct CACHE_DESCRIPTOR {
3716     Level: BYTE,
3717     Associativity: BYTE,
3718     LineSize: WORD,
3719     Size: DWORD,
3720     Type: PROCESSOR_CACHE_TYPE,
3721 }}
3722 pub type PCACHE_DESCRIPTOR = *mut CACHE_DESCRIPTOR;
3723 STRUCT!{struct SYSTEM_LOGICAL_PROCESSOR_INFORMATION_ProcessorCore {
3724     Flags: BYTE,
3725 }}
3726 STRUCT!{struct SYSTEM_LOGICAL_PROCESSOR_INFORMATION_NumaNode {
3727     NodeNumber: DWORD,
3728 }}
3729 UNION!{union SYSTEM_LOGICAL_PROCESSOR_INFORMATION_u {
3730     [u64; 2],
3731     ProcessorCore ProcessorCore_mut: SYSTEM_LOGICAL_PROCESSOR_INFORMATION_ProcessorCore,
3732     NumaNode NumaNode_mut: SYSTEM_LOGICAL_PROCESSOR_INFORMATION_NumaNode,
3733     Cache Cache_mut: CACHE_DESCRIPTOR,
3734     Reserved Reserved_mut: [ULONGLONG; 2],
3735 }}
3736 STRUCT!{struct SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
3737     ProcessorMask: ULONG_PTR,
3738     Relationship: LOGICAL_PROCESSOR_RELATIONSHIP,
3739     u: SYSTEM_LOGICAL_PROCESSOR_INFORMATION_u,
3740 }}
3741 pub type PSYSTEM_LOGICAL_PROCESSOR_INFORMATION = *mut SYSTEM_LOGICAL_PROCESSOR_INFORMATION;
3742 STRUCT!{struct PROCESSOR_RELATIONSHIP {
3743     Flags: BYTE,
3744     EfficiencyClass: BYTE,
3745     Reserved: [BYTE; 20],
3746     GroupCount: WORD,
3747     GroupMask: [GROUP_AFFINITY; ANYSIZE_ARRAY],
3748 }}
3749 pub type PPROCESSOR_RELATIONSHIP = *mut PROCESSOR_RELATIONSHIP;
3750 STRUCT!{struct NUMA_NODE_RELATIONSHIP {
3751     NodeNumber: DWORD,
3752     Reserved: [BYTE; 20],
3753     GroupMask: GROUP_AFFINITY,
3754 }}
3755 pub type PNUMA_NODE_RELATIONSHIP = *mut NUMA_NODE_RELATIONSHIP;
3756 STRUCT!{struct CACHE_RELATIONSHIP {
3757     Level: BYTE,
3758     Associativity: BYTE,
3759     LineSize: WORD,
3760     CacheSize: DWORD,
3761     Type: PROCESSOR_CACHE_TYPE,
3762     Reserved: [BYTE; 20],
3763     GroupMask: GROUP_AFFINITY,
3764 }}
3765 pub type PCACHE_RELATIONSHIP = *mut CACHE_RELATIONSHIP;
3766 STRUCT!{struct PROCESSOR_GROUP_INFO {
3767     MaximumProcessorCount: BYTE,
3768     ActiveProcessorCount: BYTE,
3769     Reserved: [BYTE; 38],
3770     ActiveProcessorMask: KAFFINITY,
3771 }}
3772 pub type PPROCESSOR_GROUP_INFO = *mut PROCESSOR_GROUP_INFO;
3773 STRUCT!{struct GROUP_RELATIONSHIP {
3774     MaximumGroupCount: WORD,
3775     ActiveGroupCount: WORD,
3776     Reserved: [BYTE; 20],
3777     GroupInfo: [PROCESSOR_GROUP_INFO; ANYSIZE_ARRAY],
3778 }}
3779 pub type PGROUP_RELATIONSHIP = *mut GROUP_RELATIONSHIP;
3780 UNION!{union SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX_u {
3781     [u32; 17] [u64; 9],
3782     Processor Processor_mut: PROCESSOR_RELATIONSHIP,
3783     NumaNode NumaNode_mut: NUMA_NODE_RELATIONSHIP,
3784     Cache Cache_mut: CACHE_RELATIONSHIP,
3785     Group Group_mut: GROUP_RELATIONSHIP,
3786 }}
3787 STRUCT!{struct SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
3788     Relationship: LOGICAL_PROCESSOR_RELATIONSHIP,
3789     Size: DWORD,
3790     u: SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX_u,
3791 }}
3792 pub type PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX = *mut SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;
3793 ENUM!{enum CPU_SET_INFORMATION_TYPE {
3794     CpuSetInformation,
3795 }}
3796 pub type PCPU_SET_INFORMATION_TYPE = *mut CPU_SET_INFORMATION_TYPE;
3797 pub const SYSTEM_CPU_SET_INFORMATION_PARKED: BYTE = 0x1;
3798 pub const SYSTEM_CPU_SET_INFORMATION_ALLOCATED: BYTE = 0x2;
3799 pub const SYSTEM_CPU_SET_INFORMATION_ALLOCATED_TO_TARGET_PROCESS: BYTE = 0x4;
3800 pub const SYSTEM_CPU_SET_INFORMATION_REALTIME: BYTE = 0x8;
3801 STRUCT!{struct SYSTEM_CPU_SET_INFORMATION_CpuSet {
3802     Id: DWORD,
3803     Group: WORD,
3804     LogicalProcessorIndex: BYTE,
3805     CoreIndex: BYTE,
3806     LastLevelCacheIndex: BYTE,
3807     NumaNodeIndex: BYTE,
3808     EfficiencyClass: BYTE,
3809     AllFlags: BYTE,
3810     Reserved: DWORD,
3811     AllocationTag: DWORD64,
3812 }}
3813 BITFIELD!{SYSTEM_CPU_SET_INFORMATION_CpuSet AllFlags: BYTE [
3814     Parked set_Parked[0..1],
3815     Allocated set_Allocated[1..2],
3816     AllocatedToTargetProcess set_AllocatedToTargetProcess[2..3],
3817     RealTime set_RealTime[3..4],
3818     ReservedFlags set_ReservedFlags[4..8],
3819 ]}
3820 STRUCT!{struct SYSTEM_CPU_SET_INFORMATION {
3821     Size: DWORD,
3822     Type: CPU_SET_INFORMATION_TYPE,
3823     CpuSet: SYSTEM_CPU_SET_INFORMATION_CpuSet,
3824 }}
3825 pub type PSYSTEM_CPU_SET_INFORMATION = *mut SYSTEM_CPU_SET_INFORMATION;
3826 STRUCT!{struct SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION {
3827     CycleTime: DWORD64,
3828 }}
3829 pub type PSYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION = *mut SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION;
3830 pub const PROCESSOR_INTEL_386: DWORD = 386;
3831 pub const PROCESSOR_INTEL_486: DWORD = 486;
3832 pub const PROCESSOR_INTEL_PENTIUM: DWORD = 586;
3833 pub const PROCESSOR_INTEL_IA64: DWORD = 2200;
3834 pub const PROCESSOR_AMD_X8664: DWORD = 8664;
3835 pub const PROCESSOR_MIPS_R4000: DWORD = 4000;
3836 pub const PROCESSOR_ALPHA_21064: DWORD = 21064;
3837 pub const PROCESSOR_PPC_601: DWORD = 601;
3838 pub const PROCESSOR_PPC_603: DWORD = 603;
3839 pub const PROCESSOR_PPC_604: DWORD = 604;
3840 pub const PROCESSOR_PPC_620: DWORD = 620;
3841 pub const PROCESSOR_HITACHI_SH3: DWORD = 10003;
3842 pub const PROCESSOR_HITACHI_SH3E: DWORD = 10004;
3843 pub const PROCESSOR_HITACHI_SH4: DWORD = 10005;
3844 pub const PROCESSOR_MOTOROLA_821: DWORD = 821;
3845 pub const PROCESSOR_SHx_SH3: DWORD = 103;
3846 pub const PROCESSOR_SHx_SH4: DWORD = 104;
3847 pub const PROCESSOR_STRONGARM: DWORD = 2577;
3848 pub const PROCESSOR_ARM720: DWORD = 1824;
3849 pub const PROCESSOR_ARM820: DWORD = 2080;
3850 pub const PROCESSOR_ARM920: DWORD = 2336;
3851 pub const PROCESSOR_ARM_7TDMI: DWORD = 70001;
3852 pub const PROCESSOR_OPTIL: DWORD = 0x494f;
3853 pub const PROCESSOR_ARCHITECTURE_INTEL: WORD = 0;
3854 pub const PROCESSOR_ARCHITECTURE_MIPS: WORD = 1;
3855 pub const PROCESSOR_ARCHITECTURE_ALPHA: WORD = 2;
3856 pub const PROCESSOR_ARCHITECTURE_PPC: WORD = 3;
3857 pub const PROCESSOR_ARCHITECTURE_SHX: WORD = 4;
3858 pub const PROCESSOR_ARCHITECTURE_ARM: WORD = 5;
3859 pub const PROCESSOR_ARCHITECTURE_IA64: WORD = 6;
3860 pub const PROCESSOR_ARCHITECTURE_ALPHA64: WORD = 7;
3861 pub const PROCESSOR_ARCHITECTURE_MSIL: WORD = 8;
3862 pub const PROCESSOR_ARCHITECTURE_AMD64: WORD = 9;
3863 pub const PROCESSOR_ARCHITECTURE_IA32_ON_WIN64: WORD = 10;
3864 pub const PROCESSOR_ARCHITECTURE_NEUTRAL: WORD = 11;
3865 pub const PROCESSOR_ARCHITECTURE_ARM64: WORD = 12;
3866 pub const PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64: WORD = 13;
3867 pub const PROCESSOR_ARCHITECTURE_IA32_ON_ARM64: WORD = 14;
3868 pub const PROCESSOR_ARCHITECTURE_UNKNOWN: WORD = 0xFFFF;
3869 pub const PF_FLOATING_POINT_PRECISION_ERRATA: DWORD = 0;
3870 pub const PF_FLOATING_POINT_EMULATED: DWORD = 1;
3871 pub const PF_COMPARE_EXCHANGE_DOUBLE: DWORD = 2;
3872 pub const PF_MMX_INSTRUCTIONS_AVAILABLE: DWORD = 3;
3873 pub const PF_PPC_MOVEMEM_64BIT_OK: DWORD = 4;
3874 pub const PF_ALPHA_BYTE_INSTRUCTIONS: DWORD = 5;
3875 pub const PF_XMMI_INSTRUCTIONS_AVAILABLE: DWORD = 6;
3876 pub const PF_3DNOW_INSTRUCTIONS_AVAILABLE: DWORD = 7;
3877 pub const PF_RDTSC_INSTRUCTION_AVAILABLE: DWORD = 8;
3878 pub const PF_PAE_ENABLED: DWORD = 9;
3879 pub const PF_XMMI64_INSTRUCTIONS_AVAILABLE: DWORD = 10;
3880 pub const PF_SSE_DAZ_MODE_AVAILABLE: DWORD = 11;
3881 pub const PF_NX_ENABLED: DWORD = 12;
3882 pub const PF_SSE3_INSTRUCTIONS_AVAILABLE: DWORD = 13;
3883 pub const PF_COMPARE_EXCHANGE128: DWORD = 14;
3884 pub const PF_COMPARE64_EXCHANGE128: DWORD = 15;
3885 pub const PF_CHANNELS_ENABLED: DWORD = 16;
3886 pub const PF_XSAVE_ENABLED: DWORD = 17;
3887 pub const PF_ARM_VFP_32_REGISTERS_AVAILABLE: DWORD = 18;
3888 pub const PF_ARM_NEON_INSTRUCTIONS_AVAILABLE: DWORD = 19;
3889 pub const PF_SECOND_LEVEL_ADDRESS_TRANSLATION: DWORD = 20;
3890 pub const PF_VIRT_FIRMWARE_ENABLED: DWORD = 21;
3891 pub const PF_RDWRFSGSBASE_AVAILABLE: DWORD = 22;
3892 pub const PF_FASTFAIL_AVAILABLE: DWORD = 23;
3893 pub const PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE: DWORD = 24;
3894 pub const PF_ARM_64BIT_LOADSTORE_ATOMIC: DWORD = 25;
3895 pub const PF_ARM_EXTERNAL_CACHE_AVAILABLE: DWORD = 26;
3896 pub const PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE: DWORD = 27;
3897 pub const PF_RDRAND_INSTRUCTION_AVAILABLE: DWORD = 28;
3898 pub const PF_ARM_V8_INSTRUCTIONS_AVAILABLE: DWORD = 29;
3899 pub const PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE: DWORD = 30;
3900 pub const PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE: DWORD = 31;
3901 pub const PF_RDTSCP_INSTRUCTION_AVAILABLE: DWORD = 32;
3902 pub const XSTATE_LEGACY_FLOATING_POINT: ULONG64 = 0;
3903 pub const XSTATE_LEGACY_SSE: ULONG64 = 1;
3904 pub const XSTATE_GSSE: ULONG64 = 2;
3905 pub const XSTATE_AVX: ULONG64 = XSTATE_GSSE;
3906 pub const XSTATE_MPX_BNDREGS: ULONG64 = 3;
3907 pub const XSTATE_MPX_BNDCSR: ULONG64 = 4;
3908 pub const XSTATE_AVX512_KMASK: ULONG64 = 5;
3909 pub const XSTATE_AVX512_ZMM_H: ULONG64 = 6;
3910 pub const XSTATE_AVX512_ZMM: ULONG64 = 7;
3911 pub const XSTATE_IPT: ULONG64 = 8;
3912 pub const XSTATE_LWP: ULONG64 = 62;
3913 pub const MAXIMUM_XSTATE_FEATURES: usize = 64;
3914 pub const XSTATE_MASK_LEGACY_FLOATING_POINT: ULONG64 = 1 << XSTATE_LEGACY_FLOATING_POINT;
3915 pub const XSTATE_MASK_LEGACY_SSE: ULONG64 = 1 << XSTATE_LEGACY_SSE;
3916 pub const XSTATE_MASK_LEGACY: ULONG64 = XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE;
3917 pub const XSTATE_MASK_GSSE: ULONG64 = 1 << XSTATE_GSSE;
3918 pub const XSTATE_MASK_AVX: ULONG64 = XSTATE_MASK_GSSE;
3919 pub const XSTATE_MASK_MPX: ULONG64 = (1 << XSTATE_MPX_BNDREGS) | (1 << XSTATE_MPX_BNDCSR);
3920 pub const XSTATE_MASK_AVX512: ULONG64 = (1 << XSTATE_AVX512_KMASK) | (1 << XSTATE_AVX512_ZMM_H)
3921     | (1 << XSTATE_AVX512_ZMM);
3922 pub const XSTATE_MASK_IPT: ULONG64 = 1 << XSTATE_IPT;
3923 pub const XSTATE_MASK_LWP: ULONG64 = 1 << XSTATE_LWP;
3924 pub const XSTATE_MASK_ALLOWED: ULONG64 = XSTATE_MASK_LEGACY | XSTATE_MASK_AVX | XSTATE_MASK_MPX
3925     | XSTATE_MASK_AVX512 | XSTATE_MASK_IPT | XSTATE_MASK_LWP;
3926 pub const XSTATE_MASK_PERSISTENT: ULONG64 = (1 << XSTATE_MPX_BNDCSR) | XSTATE_MASK_LWP;
3927 pub const XSTATE_COMPACTION_ENABLE: ULONG64 = 63;
3928 pub const XSTATE_COMPACTION_ENABLE_MASK: ULONG64 = 1 << XSTATE_COMPACTION_ENABLE;
3929 pub const XSTATE_ALIGN_BIT: ULONG64 = 1;
3930 pub const XSTATE_ALIGN_MASK: ULONG64 = 1 << XSTATE_ALIGN_BIT;
3931 pub const XSTATE_CONTROLFLAG_XSAVEOPT_MASK: ULONG64 = 1;
3932 pub const XSTATE_CONTROLFLAG_XSAVEC_MASK: ULONG64 = 2;
3933 pub const XSTATE_CONTROLFLAG_VALID_MASK: ULONG64 = XSTATE_CONTROLFLAG_XSAVEOPT_MASK
3934     | XSTATE_CONTROLFLAG_XSAVEC_MASK;
3935 STRUCT!{struct XSTATE_FEATURE {
3936     Offset: DWORD,
3937     Size: DWORD,
3938 }}
3939 pub type PXSTATE_FEATURE = *mut XSTATE_FEATURE;
3940 STRUCT!{struct XSTATE_CONFIGURATION {
3941     EnabledFeatures: DWORD64,
3942     EnabledVolatileFeatures: DWORD64,
3943     Size: DWORD,
3944     ControlFlags: DWORD,
3945     Features: [XSTATE_FEATURE; MAXIMUM_XSTATE_FEATURES],
3946     EnabledSupervisorFeatures: DWORD64,
3947     AlignedFeatures: DWORD64,
3948     AllFeatureSize: DWORD,
3949     AllFeatures: [DWORD; MAXIMUM_XSTATE_FEATURES],
3950 }}
3951 BITFIELD!{XSTATE_CONFIGURATION ControlFlags: DWORD [
3952     OptimizedSave set_OptimizedSave[0..1],
3953     CompactionEnabled set_CompactionEnabled[1..2],
3954 ]}
3955 pub type PXSTATE_CONFIGURATION = *mut XSTATE_CONFIGURATION;
3956 STRUCT!{struct MEMORY_BASIC_INFORMATION {
3957     BaseAddress: PVOID,
3958     AllocationBase: PVOID,
3959     AllocationProtect: DWORD,
3960     RegionSize: SIZE_T,
3961     State: DWORD,
3962     Protect: DWORD,
3963     Type: DWORD,
3964 }}
3965 pub type PMEMORY_BASIC_INFORMATION = *mut MEMORY_BASIC_INFORMATION;
3966 STRUCT!{struct MEMORY_BASIC_INFORMATION32 {
3967     BaseAddress: DWORD,
3968     AllocationBase: DWORD,
3969     AllocationProtect: DWORD,
3970     RegionSize: DWORD,
3971     State: DWORD,
3972     Protect: DWORD,
3973     Type: DWORD,
3974 }}
3975 pub type PMEMORY_BASIC_INFORMATION32 = *mut MEMORY_BASIC_INFORMATION32;
3976 STRUCT!{struct MEMORY_BASIC_INFORMATION64 { // FIXME: align 16
3977     BaseAddress: ULONGLONG,
3978     AllocationBase: ULONGLONG,
3979     AllocationProtect: DWORD,
3980     __alignment1: DWORD,
3981     RegionSize: ULONGLONG,
3982     State: DWORD,
3983     Protect: DWORD,
3984     Type: DWORD,
3985     __alignment2: DWORD,
3986 }}
3987 pub type PMEMORY_BASIC_INFORMATION64 = *mut MEMORY_BASIC_INFORMATION64;
3988 pub const CFG_CALL_TARGET_VALID: ULONG_PTR = 0x00000001;
3989 pub const CFG_CALL_TARGET_PROCESSED: ULONG_PTR = 0x00000002;
3990 pub const CFG_CALL_TARGET_CONVERT_EXPORT_SUPPRESSED_TO_VALID: ULONG_PTR = 0x00000004;
3991 STRUCT!{struct CFG_CALL_TARGET_INFO {
3992     Offset: ULONG_PTR,
3993     Flags: ULONG_PTR,
3994 }}
3995 pub type PCFG_CALL_TARGET_INFO = *mut CFG_CALL_TARGET_INFO;
3996 pub const SECTION_QUERY: DWORD = 0x0001;
3997 pub const SECTION_MAP_WRITE: DWORD = 0x0002;
3998 pub const SECTION_MAP_READ: DWORD = 0x0004;
3999 pub const SECTION_MAP_EXECUTE: DWORD = 0x0008;
4000 pub const SECTION_EXTEND_SIZE: DWORD = 0x0010;
4001 pub const SECTION_MAP_EXECUTE_EXPLICIT: DWORD = 0x0020;
4002 pub const SECTION_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SECTION_QUERY
4003     | SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE;
4004 pub const SESSION_QUERY_ACCESS: DWORD = 0x0001;
4005 pub const SESSION_MODIFY_ACCESS: DWORD = 0x0002;
4006 pub const SESSION_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SESSION_QUERY_ACCESS
4007     | SESSION_MODIFY_ACCESS;
4008 pub const MEMORY_PARTITION_QUERY_ACCESS: DWORD = 0x0001;
4009 pub const MEMORY_PARTITION_MODIFY_ACCESS: DWORD = 0x0002;
4010 pub const MEMORY_PARTITION_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE
4011     | MEMORY_PARTITION_QUERY_ACCESS | MEMORY_PARTITION_MODIFY_ACCESS;
4012 pub const PAGE_NOACCESS: DWORD = 0x01;
4013 pub const PAGE_READONLY: DWORD = 0x02;
4014 pub const PAGE_READWRITE: DWORD = 0x04;
4015 pub const PAGE_WRITECOPY: DWORD = 0x08;
4016 pub const PAGE_EXECUTE: DWORD = 0x10;
4017 pub const PAGE_EXECUTE_READ: DWORD = 0x20;
4018 pub const PAGE_EXECUTE_READWRITE: DWORD = 0x40;
4019 pub const PAGE_EXECUTE_WRITECOPY: DWORD = 0x80;
4020 pub const PAGE_GUARD: DWORD = 0x100;
4021 pub const PAGE_NOCACHE: DWORD = 0x200;
4022 pub const PAGE_WRITECOMBINE: DWORD = 0x400;
4023 pub const PAGE_ENCLAVE_THREAD_CONTROL: DWORD = 0x80000000;
4024 pub const PAGE_REVERT_TO_FILE_MAP: DWORD = 0x80000000;
4025 pub const PAGE_TARGETS_NO_UPDATE: DWORD = 0x40000000;
4026 pub const PAGE_TARGETS_INVALID: DWORD = 0x40000000;
4027 pub const PAGE_ENCLAVE_UNVALIDATED: DWORD = 0x20000000;
4028 pub const PAGE_ENCLAVE_DECOMMIT: DWORD = 0x10000000;
4029 pub const MEM_COMMIT: DWORD = 0x1000;
4030 pub const MEM_RESERVE: DWORD = 0x2000;
4031 pub const MEM_DECOMMIT: DWORD = 0x4000;
4032 pub const MEM_RELEASE: DWORD = 0x8000;
4033 pub const MEM_FREE: DWORD = 0x10000;
4034 pub const MEM_PRIVATE: DWORD = 0x20000;
4035 pub const MEM_MAPPED: DWORD = 0x40000;
4036 pub const MEM_RESET: DWORD = 0x80000;
4037 pub const MEM_TOP_DOWN: DWORD = 0x100000;
4038 pub const MEM_WRITE_WATCH: DWORD = 0x200000;
4039 pub const MEM_PHYSICAL: DWORD = 0x400000;
4040 pub const MEM_ROTATE: DWORD = 0x800000;
4041 pub const MEM_DIFFERENT_IMAGE_BASE_OK: DWORD = 0x800000;
4042 pub const MEM_RESET_UNDO: DWORD = 0x1000000;
4043 pub const MEM_LARGE_PAGES: DWORD = 0x20000000;
4044 pub const MEM_4MB_PAGES: DWORD = 0x80000000;
4045 pub const MEM_64K_PAGES: DWORD = MEM_LARGE_PAGES | MEM_PHYSICAL;
4046 pub const SEC_64K_PAGES: DWORD = 0x00080000;
4047 pub const SEC_FILE: DWORD = 0x800000;
4048 pub const SEC_IMAGE: DWORD = 0x1000000;
4049 pub const SEC_PROTECTED_IMAGE: DWORD = 0x2000000;
4050 pub const SEC_RESERVE: DWORD = 0x4000000;
4051 pub const SEC_COMMIT: DWORD = 0x8000000;
4052 pub const SEC_NOCACHE: DWORD = 0x10000000;
4053 pub const SEC_WRITECOMBINE: DWORD = 0x40000000;
4054 pub const SEC_LARGE_PAGES: DWORD = 0x80000000;
4055 pub const SEC_IMAGE_NO_EXECUTE: DWORD = (SEC_IMAGE | SEC_NOCACHE);
4056 pub const MEM_IMAGE: DWORD = SEC_IMAGE;
4057 pub const WRITE_WATCH_FLAG_RESET: DWORD = 0x01;
4058 pub const MEM_UNMAP_WITH_TRANSIENT_BOOST: DWORD = 0x01;
4059 pub const ENCLAVE_TYPE_SGX: DWORD = 0x00000001;
4060 pub const ENCLAVE_TYPE_SGX2: DWORD = 0x00000002;
4061 STRUCT!{struct ENCLAVE_CREATE_INFO_SGX {
4062     Secs: [BYTE; 4096],
4063 }}
4064 pub type PENCLAVE_CREATE_INFO_SGX = *mut ENCLAVE_CREATE_INFO_SGX;
4065 STRUCT!{struct ENCLAVE_INIT_INFO_SGX {
4066     SigStruct: [BYTE; 1808],
4067     Reserved1: [BYTE; 240],
4068     EInitToken: [BYTE; 304],
4069     Reserved2: [BYTE; 1744],
4070 }}
4071 pub type PENCLAVE_INIT_INFO_SGX = *mut ENCLAVE_INIT_INFO_SGX;
4072 pub const FILE_READ_DATA: DWORD = 0x0001;
4073 pub const FILE_LIST_DIRECTORY: DWORD = 0x0001;
4074 pub const FILE_WRITE_DATA: DWORD = 0x0002;
4075 pub const FILE_ADD_FILE: DWORD = 0x0002;
4076 pub const FILE_APPEND_DATA: DWORD = 0x0004;
4077 pub const FILE_ADD_SUBDIRECTORY: DWORD = 0x0004;
4078 pub const FILE_CREATE_PIPE_INSTANCE: DWORD = 0x0004;
4079 pub const FILE_READ_EA: DWORD = 0x0008;
4080 pub const FILE_WRITE_EA: DWORD = 0x0010;
4081 pub const FILE_EXECUTE: DWORD = 0x0020;
4082 pub const FILE_TRAVERSE: DWORD = 0x0020;
4083 pub const FILE_DELETE_CHILD: DWORD = 0x0040;
4084 pub const FILE_READ_ATTRIBUTES: DWORD = 0x0080;
4085 pub const FILE_WRITE_ATTRIBUTES: DWORD = 0x0100;
4086 pub const FILE_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF;
4087 pub const FILE_GENERIC_READ: DWORD = STANDARD_RIGHTS_READ | FILE_READ_DATA
4088     | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE;
4089 pub const FILE_GENERIC_WRITE: DWORD = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA
4090     | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE;
4091 pub const FILE_GENERIC_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES
4092     | FILE_EXECUTE | SYNCHRONIZE;
4093 pub const FILE_SHARE_READ: DWORD = 0x00000001;
4094 pub const FILE_SHARE_WRITE: DWORD = 0x00000002;
4095 pub const FILE_SHARE_DELETE: DWORD = 0x00000004;
4096 pub const FILE_ATTRIBUTE_READONLY: DWORD = 0x00000001;
4097 pub const FILE_ATTRIBUTE_HIDDEN: DWORD = 0x00000002;
4098 pub const FILE_ATTRIBUTE_SYSTEM: DWORD = 0x00000004;
4099 pub const FILE_ATTRIBUTE_DIRECTORY: DWORD = 0x00000010;
4100 pub const FILE_ATTRIBUTE_ARCHIVE: DWORD = 0x00000020;
4101 pub const FILE_ATTRIBUTE_DEVICE: DWORD = 0x00000040;
4102 pub const FILE_ATTRIBUTE_NORMAL: DWORD = 0x00000080;
4103 pub const FILE_ATTRIBUTE_TEMPORARY: DWORD = 0x00000100;
4104 pub const FILE_ATTRIBUTE_SPARSE_FILE: DWORD = 0x00000200;
4105 pub const FILE_ATTRIBUTE_REPARSE_POINT: DWORD = 0x00000400;
4106 pub const FILE_ATTRIBUTE_COMPRESSED: DWORD = 0x00000800;
4107 pub const FILE_ATTRIBUTE_OFFLINE: DWORD = 0x00001000;
4108 pub const FILE_ATTRIBUTE_NOT_CONTENT_INDEXED: DWORD = 0x00002000;
4109 pub const FILE_ATTRIBUTE_ENCRYPTED: DWORD = 0x00004000;
4110 pub const FILE_ATTRIBUTE_INTEGRITY_STREAM: DWORD = 0x00008000;
4111 pub const FILE_ATTRIBUTE_VIRTUAL: DWORD = 0x00010000;
4112 pub const FILE_ATTRIBUTE_NO_SCRUB_DATA: DWORD = 0x00020000;
4113 pub const FILE_ATTRIBUTE_EA: DWORD = 0x00040000;
4114 pub const FILE_ATTRIBUTE_PINNED: DWORD = 0x00080000;
4115 pub const FILE_ATTRIBUTE_UNPINNED: DWORD = 0x00100000;
4116 pub const FILE_ATTRIBUTE_RECALL_ON_OPEN: DWORD = 0x00040000;
4117 pub const FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS: DWORD = 0x00400000;
4118 pub const FILE_NOTIFY_CHANGE_FILE_NAME: DWORD = 0x00000001;
4119 pub const FILE_NOTIFY_CHANGE_DIR_NAME: DWORD = 0x00000002;
4120 pub const FILE_NOTIFY_CHANGE_ATTRIBUTES: DWORD = 0x00000004;
4121 pub const FILE_NOTIFY_CHANGE_SIZE: DWORD = 0x00000008;
4122 pub const FILE_NOTIFY_CHANGE_LAST_WRITE: DWORD = 0x00000010;
4123 pub const FILE_NOTIFY_CHANGE_LAST_ACCESS: DWORD = 0x00000020;
4124 pub const FILE_NOTIFY_CHANGE_CREATION: DWORD = 0x00000040;
4125 pub const FILE_NOTIFY_CHANGE_SECURITY: DWORD = 0x00000100;
4126 pub const FILE_ACTION_ADDED: DWORD = 0x00000001;
4127 pub const FILE_ACTION_REMOVED: DWORD = 0x00000002;
4128 pub const FILE_ACTION_MODIFIED: DWORD = 0x00000003;
4129 pub const FILE_ACTION_RENAMED_OLD_NAME: DWORD = 0x00000004;
4130 pub const FILE_ACTION_RENAMED_NEW_NAME: DWORD = 0x00000005;
4131 pub const MAILSLOT_NO_MESSAGE: DWORD = 0xFFFFFFFF;
4132 pub const MAILSLOT_WAIT_FOREVER: DWORD = 0xFFFFFFFF;
4133 pub const FILE_CASE_SENSITIVE_SEARCH: DWORD = 0x00000001;
4134 pub const FILE_CASE_PRESERVED_NAMES: DWORD = 0x00000002;
4135 pub const FILE_UNICODE_ON_DISK: DWORD = 0x00000004;
4136 pub const FILE_PERSISTENT_ACLS: DWORD = 0x00000008;
4137 pub const FILE_FILE_COMPRESSION: DWORD = 0x00000010;
4138 pub const FILE_VOLUME_QUOTAS: DWORD = 0x00000020;
4139 pub const FILE_SUPPORTS_SPARSE_FILES: DWORD = 0x00000040;
4140 pub const FILE_SUPPORTS_REPARSE_POINTS: DWORD = 0x00000080;
4141 pub const FILE_SUPPORTS_REMOTE_STORAGE: DWORD = 0x00000100;
4142 pub const FILE_RETURNS_CLEANUP_RESULT_INFO: DWORD = 0x00000200;
4143 pub const FILE_VOLUME_IS_COMPRESSED: DWORD = 0x00008000;
4144 pub const FILE_SUPPORTS_OBJECT_IDS: DWORD = 0x00010000;
4145 pub const FILE_SUPPORTS_ENCRYPTION: DWORD = 0x00020000;
4146 pub const FILE_NAMED_STREAMS: DWORD = 0x00040000;
4147 pub const FILE_READ_ONLY_VOLUME: DWORD = 0x00080000;
4148 pub const FILE_SEQUENTIAL_WRITE_ONCE: DWORD = 0x00100000;
4149 pub const FILE_SUPPORTS_TRANSACTIONS: DWORD = 0x00200000;
4150 pub const FILE_SUPPORTS_HARD_LINKS: DWORD = 0x00400000;
4151 pub const FILE_SUPPORTS_EXTENDED_ATTRIBUTES: DWORD = 0x00800000;
4152 pub const FILE_SUPPORTS_OPEN_BY_FILE_ID: DWORD = 0x01000000;
4153 pub const FILE_SUPPORTS_USN_JOURNAL: DWORD = 0x02000000;
4154 pub const FILE_SUPPORTS_INTEGRITY_STREAMS: DWORD = 0x04000000;
4155 pub const FILE_SUPPORTS_BLOCK_REFCOUNTING: DWORD = 0x08000000;
4156 pub const FILE_SUPPORTS_SPARSE_VDL: DWORD = 0x10000000;
4157 pub const FILE_DAX_VOLUME: DWORD = 0x20000000;
4158 pub const FILE_SUPPORTS_GHOSTING: DWORD = 0x40000000;
4159 pub const FILE_INVALID_FILE_ID: LONGLONG = -1;
4160 STRUCT!{struct FILE_ID_128 {
4161     Identifier: [BYTE; 16],
4162 }}
4163 pub type PFILE_ID_128 = *mut FILE_ID_128;
4164 STRUCT!{struct FILE_NOTIFY_INFORMATION {
4165     NextEntryOffset: DWORD,
4166     Action: DWORD,
4167     FileNameLength: DWORD,
4168     FileName: [WCHAR; 1],
4169 }}
4170 UNION!{union FILE_SEGMENT_ELEMENT {
4171     [u64; 1],
4172     Buffer Buffer_mut: PVOID64,
4173     Alignment Alignment_mut: ULONGLONG,
4174 }}
4175 pub type PFILE_SEGMENT_ELEMENT = *mut FILE_SEGMENT_ELEMENT;
4176 pub const FLUSH_FLAGS_FILE_DATA_ONLY: ULONG = 0x00000001;
4177 pub const FLUSH_FLAGS_NO_SYNC: ULONG = 0x00000002;
4178 pub const FLUSH_FLAGS_FILE_DATA_SYNC_ONLY: ULONG = 0x00000004;
4179 STRUCT!{struct REPARSE_GUID_DATA_BUFFER_GenericReparseBuffer {
4180     DataBuffer: [BYTE; 1],
4181 }}
4182 STRUCT!{struct REPARSE_GUID_DATA_BUFFER {
4183     ReparseTag: DWORD,
4184     ReparseDataLength: WORD,
4185     Reserved: WORD,
4186     ReparseGuid: GUID,
4187     GenericReparseBuffer: REPARSE_GUID_DATA_BUFFER_GenericReparseBuffer,
4188 }}
4189 pub type PREPARSE_GUID_DATA_BUFFER = *mut REPARSE_GUID_DATA_BUFFER;
4190 pub const MAXIMUM_REPARSE_DATA_BUFFER_SIZE: DWORD = 16 * 1024;
4191 pub const IO_REPARSE_TAG_RESERVED_ZERO: DWORD = 0;
4192 pub const IO_REPARSE_TAG_RESERVED_ONE: DWORD = 1;
4193 pub const IO_REPARSE_TAG_RESERVED_TWO: DWORD = 2;
4194 pub const IO_REPARSE_TAG_RESERVED_RANGE: DWORD = IO_REPARSE_TAG_RESERVED_TWO;
4195 #[inline]
IsReparseTagMicrosoft(_tag: DWORD) -> bool4196 pub fn IsReparseTagMicrosoft(_tag: DWORD) -> bool {
4197     (_tag & 0x80000000) != 0
4198 }
4199 #[inline]
IsReparseTagNameSurrogate(_tag: DWORD) -> bool4200 pub fn IsReparseTagNameSurrogate(_tag: DWORD) -> bool {
4201     (_tag & 0x20000000) != 0
4202 }
4203 #[inline]
IsReparseTagDirectory(_tag: DWORD) -> bool4204 pub fn IsReparseTagDirectory(_tag: DWORD) -> bool {
4205     (_tag & 0x10000000) != 0
4206 }
4207 pub const IO_REPARSE_TAG_MOUNT_POINT: DWORD = 0xA0000003;
4208 pub const IO_REPARSE_TAG_HSM: DWORD = 0xC0000004;
4209 pub const IO_REPARSE_TAG_HSM2: DWORD = 0x80000006;
4210 pub const IO_REPARSE_TAG_SIS: DWORD = 0x80000007;
4211 pub const IO_REPARSE_TAG_WIM: DWORD = 0x80000008;
4212 pub const IO_REPARSE_TAG_CSV: DWORD = 0x80000009;
4213 pub const IO_REPARSE_TAG_DFS: DWORD = 0x8000000A;
4214 pub const IO_REPARSE_TAG_SYMLINK: DWORD = 0xA000000C;
4215 pub const IO_REPARSE_TAG_DFSR: DWORD = 0x80000012;
4216 pub const IO_REPARSE_TAG_DEDUP: DWORD = 0x80000013;
4217 pub const IO_REPARSE_TAG_NFS: DWORD = 0x80000014;
4218 pub const IO_REPARSE_TAG_FILE_PLACEHOLDER: DWORD = 0x80000015;
4219 pub const IO_REPARSE_TAG_WOF: DWORD = 0x80000017;
4220 pub const IO_REPARSE_TAG_WCI: DWORD = 0x80000018;
4221 pub const IO_REPARSE_TAG_GLOBAL_REPARSE: DWORD = 0xA0000019;
4222 pub const IO_REPARSE_TAG_CLOUD: DWORD = 0x9000001A;
4223 pub const IO_REPARSE_TAG_CLOUD_ROOT: DWORD = 0x9000101A;
4224 pub const IO_REPARSE_TAG_CLOUD_ON_DEMAND: DWORD = 0x9000201A;
4225 pub const IO_REPARSE_TAG_CLOUD_ROOT_ON_DEMAND: DWORD = 0x9000301A;
4226 pub const IO_REPARSE_TAG_APPEXECLINK: DWORD = 0x8000001B;
4227 pub const IO_REPARSE_TAG_GVFS: DWORD = 0x9000001C;
4228 pub const IO_REPARSE_TAG_WCI_TOMBSTONE: DWORD = 0xA000001F;
4229 pub const IO_REPARSE_TAG_UNHANDLED: DWORD = 0x80000020;
4230 pub const IO_REPARSE_TAG_ONEDRIVE: DWORD = 0x80000021;
4231 pub const IO_REPARSE_TAG_GVFS_TOMBSTONE: DWORD = 0xA0000022;
4232 pub const SCRUB_DATA_INPUT_FLAG_RESUME: DWORD = 0x00000001;
4233 pub const SCRUB_DATA_INPUT_FLAG_SKIP_IN_SYNC: DWORD = 0x00000002;
4234 pub const SCRUB_DATA_INPUT_FLAG_SKIP_NON_INTEGRITY_DATA: DWORD = 0x00000004;
4235 pub const SCRUB_DATA_OUTPUT_FLAG_INCOMPLETE: DWORD = 0x00000001;
4236 pub const SCRUB_DATA_OUTPUT_FLAG_NON_USER_DATA_RANGE: DWORD = 0x00010000;
4237 pub const SCRUB_DATA_OUTPUT_FLAG_PARITY_EXTENT_DATA_RETURNED: DWORD = 0x00020000;
4238 pub const SCRUB_DATA_OUTPUT_FLAG_RESUME_CONTEXT_LENGTH_SPECIFIED: DWORD = 0x00040000;
4239 STRUCT!{struct SCRUB_DATA_INPUT {
4240     Size: DWORD,
4241     Flags: DWORD,
4242     MaximumIos: DWORD,
4243     Reserved: [DWORD; 17],
4244     ResumeContext: [BYTE; 816],
4245 }}
4246 pub type PSCRUB_DATA_INPUT = *mut SCRUB_DATA_INPUT;
4247 STRUCT!{struct SCRUB_PARITY_EXTENT {
4248     Offset: LONGLONG,
4249     Length: ULONGLONG,
4250 }}
4251 pub type PSCRUB_PARITY_EXTENT = *mut SCRUB_PARITY_EXTENT;
4252 STRUCT!{struct SCRUB_PARITY_EXTENT_DATA {
4253     Size: WORD,
4254     Flags: WORD,
4255     NumberOfParityExtents: WORD,
4256     MaximumNumberOfParityExtents: WORD,
4257     ParityExtents: [SCRUB_PARITY_EXTENT; ANYSIZE_ARRAY],
4258 }}
4259 pub type PSCRUB_PARITY_EXTENT_DATA = *mut SCRUB_PARITY_EXTENT_DATA;
4260 STRUCT!{struct SCRUB_DATA_OUTPUT {
4261     Size: DWORD,
4262     Flags: DWORD,
4263     Status: DWORD,
4264     ErrorFileOffset: ULONGLONG,
4265     ErrorLength: ULONGLONG,
4266     NumberOfBytesRepaired: ULONGLONG,
4267     NumberOfBytesFailed: ULONGLONG,
4268     InternalFileReference: ULONGLONG,
4269     ResumeContextLength: WORD,
4270     ParityExtentDataOffset: WORD,
4271     Reserved: [DWORD; 5],
4272     ResumeContext: [BYTE; 816],
4273 }}
4274 pub type PSCRUB_DATA_OUTPUT = *mut SCRUB_DATA_OUTPUT;
4275 ENUM!{enum SharedVirtualDiskSupportType {
4276     SharedVirtualDisksUnsupported = 0,
4277     SharedVirtualDisksSupported = 1,
4278     SharedVirtualDiskSnapshotsSupported = 3,
4279     SharedVirtualDiskCDPSnapshotsSupported = 7,
4280 }}
4281 ENUM!{enum SharedVirtualDiskHandleState {
4282     SharedVirtualDiskHandleStateNone = 0,
4283     SharedVirtualDiskHandleStateFileShared = 1,
4284     SharedVirtualDiskHandleStateHandleShared = 3,
4285 }}
4286 STRUCT!{struct SHARED_VIRTUAL_DISK_SUPPORT {
4287     SharedVirtualDiskSupport: SharedVirtualDiskSupportType,
4288     HandleState: SharedVirtualDiskHandleState,
4289 }}
4290 pub type PSHARED_VIRTUAL_DISK_SUPPORT = *mut SHARED_VIRTUAL_DISK_SUPPORT;
4291 #[inline]
IsVirtualDiskFileShared(HandleState: SharedVirtualDiskHandleState) -> bool4292 pub fn IsVirtualDiskFileShared(HandleState: SharedVirtualDiskHandleState) -> bool {
4293     (HandleState & SharedVirtualDiskHandleStateFileShared) != 0
4294 }
4295 pub const IO_COMPLETION_MODIFY_STATE: DWORD = 0x0002;
4296 pub const IO_COMPLETION_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3;
4297 pub const IO_QOS_MAX_RESERVATION: DWORD64 = 1000000000;
4298 pub const SMB_CCF_APP_INSTANCE_EA_NAME: &'static str = "ClusteredApplicationInstance";
4299 pub const NETWORK_APP_INSTANCE_CSV_FLAGS_VALID_ONLY_IF_CSV_COORDINATOR: DWORD = 0x00000001;
4300 STRUCT!{struct NETWORK_APP_INSTANCE_EA {
4301     AppInstanceID: GUID,
4302     CsvFlags: DWORD,
4303 }}
4304 pub type PNETWORK_APP_INSTANCE_EA = *mut NETWORK_APP_INSTANCE_EA;
4305 pub const DUPLICATE_CLOSE_SOURCE: DWORD = 0x00000001;
4306 pub const DUPLICATE_SAME_ACCESS: DWORD = 0x00000002;
4307 DEFINE_GUID!{GUID_MAX_POWER_SAVINGS,
4308     0xa1841308, 0x3541, 0x4fab, 0xbc, 0x81, 0xf7, 0x15, 0x56, 0xf2, 0x0b, 0x4a}
4309 DEFINE_GUID!{GUID_MIN_POWER_SAVINGS,
4310     0x8c5e7fda, 0xe8bf, 0x4a96, 0x9a, 0x85, 0xa6, 0xe2, 0x3a, 0x8c, 0x63, 0x5c}
4311 DEFINE_GUID!{GUID_TYPICAL_POWER_SAVINGS,
4312     0x381b4222, 0xf694, 0x41f0, 0x96, 0x85, 0xff, 0x5b, 0xb2, 0x60, 0xdf, 0x2e}
4313 DEFINE_GUID!{NO_SUBGROUP_GUID,
4314     0xfea3413e, 0x7e05, 0x4911, 0x9a, 0x71, 0x70, 0x03, 0x31, 0xf1, 0xc2, 0x94}
4315 DEFINE_GUID!{ALL_POWERSCHEMES_GUID,
4316     0x68a1e95e, 0x13ea, 0x41e1, 0x80, 0x11, 0x0c, 0x49, 0x6c, 0xa4, 0x90, 0xb0}
4317 DEFINE_GUID!{GUID_POWERSCHEME_PERSONALITY,
4318     0x245d8541, 0x3943, 0x4422, 0xb0, 0x25, 0x13, 0xa7, 0x84, 0xf6, 0x79, 0xb7}
4319 DEFINE_GUID!{GUID_ACTIVE_POWERSCHEME,
4320     0x31f9f286, 0x5084, 0x42fe, 0xb7, 0x20, 0x2b, 0x02, 0x64, 0x99, 0x37, 0x63}
4321 DEFINE_GUID!{GUID_IDLE_RESILIENCY_SUBGROUP,
4322     0x2e601130, 0x5351, 0x4d9d, 0x8e, 0x4, 0x25, 0x29, 0x66, 0xba, 0xd0, 0x54}
4323 DEFINE_GUID!{GUID_IDLE_RESILIENCY_PERIOD,
4324     0xc42b79aa, 0xaa3a, 0x484b, 0xa9, 0x8f, 0x2c, 0xf3, 0x2a, 0xa9, 0xa, 0x28}
4325 DEFINE_GUID!{GUID_DEEP_SLEEP_ENABLED,
4326     0xd502f7ee, 0x1dc7, 0x4efd, 0xa5, 0x5d, 0xf0, 0x4b, 0x6f, 0x5c, 0x5, 0x45}
4327 DEFINE_GUID!{GUID_DEEP_SLEEP_PLATFORM_STATE,
4328     0xd23f2fb8, 0x9536, 0x4038, 0x9c, 0x94, 0x1c, 0xe0, 0x2e, 0x5c, 0x21, 0x52}
4329 DEFINE_GUID!{GUID_DISK_COALESCING_POWERDOWN_TIMEOUT,
4330     0xc36f0eb4, 0x2988, 0x4a70, 0x8e, 0xee, 0x8, 0x84, 0xfc, 0x2c, 0x24, 0x33}
4331 DEFINE_GUID!{GUID_EXECUTION_REQUIRED_REQUEST_TIMEOUT,
4332     0x3166bc41, 0x7e98, 0x4e03, 0xb3, 0x4e, 0xec, 0xf, 0x5f, 0x2b, 0x21, 0x8e}
4333 DEFINE_GUID!{GUID_VIDEO_SUBGROUP,
4334     0x7516b95f, 0xf776, 0x4464, 0x8c, 0x53, 0x06, 0x16, 0x7f, 0x40, 0xcc, 0x99}
4335 DEFINE_GUID!{GUID_VIDEO_POWERDOWN_TIMEOUT,
4336     0x3c0bc021, 0xc8a8, 0x4e07, 0xa9, 0x73, 0x6b, 0x14, 0xcb, 0xcb, 0x2b, 0x7e}
4337 DEFINE_GUID!{GUID_VIDEO_ANNOYANCE_TIMEOUT,
4338     0x82dbcf2d, 0xcd67, 0x40c5, 0xbf, 0xdc, 0x9f, 0x1a, 0x5c, 0xcd, 0x46, 0x63}
4339 DEFINE_GUID!{GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE,
4340     0xeed904df, 0xb142, 0x4183, 0xb1, 0x0b, 0x5a, 0x11, 0x97, 0xa3, 0x78, 0x64}
4341 DEFINE_GUID!{GUID_VIDEO_DIM_TIMEOUT,
4342     0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee}
4343 DEFINE_GUID!{GUID_VIDEO_ADAPTIVE_POWERDOWN,
4344     0x90959d22, 0xd6a1, 0x49b9, 0xaf, 0x93, 0xbc, 0xe8, 0x85, 0xad, 0x33, 0x5b}
4345 DEFINE_GUID!{GUID_MONITOR_POWER_ON,
4346     0x02731015, 0x4510, 0x4526, 0x99, 0xe6, 0xe5, 0xa1, 0x7e, 0xbd, 0x1a, 0xea}
4347 DEFINE_GUID!{GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS,
4348     0xaded5e82, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb}
4349 DEFINE_GUID!{GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS,
4350     0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96}
4351 DEFINE_GUID!{GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS,
4352     0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff}
4353 DEFINE_GUID!{GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS,
4354     0xfbd9aa66, 0x9553, 0x4097, 0xba, 0x44, 0xed, 0x6e, 0x9d, 0x65, 0xea, 0xb8}
4355 DEFINE_GUID!{GUID_CONSOLE_DISPLAY_STATE,
4356     0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47}
4357 DEFINE_GUID!{GUID_ALLOW_DISPLAY_REQUIRED,
4358     0xa9ceb8da, 0xcd46, 0x44fb, 0xa9, 0x8b, 0x02, 0xaf, 0x69, 0xde, 0x46, 0x23}
4359 DEFINE_GUID!{GUID_VIDEO_CONSOLE_LOCK_TIMEOUT,
4360     0x8ec4b3a5, 0x6868, 0x48c2, 0xbe, 0x75, 0x4f, 0x30, 0x44, 0xbe, 0x88, 0xa7}
4361 DEFINE_GUID!{GUID_ADAPTIVE_POWER_BEHAVIOR_SUBGROUP,
4362     0x8619b916, 0xe004, 0x4dd8, 0x9b, 0x66, 0xda, 0xe8, 0x6f, 0x80, 0x66, 0x98}
4363 DEFINE_GUID!{GUID_NON_ADAPTIVE_INPUT_TIMEOUT,
4364     0x5adbbfbc, 0x74e, 0x4da1, 0xba, 0x38, 0xdb, 0x8b, 0x36, 0xb2, 0xc8, 0xf3}
4365 DEFINE_GUID!{GUID_ADAPTIVE_INPUT_CONTROLLER_STATE,
4366     0xe98fae9, 0xf45a, 0x4de1, 0xa7, 0x57, 0x60, 0x31, 0xf1, 0x97, 0xf6, 0xea}
4367 DEFINE_GUID!{GUID_DISK_SUBGROUP,
4368     0x0012ee47, 0x9041, 0x4b5d, 0x9b, 0x77, 0x53, 0x5f, 0xba, 0x8b, 0x14, 0x42}
4369 DEFINE_GUID!{GUID_DISK_MAX_POWER,
4370     0x51dea550, 0xbb38, 0x4bc4, 0x99, 0x1b, 0xea, 0xcf, 0x37, 0xbe, 0x5e, 0xc8}
4371 DEFINE_GUID!{GUID_DISK_POWERDOWN_TIMEOUT,
4372     0x6738e2c4, 0xe8a5, 0x4a42, 0xb1, 0x6a, 0xe0, 0x40, 0xe7, 0x69, 0x75, 0x6e}
4373 DEFINE_GUID!{GUID_DISK_IDLE_TIMEOUT,
4374     0x58e39ba8, 0xb8e6, 0x4ef6, 0x90, 0xd0, 0x89, 0xae, 0x32, 0xb2, 0x58, 0xd6}
4375 DEFINE_GUID!{GUID_DISK_BURST_IGNORE_THRESHOLD,
4376     0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63}
4377 DEFINE_GUID!{GUID_DISK_ADAPTIVE_POWERDOWN,
4378     0x396a32e1, 0x499a, 0x40b2, 0x91, 0x24, 0xa9, 0x6a, 0xfe, 0x70, 0x76, 0x67}
4379 DEFINE_GUID!{GUID_SLEEP_SUBGROUP,
4380     0x238c9fa8, 0x0aad, 0x41ed, 0x83, 0xf4, 0x97, 0xbe, 0x24, 0x2c, 0x8f, 0x20}
4381 DEFINE_GUID!{GUID_SLEEP_IDLE_THRESHOLD,
4382     0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70}
4383 DEFINE_GUID!{GUID_STANDBY_TIMEOUT,
4384     0x29f6c1db, 0x86da, 0x48c5, 0x9f, 0xdb, 0xf2, 0xb6, 0x7b, 0x1f, 0x44, 0xda}
4385 DEFINE_GUID!{GUID_UNATTEND_SLEEP_TIMEOUT,
4386     0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0}
4387 DEFINE_GUID!{GUID_HIBERNATE_TIMEOUT,
4388     0x9d7815a6, 0x7ee4, 0x497e, 0x88, 0x88, 0x51, 0x5a, 0x05, 0xf0, 0x23, 0x64}
4389 DEFINE_GUID!{GUID_HIBERNATE_FASTS4_POLICY,
4390     0x94ac6d29, 0x73ce, 0x41a6, 0x80, 0x9f, 0x63, 0x63, 0xba, 0x21, 0xb4, 0x7e}
4391 DEFINE_GUID!{GUID_CRITICAL_POWER_TRANSITION,
4392     0xb7a27025, 0xe569, 0x46c2, 0xa5, 0x04, 0x2b, 0x96, 0xca, 0xd2, 0x25, 0xa1}
4393 DEFINE_GUID!{GUID_SYSTEM_AWAYMODE,
4394     0x98a7f580, 0x01f7, 0x48aa, 0x9c, 0x0f, 0x44, 0x35, 0x2c, 0x29, 0xe5, 0xc0}
4395 DEFINE_GUID!{GUID_ALLOW_AWAYMODE,
4396     0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87}
4397 DEFINE_GUID!{GUID_USER_PRESENCE_PREDICTION,
4398     0x82011705, 0xfb95, 0x4d46, 0x8d, 0x35, 0x40, 0x42, 0xb1, 0xd2, 0xd, 0xef}
4399 DEFINE_GUID!{GUID_STANDBY_BUDGET_GRACE_PERIOD,
4400     0x60c07fe1, 0x0556, 0x45cf, 0x99, 0x03, 0xd5, 0x6e, 0x32, 0x21, 0x2, 0x42}
4401 DEFINE_GUID!{GUID_STANDBY_BUDGET_PERCENT,
4402     0x9fe527be, 0x1b70, 0x48da, 0x93, 0x0d, 0x7b, 0xcf, 0x17, 0xb4, 0x49, 0x90}
4403 DEFINE_GUID!{GUID_STANDBY_RESERVE_GRACE_PERIOD,
4404     0xc763ee92, 0x71e8, 0x4127, 0x84, 0xeb, 0xf6, 0xed, 0x04, 0x3a, 0x3e, 0x3d}
4405 DEFINE_GUID!{GUID_STANDBY_RESERVE_TIME,
4406     0x468fe7e5, 0x1158, 0x46ec, 0x88, 0xbc, 0x5b, 0x96, 0xc9, 0xe4, 0x4f, 0xd0}
4407 DEFINE_GUID!{GUID_STANDBY_RESET_PERCENT,
4408     0x49cb11a5, 0x56e2, 0x4afb, 0x9d, 0x38, 0x3d, 0xf4, 0x78, 0x72, 0xe2, 0x1b}
4409 DEFINE_GUID!{GUID_ALLOW_STANDBY_STATES,
4410     0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab}
4411 DEFINE_GUID!{GUID_ALLOW_RTC_WAKE,
4412     0xbd3b718a, 0x0680, 0x4d9d, 0x8a, 0xb2, 0xe1, 0xd2, 0xb4, 0xac, 0x80, 0x6d}
4413 DEFINE_GUID!{GUID_ALLOW_SYSTEM_REQUIRED,
4414     0xa4b195f5, 0x8225, 0x47d8, 0x80, 0x12, 0x9d, 0x41, 0x36, 0x97, 0x86, 0xe2}
4415 DEFINE_GUID!{GUID_POWER_SAVING_STATUS,
4416     0xe00958c0, 0xc213, 0x4ace, 0xac, 0x77, 0xfe, 0xcc, 0xed, 0x2e, 0xee, 0xa5}
4417 DEFINE_GUID!{GUID_ENERGY_SAVER_SUBGROUP,
4418     0xde830923, 0xa562, 0x41af, 0xa0, 0x86, 0xe3, 0xa2, 0xc6, 0xba, 0xd2, 0xda}
4419 DEFINE_GUID!{GUID_ENERGY_SAVER_BATTERY_THRESHOLD,
4420     0xe69653ca, 0xcf7f, 0x4f05, 0xaa, 0x73, 0xcb, 0x83, 0x3f, 0xa9, 0x0a, 0xd4}
4421 DEFINE_GUID!{GUID_ENERGY_SAVER_BRIGHTNESS,
4422     0x13d09884, 0xf74e, 0x474a, 0xa8, 0x52, 0xb6, 0xbd, 0xe8, 0xad, 0x03, 0xa8}
4423 DEFINE_GUID!{GUID_ENERGY_SAVER_POLICY,
4424     0x5c5bb349, 0xad29, 0x4ee2, 0x9d, 0xb, 0x2b, 0x25, 0x27, 0xf, 0x7a, 0x81}
4425 DEFINE_GUID!{GUID_SYSTEM_BUTTON_SUBGROUP,
4426     0x4f971e89, 0xeebd, 0x4455, 0xa8, 0xde, 0x9e, 0x59, 0x04, 0x0e, 0x73, 0x47}
4427 pub const POWERBUTTON_ACTION_INDEX_NOTHING: DWORD = 0;
4428 pub const POWERBUTTON_ACTION_INDEX_SLEEP: DWORD = 1;
4429 pub const POWERBUTTON_ACTION_INDEX_HIBERNATE: DWORD = 2;
4430 pub const POWERBUTTON_ACTION_INDEX_SHUTDOWN: DWORD = 3;
4431 pub const POWERBUTTON_ACTION_INDEX_TURN_OFF_THE_DISPLAY: DWORD = 4;
4432 pub const POWERBUTTON_ACTION_VALUE_NOTHING: DWORD = 0;
4433 pub const POWERBUTTON_ACTION_VALUE_SLEEP: DWORD = 2;
4434 pub const POWERBUTTON_ACTION_VALUE_HIBERNATE: DWORD = 3;
4435 pub const POWERBUTTON_ACTION_VALUE_SHUTDOWN: DWORD = 6;
4436 pub const POWERBUTTON_ACTION_VALUE_TURN_OFF_THE_DISPLAY: DWORD = 8;
4437 DEFINE_GUID!{GUID_POWERBUTTON_ACTION,
4438     0x7648efa3, 0xdd9c, 0x4e3e, 0xb5, 0x66, 0x50, 0xf9, 0x29, 0x38, 0x62, 0x80}
4439 DEFINE_GUID!{GUID_SLEEPBUTTON_ACTION,
4440     0x96996bc0, 0xad50, 0x47ec, 0x92, 0x3b, 0x6f, 0x41, 0x87, 0x4d, 0xd9, 0xeb}
4441 DEFINE_GUID!{GUID_USERINTERFACEBUTTON_ACTION,
4442     0xa7066653, 0x8d6c, 0x40a8, 0x91, 0x0e, 0xa1, 0xf5, 0x4b, 0x84, 0xc7, 0xe5}
4443 DEFINE_GUID!{GUID_LIDCLOSE_ACTION,
4444     0x5ca83367, 0x6e45, 0x459f, 0xa2, 0x7b, 0x47, 0x6b, 0x1d, 0x01, 0xc9, 0x36}
4445 DEFINE_GUID!{GUID_LIDOPEN_POWERSTATE,
4446     0x99ff10e7, 0x23b1, 0x4c07, 0xa9, 0xd1, 0x5c, 0x32, 0x06, 0xd7, 0x41, 0xb4}
4447 DEFINE_GUID!{GUID_BATTERY_SUBGROUP,
4448     0xe73a048d, 0xbf27, 0x4f12, 0x97, 0x31, 0x8b, 0x20, 0x76, 0xe8, 0x89, 0x1f}
4449 DEFINE_GUID!{GUID_BATTERY_DISCHARGE_ACTION_0,
4450     0x637ea02f, 0xbbcb, 0x4015, 0x8e, 0x2c, 0xa1, 0xc7, 0xb9, 0xc0, 0xb5, 0x46}
4451 DEFINE_GUID!{GUID_BATTERY_DISCHARGE_LEVEL_0,
4452     0x9a66d8d7, 0x4ff7, 0x4ef9, 0xb5, 0xa2, 0x5a, 0x32, 0x6c, 0xa2, 0xa4, 0x69}
4453 DEFINE_GUID!{GUID_BATTERY_DISCHARGE_FLAGS_0,
4454     0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f}
4455 DEFINE_GUID!{GUID_BATTERY_DISCHARGE_ACTION_1,
4456     0xd8742dcb, 0x3e6a, 0x4b3c, 0xb3, 0xfe, 0x37, 0x46, 0x23, 0xcd, 0xcf, 0x06}
4457 DEFINE_GUID!{GUID_BATTERY_DISCHARGE_LEVEL_1,
4458     0x8183ba9a, 0xe910, 0x48da, 0x87, 0x69, 0x14, 0xae, 0x6d, 0xc1, 0x17, 0x0a}
4459 DEFINE_GUID!{GUID_BATTERY_DISCHARGE_FLAGS_1,
4460     0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58}
4461 DEFINE_GUID!{GUID_BATTERY_DISCHARGE_ACTION_2,
4462     0x421cba38, 0x1a8e, 0x4881, 0xac, 0x89, 0xe3, 0x3a, 0x8b, 0x04, 0xec, 0xe4}
4463 DEFINE_GUID!{GUID_BATTERY_DISCHARGE_LEVEL_2,
4464     0x07a07ca2, 0xadaf, 0x40d7, 0xb0, 0x77, 0x53, 0x3a, 0xad, 0xed, 0x1b, 0xfa}
4465 DEFINE_GUID!{GUID_BATTERY_DISCHARGE_FLAGS_2,
4466     0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82}
4467 DEFINE_GUID!{GUID_BATTERY_DISCHARGE_ACTION_3,
4468     0x80472613, 0x9780, 0x455e, 0xb3, 0x08, 0x72, 0xd3, 0x00, 0x3c, 0xf2, 0xf8}
4469 DEFINE_GUID!{GUID_BATTERY_DISCHARGE_LEVEL_3,
4470     0x58afd5a6, 0xc2dd, 0x47d2, 0x9f, 0xbf, 0xef, 0x70, 0xcc, 0x5c, 0x59, 0x65}
4471 DEFINE_GUID!{GUID_BATTERY_DISCHARGE_FLAGS_3,
4472     0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3}
4473 DEFINE_GUID!{GUID_PROCESSOR_SETTINGS_SUBGROUP,
4474     0x54533251, 0x82be, 0x4824, 0x96, 0xc1, 0x47, 0xb6, 0x0b, 0x74, 0x0d, 0x00}
4475 DEFINE_GUID!{GUID_PROCESSOR_THROTTLE_POLICY,
4476     0x57027304, 0x4af6, 0x4104, 0x92, 0x60, 0xe3, 0xd9, 0x52, 0x48, 0xfc, 0x36}
4477 pub const PERFSTATE_POLICY_CHANGE_IDEAL: DWORD = 0;
4478 pub const PERFSTATE_POLICY_CHANGE_SINGLE: DWORD = 1;
4479 pub const PERFSTATE_POLICY_CHANGE_ROCKET: DWORD = 2;
4480 pub const PERFSTATE_POLICY_CHANGE_IDEAL_AGGRESSIVE: DWORD = 3;
4481 pub const PERFSTATE_POLICY_CHANGE_DECREASE_MAX: DWORD = PERFSTATE_POLICY_CHANGE_ROCKET;
4482 pub const PERFSTATE_POLICY_CHANGE_INCREASE_MAX: DWORD = PERFSTATE_POLICY_CHANGE_IDEAL_AGGRESSIVE;
4483 DEFINE_GUID!{GUID_PROCESSOR_THROTTLE_MAXIMUM,
4484     0xbc5038f7, 0x23e0, 0x4960, 0x96, 0xda, 0x33, 0xab, 0xaf, 0x59, 0x35, 0xec}
4485 DEFINE_GUID!{GUID_PROCESSOR_THROTTLE_MAXIMUM_1,
4486     0xbc5038f7, 0x23e0, 0x4960, 0x96, 0xda, 0x33, 0xab, 0xaf, 0x59, 0x35, 0xed}
4487 DEFINE_GUID!{GUID_PROCESSOR_THROTTLE_MINIMUM,
4488     0x893dee8e, 0x2bef, 0x41e0, 0x89, 0xc6, 0xb5, 0x5d, 0x09, 0x29, 0x96, 0x4c}
4489 DEFINE_GUID!{GUID_PROCESSOR_THROTTLE_MINIMUM_1,
4490     0x893dee8e, 0x2bef, 0x41e0, 0x89, 0xc6, 0xb5, 0x5d, 0x09, 0x29, 0x96, 0x4d}
4491 DEFINE_GUID!{GUID_PROCESSOR_FREQUENCY_LIMIT,
4492     0x75b0ae3f, 0xbce0, 0x45a7, 0x8c, 0x89, 0xc9, 0x61, 0x1c, 0x25, 0xe1, 0x00}
4493 DEFINE_GUID!{GUID_PROCESSOR_FREQUENCY_LIMIT_1,
4494     0x75b0ae3f, 0xbce0, 0x45a7, 0x8c, 0x89, 0xc9, 0x61, 0x1c, 0x25, 0xe1, 0x01}
4495 DEFINE_GUID!{GUID_PROCESSOR_ALLOW_THROTTLING,
4496     0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb}
4497 pub const PROCESSOR_THROTTLE_DISABLED: DWORD = 0;
4498 pub const PROCESSOR_THROTTLE_ENABLED: DWORD = 1;
4499 pub const PROCESSOR_THROTTLE_AUTOMATIC: DWORD = 2;
4500 DEFINE_GUID!{GUID_PROCESSOR_IDLESTATE_POLICY,
4501     0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c}
4502 DEFINE_GUID!{GUID_PROCESSOR_PERFSTATE_POLICY,
4503     0xbbdc3814, 0x18e9, 0x4463, 0x8a, 0x55, 0xd1, 0x97, 0x32, 0x7c, 0x45, 0xc0}
4504 DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_THRESHOLD,
4505     0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d}
4506 DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_THRESHOLD_1,
4507     0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5e}
4508 DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_THRESHOLD,
4509     0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6}
4510 DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_THRESHOLD_1,
4511     0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa7}
4512 DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_POLICY,
4513     0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18}
4514 DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_POLICY_1,
4515     0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x19}
4516 DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_POLICY,
4517     0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6}
4518 DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_POLICY_1,
4519     0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc7}
4520 DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_TIME,
4521     0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa}
4522 DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_TIME_1,
4523     0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xab}
4524 DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_TIME,
4525     0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8}
4526 DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_TIME_1,
4527     0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc9}
4528 DEFINE_GUID!{GUID_PROCESSOR_PERF_TIME_CHECK,
4529     0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5}
4530 DEFINE_GUID!{GUID_PROCESSOR_PERF_BOOST_POLICY,
4531     0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59}
4532 pub const PROCESSOR_PERF_BOOST_POLICY_DISABLED: DWORD = 0;
4533 pub const PROCESSOR_PERF_BOOST_POLICY_MAX: DWORD = 100;
4534 DEFINE_GUID!{GUID_PROCESSOR_PERF_BOOST_MODE,
4535     0xbe337238, 0xd82, 0x4146, 0xa9, 0x60, 0x4f, 0x37, 0x49, 0xd4, 0x70, 0xc7}
4536 pub const PROCESSOR_PERF_BOOST_MODE_DISABLED: DWORD = 0;
4537 pub const PROCESSOR_PERF_BOOST_MODE_ENABLED: DWORD = 1;
4538 pub const PROCESSOR_PERF_BOOST_MODE_AGGRESSIVE: DWORD = 2;
4539 pub const PROCESSOR_PERF_BOOST_MODE_EFFICIENT_ENABLED: DWORD = 3;
4540 pub const PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE: DWORD = 4;
4541 pub const PROCESSOR_PERF_BOOST_MODE_AGGRESSIVE_AT_GUARANTEED: DWORD = 5;
4542 pub const PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE_AT_GUARANTEED: DWORD = 6;
4543 pub const PROCESSOR_PERF_BOOST_MODE_MAX: DWORD
4544     = PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE_AT_GUARANTEED;
4545 DEFINE_GUID!{GUID_PROCESSOR_PERF_AUTONOMOUS_MODE,
4546     0x8baa4a8a, 0x14c6, 0x4451, 0x8e, 0x8b, 0x14, 0xbd, 0xbd, 0x19, 0x75, 0x37}
4547 pub const PROCESSOR_PERF_AUTONOMOUS_MODE_DISABLED: DWORD = 0;
4548 pub const PROCESSOR_PERF_AUTONOMOUS_MODE_ENABLED: DWORD = 1;
4549 DEFINE_GUID!{GUID_PROCESSOR_PERF_ENERGY_PERFORMANCE_PREFERENCE,
4550     0x36687f9e, 0xe3a5, 0x4dbf, 0xb1, 0xdc, 0x15, 0xeb, 0x38, 0x1c, 0x68, 0x63}
4551 pub const PROCESSOR_PERF_PERFORMANCE_PREFERENCE: DWORD = 0xff;
4552 pub const PROCESSOR_PERF_ENERGY_PREFERENCE: DWORD = 0;
4553 DEFINE_GUID!{GUID_PROCESSOR_PERF_AUTONOMOUS_ACTIVITY_WINDOW,
4554     0xcfeda3d0, 0x7697, 0x4566, 0xa9, 0x22, 0xa9, 0x8, 0x6c, 0xd4, 0x9d, 0xfa}
4555 pub const PROCESSOR_PERF_MINIMUM_ACTIVITY_WINDOW: DWORD = 0;
4556 pub const PROCESSOR_PERF_MAXIMUM_ACTIVITY_WINDOW: DWORD = 1270000000;
4557 DEFINE_GUID!{GUID_PROCESSOR_DUTY_CYCLING,
4558     0x4e4450b3, 0x6179, 0x4e91, 0xb8, 0xf1, 0x5b, 0xb9, 0x93, 0x8f, 0x81, 0xa1}
4559 pub const PROCESSOR_DUTY_CYCLING_DISABLED: DWORD = 0;
4560 pub const PROCESSOR_DUTY_CYCLING_ENABLED: DWORD = 1;
4561 DEFINE_GUID!{GUID_PROCESSOR_IDLE_ALLOW_SCALING,
4562     0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6}
4563 DEFINE_GUID!{GUID_PROCESSOR_IDLE_DISABLE,
4564     0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad}
4565 DEFINE_GUID!{GUID_PROCESSOR_IDLE_STATE_MAXIMUM,
4566     0x9943e905, 0x9a30, 0x4ec1, 0x9b, 0x99, 0x44, 0xdd, 0x3b, 0x76, 0xf7, 0xa2}
4567 DEFINE_GUID!{GUID_PROCESSOR_IDLE_TIME_CHECK,
4568     0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b}
4569 DEFINE_GUID!{GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD,
4570     0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19}
4571 DEFINE_GUID!{GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD,
4572     0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c}
4573 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD,
4574     0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1}
4575 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD,
4576     0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa}
4577 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY,
4578     0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6}
4579 pub const CORE_PARKING_POLICY_CHANGE_IDEAL: DWORD = 0;
4580 pub const CORE_PARKING_POLICY_CHANGE_SINGLE: DWORD = 1;
4581 pub const CORE_PARKING_POLICY_CHANGE_ROCKET: DWORD = 2;
4582 pub const CORE_PARKING_POLICY_CHANGE_MULTISTEP: DWORD = 3;
4583 pub const CORE_PARKING_POLICY_CHANGE_MAX: DWORD = CORE_PARKING_POLICY_CHANGE_MULTISTEP;
4584 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY,
4585     0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b}
4586 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_MAX_CORES,
4587     0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28}
4588 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_MAX_CORES_1,
4589     0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x29}
4590 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_MIN_CORES,
4591     0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83}
4592 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_MIN_CORES_1,
4593     0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x84}
4594 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME,
4595     0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32}
4596 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME,
4597     0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82}
4598 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR,
4599     0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82}
4600 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD,
4601     0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9}
4602 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING,
4603     0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20}
4604 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR,
4605     0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d}
4606 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD,
4607     0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29}
4608 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING,
4609     0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb}
4610 DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD,
4611     0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1}
4612 DEFINE_GUID!{GUID_PROCESSOR_PARKING_CORE_OVERRIDE,
4613     0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f}
4614 DEFINE_GUID!{GUID_PROCESSOR_PARKING_PERF_STATE,
4615     0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b}
4616 DEFINE_GUID!{GUID_PROCESSOR_PARKING_PERF_STATE_1,
4617     0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2c}
4618 DEFINE_GUID!{GUID_PROCESSOR_PARKING_CONCURRENCY_THRESHOLD,
4619     0x2430ab6f, 0xa520, 0x44a2, 0x96, 0x01, 0xf7, 0xf2, 0x3b, 0x51, 0x34, 0xb1}
4620 DEFINE_GUID!{GUID_PROCESSOR_PARKING_HEADROOM_THRESHOLD,
4621     0xf735a673, 0x2066, 0x4f80, 0xa0, 0xc5, 0xdd, 0xee, 0x0c, 0xf1, 0xbf, 0x5d}
4622 DEFINE_GUID!{GUID_PROCESSOR_PARKING_DISTRIBUTION_THRESHOLD,
4623     0x4bdaf4e9, 0xd103, 0x46d7, 0xa5, 0xf0, 0x62, 0x80, 0x12, 0x16, 0x16, 0xef}
4624 DEFINE_GUID!{GUID_PROCESSOR_PERF_HISTORY,
4625     0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f}
4626 DEFINE_GUID!{GUID_PROCESSOR_PERF_HISTORY_1,
4627     0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x60}
4628 DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_HISTORY,
4629     0x99b3ef01, 0x752f, 0x46a1, 0x80, 0xfb, 0x77, 0x30, 0x1, 0x1f, 0x23, 0x54}
4630 DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_HISTORY,
4631     0x300f6f8, 0xabd6, 0x45a9, 0xb7, 0x4f, 0x49, 0x8, 0x69, 0x1a, 0x40, 0xb5}
4632 DEFINE_GUID!{GUID_PROCESSOR_PERF_CORE_PARKING_HISTORY,
4633     0x77d7f282, 0x8f1a, 0x42cd, 0x85, 0x37, 0x45, 0x45, 0xa, 0x83, 0x9b, 0xe8}
4634 DEFINE_GUID!{GUID_PROCESSOR_PERF_LATENCY_HINT,
4635     0x0822df31, 0x9c83, 0x441c, 0xa0, 0x79, 0x0d, 0xe4, 0xcf, 0x00, 0x9c, 0x7b}
4636 DEFINE_GUID!{GUID_PROCESSOR_PERF_LATENCY_HINT_PERF,
4637     0x619b7505, 0x3b, 0x4e82, 0xb7, 0xa6, 0x4d, 0xd2, 0x9c, 0x30, 0x9, 0x71}
4638 DEFINE_GUID!{GUID_PROCESSOR_PERF_LATENCY_HINT_PERF_1,
4639     0x619b7505, 0x3b, 0x4e82, 0xb7, 0xa6, 0x4d, 0xd2, 0x9c, 0x30, 0x9, 0x72}
4640 DEFINE_GUID!{GUID_PROCESSOR_LATENCY_HINT_MIN_UNPARK,
4641     0x616cdaa5, 0x695e, 0x4545, 0x97, 0xad, 0x97, 0xdc, 0x2d, 0x1b, 0xdd, 0x88}
4642 DEFINE_GUID!{GUID_PROCESSOR_LATENCY_HINT_MIN_UNPARK_1,
4643     0x616cdaa5, 0x695e, 0x4545, 0x97, 0xad, 0x97, 0xdc, 0x2d, 0x1b, 0xdd, 0x89}
4644 DEFINE_GUID!{GUID_PROCESSOR_DISTRIBUTE_UTILITY,
4645     0xe0007330, 0xf589, 0x42ed, 0xa4, 0x01, 0x5d, 0xdb, 0x10, 0xe7, 0x85, 0xd3}
4646 DEFINE_GUID!{GUID_PROCESSOR_HETEROGENEOUS_POLICY,
4647     0x7f2f5cfa, 0xf10c, 0x4823, 0xb5, 0xe1, 0xe9, 0x3a, 0xe8, 0x5f, 0x46, 0xb5}
4648 DEFINE_GUID!{GUID_PROCESSOR_HETERO_DECREASE_TIME,
4649     0x7f2492b6, 0x60b1, 0x45e5, 0xae, 0x55, 0x77, 0x3f, 0x8c, 0xd5, 0xca, 0xec}
4650 DEFINE_GUID!{GUID_PROCESSOR_HETERO_INCREASE_TIME,
4651     0x4009efa7, 0xe72d, 0x4cba, 0x9e, 0xdf, 0x91, 0x08, 0x4e, 0xa8, 0xcb, 0xc3}
4652 DEFINE_GUID!{GUID_PROCESSOR_HETERO_DECREASE_THRESHOLD,
4653     0xf8861c27, 0x95e7, 0x475c, 0x86, 0x5b, 0x13, 0xc0, 0xcb, 0x3f, 0x9d, 0x6b}
4654 DEFINE_GUID!{GUID_PROCESSOR_HETERO_INCREASE_THRESHOLD,
4655     0xb000397d, 0x9b0b, 0x483d, 0x98, 0xc9, 0x69, 0x2a, 0x60, 0x60, 0xcf, 0xbf}
4656 DEFINE_GUID!{GUID_PROCESSOR_CLASS0_FLOOR_PERF,
4657     0xfddc842b, 0x8364, 0x4edc, 0x94, 0xcf, 0xc1, 0x7f, 0x60, 0xde, 0x1c, 0x80}
4658 DEFINE_GUID!{GUID_PROCESSOR_CLASS1_INITIAL_PERF,
4659     0x1facfc65, 0xa930, 0x4bc5, 0x9f, 0x38, 0x50, 0x4e, 0xc0, 0x97, 0xbb, 0xc0}
4660 DEFINE_GUID!{GUID_SYSTEM_COOLING_POLICY,
4661     0x94d3a615, 0xa899, 0x4ac5, 0xae, 0x2b, 0xe4, 0xd8, 0xf6, 0x34, 0x36, 0x7f}
4662 DEFINE_GUID!{GUID_LOCK_CONSOLE_ON_WAKE,
4663     0x0e796bdb, 0x100d, 0x47d6, 0xa2, 0xd5, 0xf7, 0xd2, 0xda, 0xa5, 0x1f, 0x51}
4664 DEFINE_GUID!{GUID_DEVICE_IDLE_POLICY,
4665     0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19}
4666 pub const POWER_DEVICE_IDLE_POLICY_PERFORMANCE: DWORD = 0;
4667 pub const POWER_DEVICE_IDLE_POLICY_CONSERVATIVE: DWORD = 1;
4668 DEFINE_GUID!{GUID_CONNECTIVITY_IN_STANDBY,
4669     0xf15576e8, 0x98b7, 0x4186, 0xb9, 0x44, 0xea, 0xfa, 0x66, 0x44, 0x02, 0xd9}
4670 pub const POWER_CONNECTIVITY_IN_STANDBY_DISABLED: DWORD = 0;
4671 pub const POWER_CONNECTIVITY_IN_STANDBY_ENABLED: DWORD = 1;
4672 pub const POWER_CONNECTIVITY_IN_STANDBY_DISABLED_LID_CLOSE: DWORD = 2;
4673 DEFINE_GUID!{GUID_DISCONNECTED_STANDBY_MODE,
4674     0x68afb2d9, 0xee95, 0x47a8, 0x8f, 0x50, 0x41, 0x15, 0x08, 0x80, 0x73, 0xb1}
4675 pub const POWER_DISCONNECTED_STANDBY_MODE_NORMAL: DWORD = 0;
4676 pub const POWER_DISCONNECTED_STANDBY_MODE_AGGRESSIVE: DWORD = 1;
4677 DEFINE_GUID!{GUID_ACDC_POWER_SOURCE,
4678     0x5d3e9a59, 0xe9d5, 0x4b00, 0xa6, 0xbd, 0xff, 0x34, 0xff, 0x51, 0x65, 0x48}
4679 DEFINE_GUID!{GUID_LIDSWITCH_STATE_CHANGE,
4680     0xba3e0f4d, 0xb817, 0x4094, 0xa2, 0xd1, 0xd5, 0x63, 0x79, 0xe6, 0xa0, 0xf3}
4681 DEFINE_GUID!{GUID_BATTERY_PERCENTAGE_REMAINING,
4682     0xa7ad8041, 0xb45a, 0x4cae, 0x87, 0xa3, 0xee, 0xcb, 0xb4, 0x68, 0xa9, 0xe1}
4683 DEFINE_GUID!{GUID_BATTERY_COUNT,
4684     0x7d263f15, 0xfca4, 0x49e5, 0x85, 0x4b, 0xa9, 0xf2, 0xbf, 0xbd, 0x5c, 0x24}
4685 DEFINE_GUID!{GUID_GLOBAL_USER_PRESENCE,
4686     0x786e8a1d, 0xb427, 0x4344, 0x92, 0x7, 0x9, 0xe7, 0xb, 0xdc, 0xbe, 0xa9}
4687 DEFINE_GUID!{GUID_SESSION_DISPLAY_STATUS,
4688     0x2b84c20e, 0xad23, 0x4ddf, 0x93, 0xdb, 0x5, 0xff, 0xbd, 0x7e, 0xfc, 0xa5}
4689 DEFINE_GUID!{GUID_SESSION_USER_PRESENCE,
4690     0x3c0f4548, 0xc03f, 0x4c4d, 0xb9, 0xf2, 0x23, 0x7e, 0xde, 0x68, 0x63, 0x76}
4691 DEFINE_GUID!{GUID_IDLE_BACKGROUND_TASK,
4692     0x515c31d8, 0xf734, 0x163d, 0xa0, 0xfd, 0x11, 0xa0, 0x8c, 0x91, 0xe8, 0xf1}
4693 DEFINE_GUID!{GUID_BACKGROUND_TASK_NOTIFICATION,
4694     0xcf23f240, 0x2a54, 0x48d8, 0xb1, 0x14, 0xde, 0x15, 0x18, 0xff, 0x05, 0x2e}
4695 DEFINE_GUID!{GUID_APPLAUNCH_BUTTON,
4696     0x1a689231, 0x7399, 0x4e9a, 0x8f, 0x99, 0xb7, 0x1f, 0x99, 0x9d, 0xb3, 0xfa}
4697 DEFINE_GUID!{GUID_PCIEXPRESS_SETTINGS_SUBGROUP,
4698     0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20}
4699 DEFINE_GUID!{GUID_PCIEXPRESS_ASPM_POLICY,
4700     0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5}
4701 DEFINE_GUID!{GUID_ENABLE_SWITCH_FORCED_SHUTDOWN,
4702     0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6}
4703 DEFINE_GUID!{GUID_INTSTEER_SUBGROUP,
4704     0x48672f38, 0x7a9a, 0x4bb2, 0x8b, 0xf8, 0x3d, 0x85, 0xbe, 0x19, 0xde, 0x4e}
4705 DEFINE_GUID!{GUID_INTSTEER_MODE,
4706     0x2bfc24f9, 0x5ea2, 0x4801, 0x82, 0x13, 0x3d, 0xba, 0xe0, 0x1a, 0xa3, 0x9d}
4707 DEFINE_GUID!{GUID_INTSTEER_LOAD_PER_PROC_TRIGGER,
4708     0x73cde64d, 0xd720, 0x4bb2, 0xa8, 0x60, 0xc7, 0x55, 0xaf, 0xe7, 0x7e, 0xf2}
4709 DEFINE_GUID!{GUID_INTSTEER_TIME_UNPARK_TRIGGER,
4710     0xd6ba4903, 0x386f, 0x4c2c, 0x8a, 0xdb, 0x5c, 0x21, 0xb3, 0x32, 0x8d, 0x25}
4711 ENUM!{enum SYSTEM_POWER_STATE {
4712     PowerSystemUnspecified = 0,
4713     PowerSystemWorking = 1,
4714     PowerSystemSleeping1 = 2,
4715     PowerSystemSleeping2 = 3,
4716     PowerSystemSleeping3 = 4,
4717     PowerSystemHibernate = 5,
4718     PowerSystemShutdown = 6,
4719     PowerSystemMaximum = 7,
4720 }}
4721 pub type PSYSTEM_POWER_STATE = *mut SYSTEM_POWER_STATE;
4722 pub const POWER_SYSTEM_MAXIMUM: usize = 7;
4723 ENUM!{enum POWER_ACTION {
4724     PowerActionNone = 0,
4725     PowerActionReserved,
4726     PowerActionSleep,
4727     PowerActionHibernate,
4728     PowerActionShutdown,
4729     PowerActionShutdownReset,
4730     PowerActionShutdownOff,
4731     PowerActionWarmEject,
4732     PowerActionDisplayOff,
4733 }}
4734 pub type PPOWER_ACTION = *mut POWER_ACTION;
4735 ENUM!{enum DEVICE_POWER_STATE {
4736     PowerDeviceUnspecified = 0,
4737     PowerDeviceD0,
4738     PowerDeviceD1,
4739     PowerDeviceD2,
4740     PowerDeviceD3,
4741     PowerDeviceMaximum,
4742 }}
4743 pub type PDEVICE_POWER_STATE = *mut DEVICE_POWER_STATE;
4744 ENUM!{enum MONITOR_DISPLAY_STATE {
4745     PowerMonitorOff = 0,
4746     PowerMonitorOn,
4747     PowerMonitorDim,
4748 }}
4749 pub type PMONITOR_DISPLAY_STATE = *mut MONITOR_DISPLAY_STATE;
4750 ENUM!{enum USER_ACTIVITY_PRESENCE {
4751     PowerUserPresent = 0,
4752     PowerUserNotPresent,
4753     PowerUserInactive,
4754     PowerUserMaximum,
4755     PowerUserInvalid = PowerUserMaximum,
4756 }}
4757 pub type PUSER_ACTIVITY_PRESENCE = *mut USER_ACTIVITY_PRESENCE;
4758 pub const ES_SYSTEM_REQUIRED: DWORD = 0x00000001;
4759 pub const ES_DISPLAY_REQUIRED: DWORD = 0x00000002;
4760 pub const ES_USER_PRESENT: DWORD = 0x00000004;
4761 pub const ES_AWAYMODE_REQUIRED: DWORD = 0x00000040;
4762 pub const ES_CONTINUOUS: DWORD = 0x80000000;
4763 pub type EXECUTION_STATE = DWORD;
4764 pub type PEXECUTION_STATE = *mut DWORD;
4765 ENUM!{enum LATENCY_TIME {
4766     LT_DONT_CARE,
4767     LT_LOWEST_LATENCY,
4768 }}
4769 pub const DIAGNOSTIC_REASON_VERSION: ULONG = 0;
4770 pub const DIAGNOSTIC_REASON_SIMPLE_STRING: ULONG = 0x00000001;
4771 pub const DIAGNOSTIC_REASON_DETAILED_STRING: ULONG = 0x00000002;
4772 pub const DIAGNOSTIC_REASON_NOT_SPECIFIED: ULONG = 0x80000000;
4773 pub const DIAGNOSTIC_REASON_INVALID_FLAGS: ULONG = !0x80000007;
4774 pub const POWER_REQUEST_CONTEXT_VERSION: ULONG = DIAGNOSTIC_REASON_VERSION;
4775 pub const POWER_REQUEST_CONTEXT_SIMPLE_STRING: ULONG = DIAGNOSTIC_REASON_SIMPLE_STRING;
4776 pub const POWER_REQUEST_CONTEXT_DETAILED_STRING: ULONG = DIAGNOSTIC_REASON_DETAILED_STRING;
4777 ENUM!{enum POWER_REQUEST_TYPE {
4778     PowerRequestDisplayRequired,
4779     PowerRequestSystemRequired,
4780     PowerRequestAwayModeRequired,
4781     PowerRequestExecutionRequired,
4782 }}
4783 pub type PPOWER_REQUEST_TYPE = *mut POWER_REQUEST_TYPE;
4784 pub const PDCAP_D0_SUPPORTED: DWORD = 0x00000001;
4785 pub const PDCAP_D1_SUPPORTED: DWORD = 0x00000002;
4786 pub const PDCAP_D2_SUPPORTED: DWORD = 0x00000004;
4787 pub const PDCAP_D3_SUPPORTED: DWORD = 0x00000008;
4788 pub const PDCAP_WAKE_FROM_D0_SUPPORTED: DWORD = 0x00000010;
4789 pub const PDCAP_WAKE_FROM_D1_SUPPORTED: DWORD = 0x00000020;
4790 pub const PDCAP_WAKE_FROM_D2_SUPPORTED: DWORD = 0x00000040;
4791 pub const PDCAP_WAKE_FROM_D3_SUPPORTED: DWORD = 0x00000080;
4792 pub const PDCAP_WARM_EJECT_SUPPORTED: DWORD = 0x00000100;
4793 STRUCT!{struct CM_POWER_DATA {
4794     PD_Size: DWORD,
4795     PD_MostRecentPowerState: DEVICE_POWER_STATE,
4796     PD_Capabilities: DWORD,
4797     PD_D1Latency: DWORD,
4798     PD_D2Latency: DWORD,
4799     PD_D3Latency: DWORD,
4800     PD_PowerStateMapping: [DEVICE_POWER_STATE; POWER_SYSTEM_MAXIMUM],
4801     PD_DeepestSystemWake: SYSTEM_POWER_STATE,
4802 }}
4803 pub type PCM_POWER_DATA = *mut CM_POWER_DATA;
4804 ENUM!{enum POWER_INFORMATION_LEVEL {
4805     SystemPowerPolicyAc,
4806     SystemPowerPolicyDc,
4807     VerifySystemPolicyAc,
4808     VerifySystemPolicyDc,
4809     SystemPowerCapabilities,
4810     SystemBatteryState,
4811     SystemPowerStateHandler,
4812     ProcessorStateHandler,
4813     SystemPowerPolicyCurrent,
4814     AdministratorPowerPolicy,
4815     SystemReserveHiberFile,
4816     ProcessorInformation,
4817     SystemPowerInformation,
4818     ProcessorStateHandler2,
4819     LastWakeTime,
4820     LastSleepTime,
4821     SystemExecutionState,
4822     SystemPowerStateNotifyHandler,
4823     ProcessorPowerPolicyAc,
4824     ProcessorPowerPolicyDc,
4825     VerifyProcessorPowerPolicyAc,
4826     VerifyProcessorPowerPolicyDc,
4827     ProcessorPowerPolicyCurrent,
4828     SystemPowerStateLogging,
4829     SystemPowerLoggingEntry,
4830     SetPowerSettingValue,
4831     NotifyUserPowerSetting,
4832     PowerInformationLevelUnused0,
4833     SystemMonitorHiberBootPowerOff,
4834     SystemVideoState,
4835     TraceApplicationPowerMessage,
4836     TraceApplicationPowerMessageEnd,
4837     ProcessorPerfStates,
4838     ProcessorIdleStates,
4839     ProcessorCap,
4840     SystemWakeSource,
4841     SystemHiberFileInformation,
4842     TraceServicePowerMessage,
4843     ProcessorLoad,
4844     PowerShutdownNotification,
4845     MonitorCapabilities,
4846     SessionPowerInit,
4847     SessionDisplayState,
4848     PowerRequestCreate,
4849     PowerRequestAction,
4850     GetPowerRequestList,
4851     ProcessorInformationEx,
4852     NotifyUserModeLegacyPowerEvent,
4853     GroupPark,
4854     ProcessorIdleDomains,
4855     WakeTimerList,
4856     SystemHiberFileSize,
4857     ProcessorIdleStatesHv,
4858     ProcessorPerfStatesHv,
4859     ProcessorPerfCapHv,
4860     ProcessorSetIdle,
4861     LogicalProcessorIdling,
4862     UserPresence,
4863     PowerSettingNotificationName,
4864     GetPowerSettingValue,
4865     IdleResiliency,
4866     SessionRITState,
4867     SessionConnectNotification,
4868     SessionPowerCleanup,
4869     SessionLockState,
4870     SystemHiberbootState,
4871     PlatformInformation,
4872     PdcInvocation,
4873     MonitorInvocation,
4874     FirmwareTableInformationRegistered,
4875     SetShutdownSelectedTime,
4876     SuspendResumeInvocation,
4877     PlmPowerRequestCreate,
4878     ScreenOff,
4879     CsDeviceNotification,
4880     PlatformRole,
4881     LastResumePerformance,
4882     DisplayBurst,
4883     ExitLatencySamplingPercentage,
4884     RegisterSpmPowerSettings,
4885     PlatformIdleStates,
4886     ProcessorIdleVeto,
4887     PlatformIdleVeto,
4888     SystemBatteryStatePrecise,
4889     ThermalEvent,
4890     PowerRequestActionInternal,
4891     BatteryDeviceState,
4892     PowerInformationInternal,
4893     ThermalStandby,
4894     SystemHiberFileType,
4895     PhysicalPowerButtonPress,
4896     QueryPotentialDripsConstraint,
4897     EnergyTrackerCreate,
4898     EnergyTrackerQuery,
4899     UpdateBlackBoxRecorder,
4900     PowerInformationLevelMaximum,
4901 }}
4902 ENUM!{enum POWER_USER_PRESENCE_TYPE {
4903     UserNotPresent = 0,
4904     UserPresent = 1,
4905     UserUnknown = 0xff,
4906 }}
4907 pub type PPOWER_USER_PRESENCE_TYPE = *mut POWER_USER_PRESENCE_TYPE;
4908 STRUCT!{struct POWER_USER_PRESENCE {
4909     UserPresence: POWER_USER_PRESENCE_TYPE,
4910 }}
4911 pub type PPOWER_USER_PRESENCE = *mut POWER_USER_PRESENCE;
4912 STRUCT!{struct POWER_SESSION_CONNECT {
4913     Connected: BOOLEAN,
4914     Console: BOOLEAN,
4915 }}
4916 pub type PPOWER_SESSION_CONNECT = *mut POWER_SESSION_CONNECT;
4917 STRUCT!{struct POWER_SESSION_TIMEOUTS {
4918     InputTimeout: DWORD,
4919     DisplayTimeout: DWORD,
4920 }}
4921 pub type PPOWER_SESSION_TIMEOUTS = *mut POWER_SESSION_TIMEOUTS;
4922 STRUCT!{struct POWER_SESSION_RIT_STATE {
4923     Active: BOOLEAN,
4924     LastInputTime: DWORD,
4925 }}
4926 pub type PPOWER_SESSION_RIT_STATE = *mut POWER_SESSION_RIT_STATE;
4927 STRUCT!{struct POWER_SESSION_WINLOGON {
4928     SessionId: DWORD,
4929     Console: BOOLEAN,
4930     Locked: BOOLEAN,
4931 }}
4932 pub type PPOWER_SESSION_WINLOGON = *mut POWER_SESSION_WINLOGON;
4933 STRUCT!{struct POWER_IDLE_RESILIENCY {
4934     CoalescingTimeout: DWORD,
4935     IdleResiliencyPeriod: DWORD,
4936 }}
4937 pub type PPOWER_IDLE_RESILIENCY = *mut POWER_IDLE_RESILIENCY;
4938 ENUM!{enum POWER_MONITOR_REQUEST_REASON {
4939     MonitorRequestReasonUnknown,
4940     MonitorRequestReasonPowerButton,
4941     MonitorRequestReasonRemoteConnection,
4942     MonitorRequestReasonScMonitorpower,
4943     MonitorRequestReasonUserInput,
4944     MonitorRequestReasonAcDcDisplayBurst,
4945     MonitorRequestReasonUserDisplayBurst,
4946     MonitorRequestReasonPoSetSystemState,
4947     MonitorRequestReasonSetThreadExecutionState,
4948     MonitorRequestReasonFullWake,
4949     MonitorRequestReasonSessionUnlock,
4950     MonitorRequestReasonScreenOffRequest,
4951     MonitorRequestReasonIdleTimeout,
4952     MonitorRequestReasonPolicyChange,
4953     MonitorRequestReasonSleepButton,
4954     MonitorRequestReasonLid,
4955     MonitorRequestReasonBatteryCountChange,
4956     MonitorRequestReasonGracePeriod,
4957     MonitorRequestReasonPnP,
4958     MonitorRequestReasonDP,
4959     MonitorRequestReasonSxTransition,
4960     MonitorRequestReasonSystemIdle,
4961     MonitorRequestReasonNearProximity,
4962     MonitorRequestReasonThermalStandby,
4963     MonitorRequestReasonResumePdc,
4964     MonitorRequestReasonResumeS4,
4965     MonitorRequestReasonTerminal,
4966     MonitorRequestReasonPdcSignal,
4967     MonitorRequestReasonAcDcDisplayBurstSuppressed,
4968     MonitorRequestReasonSystemStateEntered,
4969     MonitorRequestReasonWinrt,
4970     MonitorRequestReasonMax,
4971 }}
4972 ENUM!{enum POWER_MONITOR_REQUEST_TYPE {
4973     MonitorRequestTypeOff,
4974     MonitorRequestTypeOnAndPresent,
4975     MonitorRequestTypeToggleOn,
4976 }}
4977 STRUCT!{struct POWER_MONITOR_INVOCATION {
4978     Console: BOOLEAN,
4979     RequestReason: POWER_MONITOR_REQUEST_REASON,
4980 }}
4981 pub type PPOWER_MONITOR_INVOCATION = *mut POWER_MONITOR_INVOCATION;
4982 STRUCT!{struct RESUME_PERFORMANCE {
4983     PostTimeMs: DWORD,
4984     TotalResumeTimeMs: ULONGLONG,
4985     ResumeCompleteTimestamp: ULONGLONG,
4986 }}
4987 pub type PRESUME_PERFORMANCE = *mut RESUME_PERFORMANCE;
4988 ENUM!{enum SYSTEM_POWER_CONDITION {
4989     PoAc,
4990     PoDc,
4991     PoHot,
4992     PoConditionMaximum,
4993 }}
4994 STRUCT!{struct SET_POWER_SETTING_VALUE {
4995     Version: DWORD,
4996     Guid: GUID,
4997     PowerCondition: SYSTEM_POWER_CONDITION,
4998     DataLength: DWORD,
4999     Data: [BYTE; ANYSIZE_ARRAY],
5000 }}
5001 pub type PSET_POWER_SETTING_VALUE = *mut SET_POWER_SETTING_VALUE;
5002 STRUCT!{struct NOTIFY_USER_POWER_SETTING {
5003     Guid: GUID,
5004 }}
5005 pub type PNOTIFY_USER_POWER_SETTING = *mut NOTIFY_USER_POWER_SETTING;
5006 STRUCT!{struct APPLICATIONLAUNCH_SETTING_VALUE {
5007     ActivationTime: LARGE_INTEGER,
5008     Flags: DWORD,
5009     ButtonInstanceID: DWORD,
5010 }}
5011 pub type PAPPLICATIONLAUNCH_SETTING_VALUE = *mut APPLICATIONLAUNCH_SETTING_VALUE;
5012 ENUM!{enum POWER_PLATFORM_ROLE {
5013     PlatformRoleUnspecified = 0,
5014     PlatformRoleDesktop,
5015     PlatformRoleMobile,
5016     PlatformRoleWorkstation,
5017     PlatformRoleEnterpriseServer,
5018     PlatformRoleSOHOServer,
5019     PlatformRoleAppliancePC,
5020     PlatformRolePerformanceServer,
5021     PlatformRoleSlate,
5022     PlatformRoleMaximum,
5023 }}
5024 pub type PPOWER_PLATFORM_ROLE = *mut POWER_PLATFORM_ROLE;
5025 pub const POWER_PLATFORM_ROLE_V1: ULONG = 0x00000001;
5026 pub const POWER_PLATFORM_ROLE_V1_MAX: POWER_PLATFORM_ROLE = PlatformRolePerformanceServer + 1;
5027 pub const POWER_PLATFORM_ROLE_V2: ULONG = 0x00000002;
5028 pub const POWER_PLATFORM_ROLE_V2_MAX: POWER_PLATFORM_ROLE = PlatformRoleSlate + 1;
5029 pub const POWER_PLATFORM_ROLE_VERSION: ULONG = POWER_PLATFORM_ROLE_V2;
5030 pub const POWER_PLATFORM_ROLE_VERSION_MAX: POWER_PLATFORM_ROLE = POWER_PLATFORM_ROLE_V2_MAX;
5031 STRUCT!{struct POWER_PLATFORM_INFORMATION {
5032     AoAc: BOOLEAN,
5033 }}
5034 pub type PPOWER_PLATFORM_INFORMATION = *mut POWER_PLATFORM_INFORMATION;
5035 STRUCT!{struct BATTERY_REPORTING_SCALE {
5036     Granularity: DWORD,
5037     Capacity: DWORD,
5038 }}
5039 pub type PBATTERY_REPORTING_SCALE = *mut BATTERY_REPORTING_SCALE;
5040 STRUCT!{struct PPM_WMI_LEGACY_PERFSTATE {
5041     Frequency: DWORD,
5042     Flags: DWORD,
5043     PercentFrequency: DWORD,
5044 }}
5045 pub type PPPM_WMI_LEGACY_PERFSTATE = *mut PPM_WMI_LEGACY_PERFSTATE;
5046 STRUCT!{struct PPM_WMI_IDLE_STATE {
5047     Latency: DWORD,
5048     Power: DWORD,
5049     TimeCheck: DWORD,
5050     PromotePercent: BYTE,
5051     DemotePercent: BYTE,
5052     StateType: BYTE,
5053     Reserved: BYTE,
5054     StateFlags: DWORD,
5055     Context: DWORD,
5056     IdleHandler: DWORD,
5057     Reserved1: DWORD,
5058 }}
5059 pub type PPPM_WMI_IDLE_STATE = *mut PPM_WMI_IDLE_STATE;
5060 STRUCT!{struct PPM_WMI_IDLE_STATES {
5061     Type: DWORD,
5062     Count: DWORD,
5063     TargetState: DWORD,
5064     OldState: DWORD,
5065     TargetProcessors: DWORD64,
5066     State: [PPM_WMI_IDLE_STATE; ANYSIZE_ARRAY],
5067 }}
5068 pub type PPPM_WMI_IDLE_STATES = *mut PPM_WMI_IDLE_STATES;
5069 STRUCT!{struct PPM_WMI_IDLE_STATES_EX {
5070     Type: DWORD,
5071     Count: DWORD,
5072     TargetState: DWORD,
5073     OldState: DWORD,
5074     TargetProcessors: PVOID,
5075     State: [PPM_WMI_IDLE_STATE; ANYSIZE_ARRAY],
5076 }}
5077 pub type PPPM_WMI_IDLE_STATES_EX = *mut PPM_WMI_IDLE_STATES_EX;
5078 STRUCT!{struct PPM_WMI_PERF_STATE {
5079     Frequency: DWORD,
5080     Power: DWORD,
5081     PercentFrequency: BYTE,
5082     IncreaseLevel: BYTE,
5083     DecreaseLevel: BYTE,
5084     Type: BYTE,
5085     IncreaseTime: DWORD,
5086     DecreaseTime: DWORD,
5087     Control: DWORD64,
5088     Status: DWORD64,
5089     HitCount: DWORD,
5090     Reserved1: DWORD,
5091     Reserved2: DWORD64,
5092     Reserved3: DWORD64,
5093 }}
5094 pub type PPPM_WMI_PERF_STATE = *mut PPM_WMI_PERF_STATE;
5095 STRUCT!{struct PPM_WMI_PERF_STATES {
5096     Count: DWORD,
5097     MaxFrequency: DWORD,
5098     CurrentState: DWORD,
5099     MaxPerfState: DWORD,
5100     MinPerfState: DWORD,
5101     LowestPerfState: DWORD,
5102     ThermalConstraint: DWORD,
5103     BusyAdjThreshold: BYTE,
5104     PolicyType: BYTE,
5105     Type: BYTE,
5106     Reserved: BYTE,
5107     TimerInterval: DWORD,
5108     TargetProcessors: DWORD64,
5109     PStateHandler: DWORD,
5110     PStateContext: DWORD,
5111     TStateHandler: DWORD,
5112     TStateContext: DWORD,
5113     FeedbackHandler: DWORD,
5114     Reserved1: DWORD,
5115     Reserved2: DWORD64,
5116     State: [PPM_WMI_PERF_STATE; ANYSIZE_ARRAY],
5117 }}
5118 pub type PPPM_WMI_PERF_STATES = *mut PPM_WMI_PERF_STATES;
5119 STRUCT!{struct PPM_WMI_PERF_STATES_EX {
5120     Count: DWORD,
5121     MaxFrequency: DWORD,
5122     CurrentState: DWORD,
5123     MaxPerfState: DWORD,
5124     MinPerfState: DWORD,
5125     LowestPerfState: DWORD,
5126     ThermalConstraint: DWORD,
5127     BusyAdjThreshold: BYTE,
5128     PolicyType: BYTE,
5129     Type: BYTE,
5130     Reserved: BYTE,
5131     TimerInterval: DWORD,
5132     TargetProcessors: PVOID,
5133     PStateHandler: DWORD,
5134     PStateContext: DWORD,
5135     TStateHandler: DWORD,
5136     TStateContext: DWORD,
5137     FeedbackHandler: DWORD,
5138     Reserved1: DWORD,
5139     Reserved2: DWORD64,
5140     State: [PPM_WMI_PERF_STATE; ANYSIZE_ARRAY],
5141 }}
5142 pub type PPPM_WMI_PERF_STATES_EX = *mut PPM_WMI_PERF_STATES_EX;
5143 pub const PROC_IDLE_BUCKET_COUNT: usize = 6;
5144 STRUCT!{struct PPM_IDLE_STATE_ACCOUNTING {
5145     IdleTransitions: DWORD,
5146     FailedTransitions: DWORD,
5147     InvalidBucketIndex: DWORD,
5148     TotalTime: DWORD64,
5149     IdleTimeBuckets: [DWORD; PROC_IDLE_BUCKET_COUNT],
5150 }}
5151 pub type PPPM_IDLE_STATE_ACCOUNTING = *mut PPM_IDLE_STATE_ACCOUNTING;
5152 STRUCT!{struct PPM_IDLE_ACCOUNTING {
5153     StateCount: DWORD,
5154     TotalTransitions: DWORD,
5155     ResetCount: DWORD,
5156     StartTime: DWORD64,
5157     State: [PPM_IDLE_STATE_ACCOUNTING; ANYSIZE_ARRAY],
5158 }}
5159 pub type PPPM_IDLE_ACCOUNTING = *mut PPM_IDLE_ACCOUNTING;
5160 pub const PROC_IDLE_BUCKET_COUNT_EX: usize = 16;
5161 STRUCT!{struct PPM_IDLE_STATE_BUCKET_EX {
5162     TotalTimeUs: DWORD64,
5163     MinTimeUs: DWORD,
5164     MaxTimeUs: DWORD,
5165     Count: DWORD,
5166 }}
5167 pub type PPPM_IDLE_STATE_BUCKET_EX = *mut PPM_IDLE_STATE_BUCKET_EX;
5168 STRUCT!{struct PPM_IDLE_STATE_ACCOUNTING_EX {
5169     TotalTime: DWORD64,
5170     IdleTransitions: DWORD,
5171     FailedTransitions: DWORD,
5172     InvalidBucketIndex: DWORD,
5173     MinTimeUs: DWORD,
5174     MaxTimeUs: DWORD,
5175     CancelledTransitions: DWORD,
5176     IdleTimeBuckets: [PPM_IDLE_STATE_BUCKET_EX; PROC_IDLE_BUCKET_COUNT_EX],
5177 }}
5178 pub type PPPM_IDLE_STATE_ACCOUNTING_EX = *mut PPM_IDLE_STATE_ACCOUNTING_EX;
5179 STRUCT!{struct PPM_IDLE_ACCOUNTING_EX {
5180     StateCount: DWORD,
5181     TotalTransitions: DWORD,
5182     ResetCount: DWORD,
5183     AbortCount: DWORD,
5184     StartTime: DWORD64,
5185     State: [PPM_IDLE_STATE_ACCOUNTING_EX; ANYSIZE_ARRAY],
5186 }}
5187 pub type PPPM_IDLE_ACCOUNTING_EX = *mut PPM_IDLE_ACCOUNTING_EX;
5188 pub const ACPI_PPM_SOFTWARE_ALL: DWORD = 0xFC;
5189 pub const ACPI_PPM_SOFTWARE_ANY: DWORD = 0xFD;
5190 pub const ACPI_PPM_HARDWARE_ALL: DWORD = 0xFE;
5191 pub const MS_PPM_SOFTWARE_ALL: DWORD = 0x1;
5192 pub const PPM_FIRMWARE_ACPI1C2: DWORD = 0x00000001;
5193 pub const PPM_FIRMWARE_ACPI1C3: DWORD = 0x00000002;
5194 pub const PPM_FIRMWARE_ACPI1TSTATES: DWORD = 0x00000004;
5195 pub const PPM_FIRMWARE_CST: DWORD = 0x00000008;
5196 pub const PPM_FIRMWARE_CSD: DWORD = 0x00000010;
5197 pub const PPM_FIRMWARE_PCT: DWORD = 0x00000020;
5198 pub const PPM_FIRMWARE_PSS: DWORD = 0x00000040;
5199 pub const PPM_FIRMWARE_XPSS: DWORD = 0x00000080;
5200 pub const PPM_FIRMWARE_PPC: DWORD = 0x00000100;
5201 pub const PPM_FIRMWARE_PSD: DWORD = 0x00000200;
5202 pub const PPM_FIRMWARE_PTC: DWORD = 0x00000400;
5203 pub const PPM_FIRMWARE_TSS: DWORD = 0x00000800;
5204 pub const PPM_FIRMWARE_TPC: DWORD = 0x00001000;
5205 pub const PPM_FIRMWARE_TSD: DWORD = 0x00002000;
5206 pub const PPM_FIRMWARE_PCCH: DWORD = 0x00004000;
5207 pub const PPM_FIRMWARE_PCCP: DWORD = 0x00008000;
5208 pub const PPM_FIRMWARE_OSC: DWORD = 0x00010000;
5209 pub const PPM_FIRMWARE_PDC: DWORD = 0x00020000;
5210 pub const PPM_FIRMWARE_CPC: DWORD = 0x00040000;
5211 pub const PPM_FIRMWARE_LPI: DWORD = 0x00080000;
5212 pub const PPM_PERFORMANCE_IMPLEMENTATION_NONE: DWORD = 0x00000000;
5213 pub const PPM_PERFORMANCE_IMPLEMENTATION_PSTATES: DWORD = 0x00000001;
5214 pub const PPM_PERFORMANCE_IMPLEMENTATION_PCCV1: DWORD = 0x00000002;
5215 pub const PPM_PERFORMANCE_IMPLEMENTATION_CPPC: DWORD = 0x00000003;
5216 pub const PPM_PERFORMANCE_IMPLEMENTATION_PEP: DWORD = 0x00000004;
5217 pub const PPM_IDLE_IMPLEMENTATION_NONE: DWORD = 0x00000000;
5218 pub const PPM_IDLE_IMPLEMENTATION_CSTATES: DWORD = 0x00000001;
5219 pub const PPM_IDLE_IMPLEMENTATION_PEP: DWORD = 0x00000002;
5220 pub const PPM_IDLE_IMPLEMENTATION_MICROPEP: DWORD = 0x00000003;
5221 pub const PPM_IDLE_IMPLEMENTATION_LPISTATES: DWORD = 0x00000004;
5222 DEFINE_GUID!{PPM_PERFSTATE_CHANGE_GUID,
5223     0xa5b32ddd, 0x7f39, 0x4abc, 0xb8, 0x92, 0x90, 0xe, 0x43, 0xb5, 0x9e, 0xbb}
5224 DEFINE_GUID!{PPM_PERFSTATE_DOMAIN_CHANGE_GUID,
5225     0x995e6b7f, 0xd653, 0x497a, 0xb9, 0x78, 0x36, 0xa3, 0xc, 0x29, 0xbf, 0x1}
5226 DEFINE_GUID!{PPM_IDLESTATE_CHANGE_GUID,
5227     0x4838fe4f, 0xf71c, 0x4e51, 0x9e, 0xcc, 0x84, 0x30, 0xa7, 0xac, 0x4c, 0x6c}
5228 DEFINE_GUID!{PPM_PERFSTATES_DATA_GUID,
5229     0x5708cc20, 0x7d40, 0x4bf4, 0xb4, 0xaa, 0x2b, 0x01, 0x33, 0x8d, 0x01, 0x26}
5230 DEFINE_GUID!{PPM_IDLESTATES_DATA_GUID,
5231     0xba138e10, 0xe250, 0x4ad7, 0x86, 0x16, 0xcf, 0x1a, 0x7a, 0xd4, 0x10, 0xe7}
5232 DEFINE_GUID!{PPM_IDLE_ACCOUNTING_GUID,
5233     0xe2a26f78, 0xae07, 0x4ee0, 0xa3, 0x0f, 0xce, 0x54, 0xf5, 0x5a, 0x94, 0xcd}
5234 DEFINE_GUID!{PPM_IDLE_ACCOUNTING_EX_GUID,
5235     0xd67abd39, 0x81f8, 0x4a5e, 0x81, 0x52, 0x72, 0xe3, 0x1e, 0xc9, 0x12, 0xee}
5236 DEFINE_GUID!{PPM_THERMALCONSTRAINT_GUID,
5237     0xa852c2c8, 0x1a4c, 0x423b, 0x8c, 0x2c, 0xf3, 0x0d, 0x82, 0x93, 0x1a, 0x88}
5238 DEFINE_GUID!{PPM_PERFMON_PERFSTATE_GUID,
5239     0x7fd18652, 0xcfe, 0x40d2, 0xb0, 0xa1, 0xb, 0x6, 0x6a, 0x87, 0x75, 0x9e}
5240 DEFINE_GUID!{PPM_THERMAL_POLICY_CHANGE_GUID,
5241     0x48f377b8, 0x6880, 0x4c7b, 0x8b, 0xdc, 0x38, 0x1, 0x76, 0xc6, 0x65, 0x4d}
5242 STRUCT!{struct PPM_PERFSTATE_EVENT {
5243     State: DWORD,
5244     Status: DWORD,
5245     Latency: DWORD,
5246     Speed: DWORD,
5247     Processor: DWORD,
5248 }}
5249 pub type PPPM_PERFSTATE_EVENT = *mut PPM_PERFSTATE_EVENT;
5250 STRUCT!{struct PPM_PERFSTATE_DOMAIN_EVENT {
5251     State: DWORD,
5252     Latency: DWORD,
5253     Speed: DWORD,
5254     Processors: DWORD64,
5255 }}
5256 pub type PPPM_PERFSTATE_DOMAIN_EVENT = *mut PPM_PERFSTATE_DOMAIN_EVENT;
5257 STRUCT!{struct PPM_IDLESTATE_EVENT {
5258     NewState: DWORD,
5259     OldState: DWORD,
5260     Processors: DWORD64,
5261 }}
5262 pub type PPPM_IDLESTATE_EVENT = *mut PPM_IDLESTATE_EVENT;
5263 STRUCT!{struct PPM_THERMALCHANGE_EVENT {
5264     ThermalConstraint: DWORD,
5265     Processors: DWORD64,
5266 }}
5267 pub type PPPM_THERMALCHANGE_EVENT = *mut PPM_THERMALCHANGE_EVENT;
5268 STRUCT!{struct PPM_THERMAL_POLICY_EVENT {
5269     Mode: BYTE,
5270     Processors: DWORD64,
5271 }}
5272 pub type PPPM_THERMAL_POLICY_EVENT = *mut PPM_THERMAL_POLICY_EVENT;
5273 STRUCT!{struct POWER_ACTION_POLICY {
5274     Action: POWER_ACTION,
5275     Flags: DWORD,
5276     EventCode: DWORD,
5277 }}
5278 pub type PPOWER_ACTION_POLICY = *mut POWER_ACTION_POLICY;
5279 pub const POWER_ACTION_QUERY_ALLOWED: DWORD = 0x00000001;
5280 pub const POWER_ACTION_UI_ALLOWED: DWORD = 0x00000002;
5281 pub const POWER_ACTION_OVERRIDE_APPS: DWORD = 0x00000004;
5282 pub const POWER_ACTION_HIBERBOOT: DWORD = 0x00000008;
5283 pub const POWER_ACTION_USER_NOTIFY: DWORD = 0x00000010;
5284 pub const POWER_ACTION_DOZE_TO_HIBERNATE: DWORD = 0x00000020;
5285 pub const POWER_ACTION_PSEUDO_TRANSITION: DWORD = 0x08000000;
5286 pub const POWER_ACTION_LIGHTEST_FIRST: DWORD = 0x10000000;
5287 pub const POWER_ACTION_LOCK_CONSOLE: DWORD = 0x20000000;
5288 pub const POWER_ACTION_DISABLE_WAKES: DWORD = 0x40000000;
5289 pub const POWER_ACTION_CRITICAL: DWORD = 0x80000000;
5290 pub const POWER_LEVEL_USER_NOTIFY_TEXT: DWORD = 0x00000001;
5291 pub const POWER_LEVEL_USER_NOTIFY_SOUND: DWORD = 0x00000002;
5292 pub const POWER_LEVEL_USER_NOTIFY_EXEC: DWORD = 0x00000004;
5293 pub const POWER_USER_NOTIFY_BUTTON: DWORD = 0x00000008;
5294 pub const POWER_USER_NOTIFY_SHUTDOWN: DWORD = 0x00000010;
5295 pub const POWER_USER_NOTIFY_FORCED_SHUTDOWN: DWORD = 0x00000020;
5296 pub const POWER_FORCE_TRIGGER_RESET: DWORD = 0x80000000;
5297 pub const BATTERY_DISCHARGE_FLAGS_EVENTCODE_MASK: DWORD = 0x00000007;
5298 pub const BATTERY_DISCHARGE_FLAGS_ENABLE: DWORD = 0x80000000;
5299 STRUCT!{struct SYSTEM_POWER_LEVEL {
5300     Enable: BOOLEAN,
5301     Spare: [BYTE; 3],
5302     BatteryLevel: DWORD,
5303     PowerPolicy: POWER_ACTION_POLICY,
5304     MinSystemState: SYSTEM_POWER_STATE,
5305 }}
5306 pub type PSYSTEM_POWER_LEVEL = *mut SYSTEM_POWER_LEVEL;
5307 pub const NUM_DISCHARGE_POLICIES: usize = 4;
5308 pub const DISCHARGE_POLICY_CRITICAL: DWORD = 0;
5309 pub const DISCHARGE_POLICY_LOW: DWORD = 1;
5310 STRUCT!{struct SYSTEM_POWER_POLICY {
5311     Revision: DWORD,
5312     PowerButton: POWER_ACTION_POLICY,
5313     SleepButton: POWER_ACTION_POLICY,
5314     LidClose: POWER_ACTION_POLICY,
5315     LidOpenWake: SYSTEM_POWER_STATE,
5316     Reserved: DWORD,
5317     Idle: POWER_ACTION_POLICY,
5318     IdleTimeout: DWORD,
5319     IdleSensitivity: BYTE,
5320     DynamicThrottle: BYTE,
5321     Spare2: [BYTE; 2],
5322     MinSleep: SYSTEM_POWER_STATE,
5323     MaxSleep: SYSTEM_POWER_STATE,
5324     ReducedLatencySleep: SYSTEM_POWER_STATE,
5325     WinLogonFlags: DWORD,
5326     Spare3: DWORD,
5327     DozeS4Timeout: DWORD,
5328     BroadcastCapacityResolution: DWORD,
5329     DischargePolicy: [SYSTEM_POWER_LEVEL; NUM_DISCHARGE_POLICIES],
5330     VideoTimeout: DWORD,
5331     VideoDimDisplay: BOOLEAN,
5332     VideoReserved: [DWORD; 3],
5333     SpindownTimeout: DWORD,
5334     OptimizeForPower: BOOLEAN,
5335     FanThrottleTolerance: BYTE,
5336     ForcedThrottle: BYTE,
5337     MinThrottle: BYTE,
5338     OverThrottled: POWER_ACTION_POLICY,
5339 }}
5340 pub type PSYSTEM_POWER_POLICY = *mut SYSTEM_POWER_POLICY;
5341 pub const PROCESSOR_IDLESTATE_POLICY_COUNT: usize = 0x3;
5342 STRUCT!{struct PROCESSOR_IDLESTATE_INFO {
5343     TimeCheck: DWORD,
5344     DemotePercent: BYTE,
5345     PromotePercent: BYTE,
5346     Spare: [BYTE; 2],
5347 }}
5348 pub type PPROCESSOR_IDLESTATE_INFO = *mut PROCESSOR_IDLESTATE_INFO;
5349 STRUCT!{struct PROCESSOR_IDLESTATE_POLICY_Flags {
5350     AsWORD: WORD,
5351 }}
5352 BITFIELD!{PROCESSOR_IDLESTATE_POLICY_Flags AsWORD: WORD [
5353     AllowScaling set_AllowScaling[0..1],
5354     Disabled set_Disabled[1..2],
5355     Reserved set_Reserved[2..16],
5356 ]}
5357 STRUCT!{struct PROCESSOR_IDLESTATE_POLICY {
5358     Revision: WORD,
5359     Flags: PROCESSOR_IDLESTATE_POLICY_Flags,
5360     PolicyCount: DWORD,
5361     Policy: [PROCESSOR_IDLESTATE_INFO; PROCESSOR_IDLESTATE_POLICY_COUNT],
5362 }}
5363 pub type PPROCESSOR_IDLESTATE_POLICY = *mut PROCESSOR_IDLESTATE_POLICY;
5364 pub const PO_THROTTLE_NONE: DWORD = 0;
5365 pub const PO_THROTTLE_CONSTANT: DWORD = 1;
5366 pub const PO_THROTTLE_DEGRADE: DWORD = 2;
5367 pub const PO_THROTTLE_ADAPTIVE: DWORD = 3;
5368 pub const PO_THROTTLE_MAXIMUM: DWORD = 4;
5369 STRUCT!{struct PROCESSOR_POWER_POLICY_INFO {
5370     TimeCheck: DWORD,
5371     DemoteLimit: DWORD,
5372     PromoteLimit: DWORD,
5373     DemotePercent: BYTE,
5374     PromotePercent: BYTE,
5375     Spare: [BYTE; 2],
5376     Reserved: DWORD,
5377 }}
5378 BITFIELD!{PROCESSOR_POWER_POLICY_INFO Reserved: DWORD [
5379     AllowDemotion set_AllowDemotion[0..1],
5380     AllowPromotion set_AllowPromotion[1..2],
5381     Reserved set_Reserved[2..32],
5382 ]}
5383 pub type PPROCESSOR_POWER_POLICY_INFO = *mut PROCESSOR_POWER_POLICY_INFO;
5384 STRUCT!{struct PROCESSOR_POWER_POLICY {
5385     Revision: DWORD,
5386     DynamicThrottle: BYTE,
5387     Spare: [BYTE; 3],
5388     BitFields: DWORD,
5389     PolicyCount: DWORD,
5390     Policy: [PROCESSOR_POWER_POLICY_INFO; 3],
5391 }}
5392 BITFIELD!{PROCESSOR_POWER_POLICY BitFields: DWORD [
5393     DisableCStates set_DisableCStates[0..1],
5394     Reserved set_Reserved[1..32],
5395 ]}
5396 pub type PPROCESSOR_POWER_POLICY = *mut PROCESSOR_POWER_POLICY;
5397 STRUCT!{struct PROCESSOR_PERFSTATE_POLICY_u_Flags {
5398     AsBYTE: BYTE,
5399 }}
5400 BITFIELD!{PROCESSOR_PERFSTATE_POLICY_u_Flags AsBYTE: BYTE [
5401     NoDomainAccounting set_NoDomainAccounting[0..1],
5402     IncreasePolicy set_IncreasePolicy[1..3],
5403     DecreasePolicy set_DecreasePolicy[3..5],
5404     Reserved set_Reserved[5..8],
5405 ]}
5406 UNION!{union PROCESSOR_PERFSTATE_POLICY_u {
5407     [u8; 1],
5408     Spare Spare_mut: BYTE,
5409     Flags Flags_mut: PROCESSOR_PERFSTATE_POLICY_u_Flags,
5410 }}
5411 STRUCT!{struct PROCESSOR_PERFSTATE_POLICY {
5412     Revision: DWORD,
5413     MaxThrottle: BYTE,
5414     MinThrottle: BYTE,
5415     BusyAdjThreshold: BYTE,
5416     u: PROCESSOR_PERFSTATE_POLICY_u,
5417     TimeCheck: DWORD,
5418     IncreaseTime: DWORD,
5419     DecreaseTime: DWORD,
5420     IncreasePercent: DWORD,
5421     DecreasePercent: DWORD,
5422 }}
5423 pub type PPROCESSOR_PERFSTATE_POLICY = *mut PROCESSOR_PERFSTATE_POLICY;
5424 STRUCT!{struct ADMINISTRATOR_POWER_POLICY {
5425     MinSleep: SYSTEM_POWER_STATE,
5426     MaxSleep: SYSTEM_POWER_STATE,
5427     MinVideoTimeout: DWORD,
5428     MaxVideoTimeout: DWORD,
5429     MinSpindownTimeout: DWORD,
5430     MaxSpindownTimeout: DWORD,
5431 }}
5432 pub type PADMINISTRATOR_POWER_POLICY = *mut ADMINISTRATOR_POWER_POLICY;
5433 ENUM!{enum HIBERFILE_BUCKET_SIZE {
5434     HiberFileBucket1GB = 0,
5435     HiberFileBucket2GB,
5436     HiberFileBucket4GB,
5437     HiberFileBucket8GB,
5438     HiberFileBucket16GB,
5439     HiberFileBucket32GB,
5440     HiberFileBucketUnlimited,
5441     HiberFileBucketMax,
5442 }}
5443 pub const HIBERFILE_TYPE_NONE: BYTE = 0x00;
5444 pub const HIBERFILE_TYPE_REDUCED: BYTE = 0x01;
5445 pub const HIBERFILE_TYPE_FULL: BYTE = 0x02;
5446 pub const HIBERFILE_TYPE_MAX: usize = 0x03;
5447 STRUCT!{struct HIBERFILE_BUCKET {
5448     MaxPhysicalMemory: DWORD64,
5449     PhysicalMemoryPercent: [DWORD; HIBERFILE_TYPE_MAX],
5450 }}
5451 pub type PHIBERFILE_BUCKET = *mut HIBERFILE_BUCKET;
5452 STRUCT!{struct SYSTEM_POWER_CAPABILITIES {
5453     PowerButtonPresent: BOOLEAN,
5454     SleepButtonPresent: BOOLEAN,
5455     LidPresent: BOOLEAN,
5456     SystemS1: BOOLEAN,
5457     SystemS2: BOOLEAN,
5458     SystemS3: BOOLEAN,
5459     SystemS4: BOOLEAN,
5460     SystemS5: BOOLEAN,
5461     HiberFilePresent: BOOLEAN,
5462     FullWake: BOOLEAN,
5463     VideoDimPresent: BOOLEAN,
5464     ApmPresent: BOOLEAN,
5465     UpsPresent: BOOLEAN,
5466     ThermalControl: BOOLEAN,
5467     ProcessorThrottle: BOOLEAN,
5468     ProcessorMinThrottle: BYTE,
5469     ProcessorMaxThrottle: BYTE,
5470     FastSystemS4: BOOLEAN,
5471     Hiberboot: BOOLEAN,
5472     WakeAlarmPresent: BOOLEAN,
5473     AoAc: BOOLEAN,
5474     DiskSpinDown: BOOLEAN,
5475     HiberFileType: BYTE,
5476     AoAcConnectivitySupported: BOOLEAN,
5477     spare3: [BYTE; 6],
5478     SystemBatteriesPresent: BOOLEAN,
5479     BatteriesAreShortTerm: BOOLEAN,
5480     BatteryScale: [BATTERY_REPORTING_SCALE; 3],
5481     AcOnLineWake: SYSTEM_POWER_STATE,
5482     SoftLidWake: SYSTEM_POWER_STATE,
5483     RtcWake: SYSTEM_POWER_STATE,
5484     MinDeviceWakeState: SYSTEM_POWER_STATE,
5485     DefaultLowLatencyWake: SYSTEM_POWER_STATE,
5486 }}
5487 pub type PSYSTEM_POWER_CAPABILITIES = *mut SYSTEM_POWER_CAPABILITIES;
5488 STRUCT!{struct SYSTEM_BATTERY_STATE {
5489     AcOnLine: BOOLEAN,
5490     BatteryPresent: BOOLEAN,
5491     Charging: BOOLEAN,
5492     Discharging: BOOLEAN,
5493     Spare1: [BOOLEAN; 3],
5494     Tag: BYTE,
5495     MaxCapacity: DWORD,
5496     RemainingCapacity: DWORD,
5497     Rate: DWORD,
5498     EstimatedTime: DWORD,
5499     DefaultAlert1: DWORD,
5500     DefaultAlert2: DWORD,
5501 }}
5502 pub type PSYSTEM_BATTERY_STATE = *mut SYSTEM_BATTERY_STATE;
5503 pub const IMAGE_DOS_SIGNATURE: WORD = 0x5A4D;
5504 pub const IMAGE_OS2_SIGNATURE: WORD = 0x454E;
5505 pub const IMAGE_OS2_SIGNATURE_LE: WORD = 0x454C;
5506 pub const IMAGE_VXD_SIGNATURE: WORD = 0x454C;
5507 pub const IMAGE_NT_SIGNATURE: DWORD = 0x00004550;
5508 STRUCT!{struct IMAGE_DOS_HEADER {
5509     e_magic: WORD,
5510     e_cblp: WORD,
5511     e_cp: WORD,
5512     e_crlc: WORD,
5513     e_cparhdr: WORD,
5514     e_minalloc: WORD,
5515     e_maxalloc: WORD,
5516     e_ss: WORD,
5517     e_sp: WORD,
5518     e_csum: WORD,
5519     e_ip: WORD,
5520     e_cs: WORD,
5521     e_lfarlc: WORD,
5522     e_ovno: WORD,
5523     e_res: [WORD; 4],
5524     e_oemid: WORD,
5525     e_oeminfo: WORD,
5526     e_res2: [WORD; 10],
5527     e_lfanew: LONG,
5528 }}
5529 pub type PIMAGE_DOS_HEADER = *mut IMAGE_DOS_HEADER;
5530 STRUCT!{struct IMAGE_OS2_HEADER {
5531     ne_magic: WORD,
5532     ne_ver: CHAR,
5533     ne_rev: CHAR,
5534     ne_enttab: WORD,
5535     ne_cbenttab: WORD,
5536     ne_crc: LONG,
5537     ne_flags: WORD,
5538     ne_autodata: WORD,
5539     ne_heap: WORD,
5540     ne_stack: WORD,
5541     ne_csip: LONG,
5542     ne_sssp: LONG,
5543     ne_cseg: WORD,
5544     ne_cmod: WORD,
5545     ne_cbnrestab: WORD,
5546     ne_segtab: WORD,
5547     ne_rsrctab: WORD,
5548     ne_restab: WORD,
5549     ne_modtab: WORD,
5550     ne_imptab: WORD,
5551     ne_nrestab: LONG,
5552     ne_cmovent: WORD,
5553     ne_align: WORD,
5554     ne_cres: WORD,
5555     ne_exetyp: BYTE,
5556     ne_flagsothers: BYTE,
5557     ne_pretthunks: WORD,
5558     ne_psegrefbytes: WORD,
5559     ne_swaparea: WORD,
5560     ne_expver: WORD,
5561 }}
5562 pub type PIMAGE_OS2_HEADER = *mut IMAGE_OS2_HEADER;
5563 STRUCT!{struct IMAGE_VXD_HEADER {
5564     e32_magic: WORD,
5565     e32_border: BYTE,
5566     e32_worder: BYTE,
5567     e32_level: DWORD,
5568     e32_cpu: WORD,
5569     e32_os: WORD,
5570     e32_ver: DWORD,
5571     e32_mflags: DWORD,
5572     e32_mpages: DWORD,
5573     e32_startobj: DWORD,
5574     e32_eip: DWORD,
5575     e32_stackobj: DWORD,
5576     e32_esp: DWORD,
5577     e32_pagesize: DWORD,
5578     e32_lastpagesize: DWORD,
5579     e32_fixupsize: DWORD,
5580     e32_fixupsum: DWORD,
5581     e32_ldrsize: DWORD,
5582     e32_ldrsum: DWORD,
5583     e32_objtab: DWORD,
5584     e32_objcnt: DWORD,
5585     e32_objmap: DWORD,
5586     e32_itermap: DWORD,
5587     e32_rsrctab: DWORD,
5588     e32_rsrccnt: DWORD,
5589     e32_restab: DWORD,
5590     e32_enttab: DWORD,
5591     e32_dirtab: DWORD,
5592     e32_dircnt: DWORD,
5593     e32_fpagetab: DWORD,
5594     e32_frectab: DWORD,
5595     e32_impmod: DWORD,
5596     e32_impmodcnt: DWORD,
5597     e32_impproc: DWORD,
5598     e32_pagesum: DWORD,
5599     e32_datapage: DWORD,
5600     e32_preload: DWORD,
5601     e32_nrestab: DWORD,
5602     e32_cbnrestab: DWORD,
5603     e32_nressum: DWORD,
5604     e32_autodata: DWORD,
5605     e32_debuginfo: DWORD,
5606     e32_debuglen: DWORD,
5607     e32_instpreload: DWORD,
5608     e32_instdemand: DWORD,
5609     e32_heapsize: DWORD,
5610     e32_res3: [BYTE; 12],
5611     e32_winresoff: DWORD,
5612     e32_winreslen: DWORD,
5613     e32_devid: WORD,
5614     e32_ddkver: WORD,
5615 }}
5616 pub type PIMAGE_VXD_HEADER = *mut IMAGE_VXD_HEADER;
5617 STRUCT!{struct IMAGE_FILE_HEADER {
5618     Machine: WORD,
5619     NumberOfSections: WORD,
5620     TimeDateStamp: DWORD,
5621     PointerToSymbolTable: DWORD,
5622     NumberOfSymbols: DWORD,
5623     SizeOfOptionalHeader: WORD,
5624     Characteristics: WORD,
5625 }}
5626 pub type PIMAGE_FILE_HEADER = *mut IMAGE_FILE_HEADER;
5627 pub const IMAGE_SIZEOF_FILE_HEADER: usize = 20;
5628 pub const IMAGE_FILE_RELOCS_STRIPPED: WORD = 0x0001;
5629 pub const IMAGE_FILE_EXECUTABLE_IMAGE: WORD = 0x0002;
5630 pub const IMAGE_FILE_LINE_NUMS_STRIPPED: WORD = 0x0004;
5631 pub const IMAGE_FILE_LOCAL_SYMS_STRIPPED: WORD = 0x0008;
5632 pub const IMAGE_FILE_AGGRESIVE_WS_TRIM: WORD = 0x0010;
5633 pub const IMAGE_FILE_LARGE_ADDRESS_AWARE: WORD = 0x0020;
5634 pub const IMAGE_FILE_BYTES_REVERSED_LO: WORD = 0x0080;
5635 pub const IMAGE_FILE_32BIT_MACHINE: WORD = 0x0100;
5636 pub const IMAGE_FILE_DEBUG_STRIPPED: WORD = 0x0200;
5637 pub const IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP: WORD = 0x0400;
5638 pub const IMAGE_FILE_NET_RUN_FROM_SWAP: WORD = 0x0800;
5639 pub const IMAGE_FILE_SYSTEM: WORD = 0x1000;
5640 pub const IMAGE_FILE_DLL: WORD = 0x2000;
5641 pub const IMAGE_FILE_UP_SYSTEM_ONLY: WORD = 0x4000;
5642 pub const IMAGE_FILE_BYTES_REVERSED_HI: WORD = 0x8000;
5643 pub const IMAGE_FILE_MACHINE_UNKNOWN: WORD = 0;
5644 pub const IMAGE_FILE_MACHINE_TARGET_HOST: WORD = 0x0001;
5645 pub const IMAGE_FILE_MACHINE_I386: WORD = 0x014c;
5646 pub const IMAGE_FILE_MACHINE_R3000: WORD = 0x0162;
5647 pub const IMAGE_FILE_MACHINE_R4000: WORD = 0x0166;
5648 pub const IMAGE_FILE_MACHINE_R10000: WORD = 0x0168;
5649 pub const IMAGE_FILE_MACHINE_WCEMIPSV2: WORD = 0x0169;
5650 pub const IMAGE_FILE_MACHINE_ALPHA: WORD = 0x0184;
5651 pub const IMAGE_FILE_MACHINE_SH3: WORD = 0x01a2;
5652 pub const IMAGE_FILE_MACHINE_SH3DSP: WORD = 0x01a3;
5653 pub const IMAGE_FILE_MACHINE_SH3E: WORD = 0x01a4;
5654 pub const IMAGE_FILE_MACHINE_SH4: WORD = 0x01a6;
5655 pub const IMAGE_FILE_MACHINE_SH5: WORD = 0x01a8;
5656 pub const IMAGE_FILE_MACHINE_ARM: WORD = 0x01c0;
5657 pub const IMAGE_FILE_MACHINE_THUMB: WORD = 0x01c2;
5658 pub const IMAGE_FILE_MACHINE_ARMNT: WORD = 0x01c4;
5659 pub const IMAGE_FILE_MACHINE_AM33: WORD = 0x01d3;
5660 pub const IMAGE_FILE_MACHINE_POWERPC: WORD = 0x01F0;
5661 pub const IMAGE_FILE_MACHINE_POWERPCFP: WORD = 0x01f1;
5662 pub const IMAGE_FILE_MACHINE_IA64: WORD = 0x0200;
5663 pub const IMAGE_FILE_MACHINE_MIPS16: WORD = 0x0266;
5664 pub const IMAGE_FILE_MACHINE_ALPHA64: WORD = 0x0284;
5665 pub const IMAGE_FILE_MACHINE_MIPSFPU: WORD = 0x0366;
5666 pub const IMAGE_FILE_MACHINE_MIPSFPU16: WORD = 0x0466;
5667 pub const IMAGE_FILE_MACHINE_AXP64: WORD = IMAGE_FILE_MACHINE_ALPHA64;
5668 pub const IMAGE_FILE_MACHINE_TRICORE: WORD = 0x0520;
5669 pub const IMAGE_FILE_MACHINE_CEF: WORD = 0x0CEF;
5670 pub const IMAGE_FILE_MACHINE_EBC: WORD = 0x0EBC;
5671 pub const IMAGE_FILE_MACHINE_AMD64: WORD = 0x8664;
5672 pub const IMAGE_FILE_MACHINE_M32R: WORD = 0x9041;
5673 pub const IMAGE_FILE_MACHINE_ARM64: WORD = 0xAA64;
5674 pub const IMAGE_FILE_MACHINE_CEE: WORD = 0xC0EE;
5675 STRUCT!{struct IMAGE_DATA_DIRECTORY {
5676     VirtualAddress: DWORD,
5677     Size: DWORD,
5678 }}
5679 pub type PIMAGE_DATA_DIRECTORY = *mut IMAGE_DATA_DIRECTORY;
5680 pub const IMAGE_NUMBEROF_DIRECTORY_ENTRIES: usize = 16;
5681 STRUCT!{struct IMAGE_OPTIONAL_HEADER32 {
5682     Magic: WORD,
5683     MajorLinkerVersion: BYTE,
5684     MinorLinkerVersion: BYTE,
5685     SizeOfCode: DWORD,
5686     SizeOfInitializedData: DWORD,
5687     SizeOfUninitializedData: DWORD,
5688     AddressOfEntryPoint: DWORD,
5689     BaseOfCode: DWORD,
5690     BaseOfData: DWORD,
5691     ImageBase: DWORD,
5692     SectionAlignment: DWORD,
5693     FileAlignment: DWORD,
5694     MajorOperatingSystemVersion: WORD,
5695     MinorOperatingSystemVersion: WORD,
5696     MajorImageVersion: WORD,
5697     MinorImageVersion: WORD,
5698     MajorSubsystemVersion: WORD,
5699     MinorSubsystemVersion: WORD,
5700     Win32VersionValue: DWORD,
5701     SizeOfImage: DWORD,
5702     SizeOfHeaders: DWORD,
5703     CheckSum: DWORD,
5704     Subsystem: WORD,
5705     DllCharacteristics: WORD,
5706     SizeOfStackReserve: DWORD,
5707     SizeOfStackCommit: DWORD,
5708     SizeOfHeapReserve: DWORD,
5709     SizeOfHeapCommit: DWORD,
5710     LoaderFlags: DWORD,
5711     NumberOfRvaAndSizes: DWORD,
5712     DataDirectory: [IMAGE_DATA_DIRECTORY; IMAGE_NUMBEROF_DIRECTORY_ENTRIES],
5713 }}
5714 pub type PIMAGE_OPTIONAL_HEADER32 = *mut IMAGE_OPTIONAL_HEADER32;
5715 STRUCT!{struct IMAGE_ROM_OPTIONAL_HEADER {
5716     Magic: WORD,
5717     MajorLinkerVersion: BYTE,
5718     MinorLinkerVersion: BYTE,
5719     SizeOfCode: DWORD,
5720     SizeOfInitializedData: DWORD,
5721     SizeOfUninitializedData: DWORD,
5722     AddressOfEntryPoint: DWORD,
5723     BaseOfCode: DWORD,
5724     BaseOfData: DWORD,
5725     BaseOfBss: DWORD,
5726     GprMask: DWORD,
5727     CprMask: [DWORD; 4],
5728     GpValue: DWORD,
5729 }}
5730 pub type PIMAGE_ROM_OPTIONAL_HEADER = *mut IMAGE_ROM_OPTIONAL_HEADER;
5731 STRUCT!{struct IMAGE_OPTIONAL_HEADER64 {
5732     Magic: WORD,
5733     MajorLinkerVersion: BYTE,
5734     MinorLinkerVersion: BYTE,
5735     SizeOfCode: DWORD,
5736     SizeOfInitializedData: DWORD,
5737     SizeOfUninitializedData: DWORD,
5738     AddressOfEntryPoint: DWORD,
5739     BaseOfCode: DWORD,
5740     ImageBase: ULONGLONG,
5741     SectionAlignment: DWORD,
5742     FileAlignment: DWORD,
5743     MajorOperatingSystemVersion: WORD,
5744     MinorOperatingSystemVersion: WORD,
5745     MajorImageVersion: WORD,
5746     MinorImageVersion: WORD,
5747     MajorSubsystemVersion: WORD,
5748     MinorSubsystemVersion: WORD,
5749     Win32VersionValue: DWORD,
5750     SizeOfImage: DWORD,
5751     SizeOfHeaders: DWORD,
5752     CheckSum: DWORD,
5753     Subsystem: WORD,
5754     DllCharacteristics: WORD,
5755     SizeOfStackReserve: ULONGLONG,
5756     SizeOfStackCommit: ULONGLONG,
5757     SizeOfHeapReserve: ULONGLONG,
5758     SizeOfHeapCommit: ULONGLONG,
5759     LoaderFlags: DWORD,
5760     NumberOfRvaAndSizes: DWORD,
5761     DataDirectory: [IMAGE_DATA_DIRECTORY; IMAGE_NUMBEROF_DIRECTORY_ENTRIES],
5762 }}
5763 pub type PIMAGE_OPTIONAL_HEADER64 = *mut IMAGE_OPTIONAL_HEADER64;
5764 pub const IMAGE_NT_OPTIONAL_HDR32_MAGIC: WORD = 0x10b;
5765 pub const IMAGE_NT_OPTIONAL_HDR64_MAGIC: WORD = 0x20b;
5766 pub const IMAGE_ROM_OPTIONAL_HDR_MAGIC: WORD = 0x107;
5767 #[cfg(target_pointer_width = "64")]
5768 IFDEF!{
5769 pub type IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER64;
5770 pub type PIMAGE_OPTIONAL_HEADER = PIMAGE_OPTIONAL_HEADER64;
5771 pub const IMAGE_NT_OPTIONAL_HDR_MAGIC: WORD = IMAGE_NT_OPTIONAL_HDR64_MAGIC;
5772 }
5773 #[cfg(target_pointer_width = "32")]
5774 IFDEF!{
5775 pub type IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER32;
5776 pub type PIMAGE_OPTIONAL_HEADER = PIMAGE_OPTIONAL_HEADER32;
5777 pub const IMAGE_NT_OPTIONAL_HDR_MAGIC: WORD = IMAGE_NT_OPTIONAL_HDR32_MAGIC;
5778 }
5779 STRUCT!{struct IMAGE_NT_HEADERS64 {
5780     Signature: DWORD,
5781     FileHeader: IMAGE_FILE_HEADER,
5782     OptionalHeader: IMAGE_OPTIONAL_HEADER64,
5783 }}
5784 pub type PIMAGE_NT_HEADERS64 = *mut IMAGE_NT_HEADERS64;
5785 STRUCT!{struct IMAGE_NT_HEADERS32 {
5786     Signature: DWORD,
5787     FileHeader: IMAGE_FILE_HEADER,
5788     OptionalHeader: IMAGE_OPTIONAL_HEADER32,
5789 }}
5790 pub type PIMAGE_NT_HEADERS32 = *mut IMAGE_NT_HEADERS32;
5791 STRUCT!{struct IMAGE_ROM_HEADERS {
5792     FileHeader: IMAGE_FILE_HEADER,
5793     OptionalHeader: IMAGE_ROM_OPTIONAL_HEADER,
5794 }}
5795 pub type PIMAGE_ROM_HEADERS = *mut IMAGE_ROM_HEADERS;
5796 #[cfg(target_pointer_width = "64")]
5797 IFDEF!{
5798 pub type IMAGE_NT_HEADERS = IMAGE_NT_HEADERS64;
5799 pub type PIMAGE_NT_HEADERS = PIMAGE_NT_HEADERS64;
5800 }
5801 #[cfg(target_pointer_width = "32")]
5802 IFDEF!{
5803 pub type IMAGE_NT_HEADERS = IMAGE_NT_HEADERS32;
5804 pub type PIMAGE_NT_HEADERS = PIMAGE_NT_HEADERS32;
5805 }
5806 pub const IMAGE_SUBSYSTEM_UNKNOWN: WORD = 0;
5807 pub const IMAGE_SUBSYSTEM_NATIVE: WORD = 1;
5808 pub const IMAGE_SUBSYSTEM_WINDOWS_GUI: WORD = 2;
5809 pub const IMAGE_SUBSYSTEM_WINDOWS_CUI: WORD = 3;
5810 pub const IMAGE_SUBSYSTEM_OS2_CUI: WORD = 5;
5811 pub const IMAGE_SUBSYSTEM_POSIX_CUI: WORD = 7;
5812 pub const IMAGE_SUBSYSTEM_NATIVE_WINDOWS: WORD = 8;
5813 pub const IMAGE_SUBSYSTEM_WINDOWS_CE_GUI: WORD = 9;
5814 pub const IMAGE_SUBSYSTEM_EFI_APPLICATION: WORD = 10;
5815 pub const IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER: WORD = 11;
5816 pub const IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER: WORD = 12;
5817 pub const IMAGE_SUBSYSTEM_EFI_ROM: WORD = 13;
5818 pub const IMAGE_SUBSYSTEM_XBOX: WORD = 14;
5819 pub const IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION: WORD = 16;
5820 pub const IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG: WORD = 17;
5821 pub const IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA: WORD = 0x0020;
5822 pub const IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE: WORD = 0x0040;
5823 pub const IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY: WORD = 0x0080;
5824 pub const IMAGE_DLLCHARACTERISTICS_NX_COMPAT: WORD = 0x0100;
5825 pub const IMAGE_DLLCHARACTERISTICS_NO_ISOLATION: WORD = 0x0200;
5826 pub const IMAGE_DLLCHARACTERISTICS_NO_SEH: WORD = 0x0400;
5827 pub const IMAGE_DLLCHARACTERISTICS_NO_BIND: WORD = 0x0800;
5828 pub const IMAGE_DLLCHARACTERISTICS_APPCONTAINER: WORD = 0x1000;
5829 pub const IMAGE_DLLCHARACTERISTICS_WDM_DRIVER: WORD = 0x2000;
5830 pub const IMAGE_DLLCHARACTERISTICS_GUARD_CF: WORD = 0x4000;
5831 pub const IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE: WORD = 0x8000;
5832 pub const IMAGE_DIRECTORY_ENTRY_EXPORT: WORD = 0;
5833 pub const IMAGE_DIRECTORY_ENTRY_IMPORT: WORD = 1;
5834 pub const IMAGE_DIRECTORY_ENTRY_RESOURCE: WORD = 2;
5835 pub const IMAGE_DIRECTORY_ENTRY_EXCEPTION: WORD = 3;
5836 pub const IMAGE_DIRECTORY_ENTRY_SECURITY: WORD = 4;
5837 pub const IMAGE_DIRECTORY_ENTRY_BASERELOC: WORD = 5;
5838 pub const IMAGE_DIRECTORY_ENTRY_DEBUG: WORD = 6;
5839 pub const IMAGE_DIRECTORY_ENTRY_ARCHITECTURE: WORD = 7;
5840 pub const IMAGE_DIRECTORY_ENTRY_GLOBALPTR: WORD = 8;
5841 pub const IMAGE_DIRECTORY_ENTRY_TLS: WORD = 9;
5842 pub const IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG: WORD = 10;
5843 pub const IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT: WORD = 11;
5844 pub const IMAGE_DIRECTORY_ENTRY_IAT: WORD = 12;
5845 pub const IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT: WORD = 13;
5846 pub const IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR: WORD = 14;
5847 STRUCT!{struct ANON_OBJECT_HEADER {
5848     Sig1: WORD,
5849     Sig2: WORD,
5850     Version: WORD,
5851     Machine: WORD,
5852     TimeDateStamp: DWORD,
5853     ClassID: CLSID,
5854     SizeOfData: DWORD,
5855 }}
5856 STRUCT!{struct ANON_OBJECT_HEADER_V2 {
5857     Sig1: WORD,
5858     Sig2: WORD,
5859     Version: WORD,
5860     Machine: WORD,
5861     TimeDateStamp: DWORD,
5862     ClassID: CLSID,
5863     SizeOfData: DWORD,
5864     Flags: DWORD,
5865     MetaDataSize: DWORD,
5866     MetaDataOffset: DWORD,
5867 }}
5868 STRUCT!{struct ANON_OBJECT_HEADER_BIGOBJ {
5869     Sig1: WORD,
5870     Sig2: WORD,
5871     Version: WORD,
5872     Machine: WORD,
5873     TimeDateStamp: DWORD,
5874     ClassID: CLSID,
5875     SizeOfData: DWORD,
5876     Flags: DWORD,
5877     MetaDataSize: DWORD,
5878     MetaDataOffset: DWORD,
5879     NumberOfSections: DWORD,
5880     PointerToSymbolTable: DWORD,
5881     NumberOfSymbols: DWORD,
5882 }}
5883 pub const IMAGE_SIZEOF_SHORT_NAME: usize = 8;
5884 UNION!{union IMAGE_SECTION_HEADER_Misc {
5885     [u32; 1],
5886     PhysicalAddress PhysicalAddress_mut: DWORD,
5887     VirtualSize VirtualSize_mut: DWORD,
5888 }}
5889 STRUCT!{struct IMAGE_SECTION_HEADER {
5890     Name: [BYTE; IMAGE_SIZEOF_SHORT_NAME],
5891     Misc: IMAGE_SECTION_HEADER_Misc,
5892     VirtualAddress: DWORD,
5893     SizeOfRawData: DWORD,
5894     PointerToRawData: DWORD,
5895     PointerToRelocations: DWORD,
5896     PointerToLinenumbers: DWORD,
5897     NumberOfRelocations: WORD,
5898     NumberOfLinenumbers: WORD,
5899     Characteristics: DWORD,
5900 }}
5901 pub type PIMAGE_SECTION_HEADER = *mut IMAGE_SECTION_HEADER;
5902 pub const IMAGE_SIZEOF_SECTION_HEADER: usize = 40;
5903 pub const IMAGE_SCN_TYPE_NO_PAD: DWORD = 0x00000008;
5904 pub const IMAGE_SCN_CNT_CODE: DWORD = 0x00000020;
5905 pub const IMAGE_SCN_CNT_INITIALIZED_DATA: DWORD = 0x00000040;
5906 pub const IMAGE_SCN_CNT_UNINITIALIZED_DATA: DWORD = 0x00000080;
5907 pub const IMAGE_SCN_LNK_OTHER: DWORD = 0x00000100;
5908 pub const IMAGE_SCN_LNK_INFO: DWORD = 0x00000200;
5909 pub const IMAGE_SCN_LNK_REMOVE: DWORD = 0x00000800;
5910 pub const IMAGE_SCN_LNK_COMDAT: DWORD = 0x00001000;
5911 pub const IMAGE_SCN_NO_DEFER_SPEC_EXC: DWORD = 0x00004000;
5912 pub const IMAGE_SCN_GPREL: DWORD = 0x00008000;
5913 pub const IMAGE_SCN_MEM_FARDATA: DWORD = 0x00008000;
5914 pub const IMAGE_SCN_MEM_PURGEABLE: DWORD = 0x00020000;
5915 pub const IMAGE_SCN_MEM_16BIT: DWORD = 0x00020000;
5916 pub const IMAGE_SCN_MEM_LOCKED: DWORD = 0x00040000;
5917 pub const IMAGE_SCN_MEM_PRELOAD: DWORD = 0x00080000;
5918 pub const IMAGE_SCN_ALIGN_1BYTES: DWORD = 0x00100000;
5919 pub const IMAGE_SCN_ALIGN_2BYTES: DWORD = 0x00200000;
5920 pub const IMAGE_SCN_ALIGN_4BYTES: DWORD = 0x00300000;
5921 pub const IMAGE_SCN_ALIGN_8BYTES: DWORD = 0x00400000;
5922 pub const IMAGE_SCN_ALIGN_16BYTES: DWORD = 0x00500000;
5923 pub const IMAGE_SCN_ALIGN_32BYTES: DWORD = 0x00600000;
5924 pub const IMAGE_SCN_ALIGN_64BYTES: DWORD = 0x00700000;
5925 pub const IMAGE_SCN_ALIGN_128BYTES: DWORD = 0x00800000;
5926 pub const IMAGE_SCN_ALIGN_256BYTES: DWORD = 0x00900000;
5927 pub const IMAGE_SCN_ALIGN_512BYTES: DWORD = 0x00A00000;
5928 pub const IMAGE_SCN_ALIGN_1024BYTES: DWORD = 0x00B00000;
5929 pub const IMAGE_SCN_ALIGN_2048BYTES: DWORD = 0x00C00000;
5930 pub const IMAGE_SCN_ALIGN_4096BYTES: DWORD = 0x00D00000;
5931 pub const IMAGE_SCN_ALIGN_8192BYTES: DWORD = 0x00E00000;
5932 pub const IMAGE_SCN_ALIGN_MASK: DWORD = 0x00F00000;
5933 pub const IMAGE_SCN_LNK_NRELOC_OVFL: DWORD = 0x01000000;
5934 pub const IMAGE_SCN_MEM_DISCARDABLE: DWORD = 0x02000000;
5935 pub const IMAGE_SCN_MEM_NOT_CACHED: DWORD = 0x04000000;
5936 pub const IMAGE_SCN_MEM_NOT_PAGED: DWORD = 0x08000000;
5937 pub const IMAGE_SCN_MEM_SHARED: DWORD = 0x10000000;
5938 pub const IMAGE_SCN_MEM_EXECUTE: DWORD = 0x20000000;
5939 pub const IMAGE_SCN_MEM_READ: DWORD = 0x40000000;
5940 pub const IMAGE_SCN_MEM_WRITE: DWORD = 0x80000000;
5941 pub const IMAGE_SCN_SCALE_INDEX: DWORD = 0x00000001;
5942 STRUCT!{struct IMAGE_SYMBOL_N_Name {
5943     Short: DWORD,
5944     Long: DWORD,
5945 }}
5946 UNION!{union IMAGE_SYMBOL_N {
5947     [u32; 2],
5948     ShortName ShortName_mut: [BYTE; 8],
5949     Name Name_mut: IMAGE_SYMBOL_N_Name,
5950     LongName LongName_mut: [DWORD; 2],
5951 }}
5952 STRUCT!{struct IMAGE_SYMBOL {
5953     N: IMAGE_SYMBOL_N,
5954     Value: DWORD,
5955     SectionNumber: SHORT,
5956     Type: WORD,
5957     StorageClass: BYTE,
5958     NumberOfAuxSymbols: BYTE,
5959 }}
5960 pub type PIMAGE_SYMBOL = *mut IMAGE_SYMBOL;
5961 pub const IMAGE_SIZEOF_SYMBOL: usize = 18;
5962 STRUCT!{struct IMAGE_SYMBOL_EX_N_Name {
5963     Short: DWORD,
5964     Long: DWORD,
5965 }}
5966 UNION!{union IMAGE_SYMBOL_EX_N {
5967     [u32; 2],
5968     ShortName ShortName_mut: [BYTE; 8],
5969     Name Name_mut: IMAGE_SYMBOL_EX_N_Name,
5970     LongName LongName_mut: [DWORD; 2],
5971 }}
5972 STRUCT!{struct IMAGE_SYMBOL_EX {
5973     N: IMAGE_SYMBOL_EX_N,
5974     Value: DWORD,
5975     SectionNumber: LONG,
5976     Type: WORD,
5977     StorageClass: BYTE,
5978     NumberOfAuxSymbols: BYTE,
5979 }}
5980 pub type PIMAGE_SYMBOL_EX = *mut IMAGE_SYMBOL_EX;
5981 pub const IMAGE_SYM_UNDEFINED: SHORT = 0;
5982 pub const IMAGE_SYM_ABSOLUTE: SHORT = -1;
5983 pub const IMAGE_SYM_DEBUG: SHORT = -2;
5984 pub const IMAGE_SYM_SECTION_MAX: USHORT = 0xFEFF;
5985 pub const IMAGE_SYM_SECTION_MAX_EX: LONG = MAXLONG;
5986 pub const IMAGE_SYM_TYPE_NULL: WORD = 0x0000;
5987 pub const IMAGE_SYM_TYPE_VOID: WORD = 0x0001;
5988 pub const IMAGE_SYM_TYPE_CHAR: WORD = 0x0002;
5989 pub const IMAGE_SYM_TYPE_SHORT: WORD = 0x0003;
5990 pub const IMAGE_SYM_TYPE_INT: WORD = 0x0004;
5991 pub const IMAGE_SYM_TYPE_LONG: WORD = 0x0005;
5992 pub const IMAGE_SYM_TYPE_FLOAT: WORD = 0x0006;
5993 pub const IMAGE_SYM_TYPE_DOUBLE: WORD = 0x0007;
5994 pub const IMAGE_SYM_TYPE_STRUCT: WORD = 0x0008;
5995 pub const IMAGE_SYM_TYPE_UNION: WORD = 0x0009;
5996 pub const IMAGE_SYM_TYPE_ENUM: WORD = 0x000A;
5997 pub const IMAGE_SYM_TYPE_MOE: WORD = 0x000B;
5998 pub const IMAGE_SYM_TYPE_BYTE: WORD = 0x000C;
5999 pub const IMAGE_SYM_TYPE_WORD: WORD = 0x000D;
6000 pub const IMAGE_SYM_TYPE_UINT: WORD = 0x000E;
6001 pub const IMAGE_SYM_TYPE_DWORD: WORD = 0x000F;
6002 pub const IMAGE_SYM_TYPE_PCODE: WORD = 0x8000;
6003 pub const IMAGE_SYM_DTYPE_NULL: WORD = 0;
6004 pub const IMAGE_SYM_DTYPE_POINTER: WORD = 1;
6005 pub const IMAGE_SYM_DTYPE_FUNCTION: WORD = 2;
6006 pub const IMAGE_SYM_DTYPE_ARRAY: WORD = 3;
6007 pub const IMAGE_SYM_CLASS_END_OF_FUNCTION: BYTE = -1i8 as u8;
6008 pub const IMAGE_SYM_CLASS_NULL: BYTE = 0x0000;
6009 pub const IMAGE_SYM_CLASS_AUTOMATIC: BYTE = 0x0001;
6010 pub const IMAGE_SYM_CLASS_EXTERNAL: BYTE = 0x0002;
6011 pub const IMAGE_SYM_CLASS_STATIC: BYTE = 0x0003;
6012 pub const IMAGE_SYM_CLASS_REGISTER: BYTE = 0x0004;
6013 pub const IMAGE_SYM_CLASS_EXTERNAL_DEF: BYTE = 0x0005;
6014 pub const IMAGE_SYM_CLASS_LABEL: BYTE = 0x0006;
6015 pub const IMAGE_SYM_CLASS_UNDEFINED_LABEL: BYTE = 0x0007;
6016 pub const IMAGE_SYM_CLASS_MEMBER_OF_STRUCT: BYTE = 0x0008;
6017 pub const IMAGE_SYM_CLASS_ARGUMENT: BYTE = 0x0009;
6018 pub const IMAGE_SYM_CLASS_STRUCT_TAG: BYTE = 0x000A;
6019 pub const IMAGE_SYM_CLASS_MEMBER_OF_UNION: BYTE = 0x000B;
6020 pub const IMAGE_SYM_CLASS_UNION_TAG: BYTE = 0x000C;
6021 pub const IMAGE_SYM_CLASS_TYPE_DEFINITION: BYTE = 0x000D;
6022 pub const IMAGE_SYM_CLASS_UNDEFINED_STATIC: BYTE = 0x000E;
6023 pub const IMAGE_SYM_CLASS_ENUM_TAG: BYTE = 0x000F;
6024 pub const IMAGE_SYM_CLASS_MEMBER_OF_ENUM: BYTE = 0x0010;
6025 pub const IMAGE_SYM_CLASS_REGISTER_PARAM: BYTE = 0x0011;
6026 pub const IMAGE_SYM_CLASS_BIT_FIELD: BYTE = 0x0012;
6027 pub const IMAGE_SYM_CLASS_FAR_EXTERNAL: BYTE = 0x0044;
6028 pub const IMAGE_SYM_CLASS_BLOCK: BYTE = 0x0064;
6029 pub const IMAGE_SYM_CLASS_FUNCTION: BYTE = 0x0065;
6030 pub const IMAGE_SYM_CLASS_END_OF_STRUCT: BYTE = 0x0066;
6031 pub const IMAGE_SYM_CLASS_FILE: BYTE = 0x0067;
6032 pub const IMAGE_SYM_CLASS_SECTION: BYTE = 0x0068;
6033 pub const IMAGE_SYM_CLASS_WEAK_EXTERNAL: BYTE = 0x0069;
6034 pub const IMAGE_SYM_CLASS_CLR_TOKEN: BYTE = 0x006B;
6035 pub const N_BTMASK: WORD = 0x000F;
6036 pub const N_TMASK: WORD = 0x0030;
6037 pub const N_TMASK1: WORD = 0x00C0;
6038 pub const N_TMASK2: WORD = 0x00F0;
6039 pub const N_BTSHFT: usize = 4;
6040 pub const N_TSHIFT: usize = 2;
6041 #[inline]
BTYPE(x: WORD) -> bool6042 pub fn BTYPE(x: WORD) -> bool {
6043     (x & N_BTMASK) != 0
6044 }
6045 #[inline]
ISPTR(x: WORD) -> bool6046 pub fn ISPTR(x: WORD) -> bool {
6047     (x & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT)
6048 }
6049 #[inline]
ISFCN(x: WORD) -> bool6050 pub fn ISFCN(x: WORD) -> bool {
6051     (x & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT)
6052 }
6053 #[inline]
ISARY(x: WORD) -> bool6054 pub fn ISARY(x: WORD) -> bool {
6055     (x & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT)
6056 }
6057 #[inline]
ISTAG(x: BYTE) -> bool6058 pub fn ISTAG(x: BYTE) -> bool {
6059     (x == IMAGE_SYM_CLASS_STRUCT_TAG) || (x == IMAGE_SYM_CLASS_UNION_TAG)
6060     || (x == IMAGE_SYM_CLASS_ENUM_TAG)
6061 }
6062 #[inline]
INCREF(x: WORD) -> WORD6063 pub fn INCREF(x: WORD) -> WORD {
6064     ((x & !N_BTMASK) << N_TSHIFT) | (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT) | (x & N_BTMASK)
6065 }
6066 #[inline]
DECREF(x: WORD) -> WORD6067 pub fn DECREF(x: WORD) -> WORD {
6068     ((x >> N_TSHIFT) & !N_BTMASK) | (x & N_BTMASK)
6069 }
6070 STRUCT!{struct IMAGE_AUX_SYMBOL_TOKEN_DEF {
6071     bAuxType: BYTE,
6072     bReserved: BYTE,
6073     SymbolTableIndex: DWORD,
6074     rgbReserved: [BYTE; 12],
6075 }}
6076 pub type PIMAGE_AUX_SYMBOL_TOKEN_DEF = *mut IMAGE_AUX_SYMBOL_TOKEN_DEF;
6077 STRUCT!{struct IMAGE_AUX_SYMBOL_Sym_Misc_LnSz {
6078     Linenumber: WORD,
6079     Size: WORD,
6080 }}
6081 UNION!{union IMAGE_AUX_SYMBOL_Sym_Misc {
6082     [u32; 1],
6083     LnSz LnSz_mut: IMAGE_AUX_SYMBOL_Sym_Misc_LnSz,
6084     TotalSize TotalSize_mut: DWORD,
6085 }}
6086 STRUCT!{struct IMAGE_AUX_SYMBOL_Sym_FcnAry_Function {
6087     PointerToLinenumber: DWORD,
6088     PointerToNextFunction: DWORD,
6089 }}
6090 STRUCT!{struct IMAGE_AUX_SYMBOL_Sym_FcnAry_Array {
6091     Dimension: [WORD; 4],
6092 }}
6093 UNION!{union IMAGE_AUX_SYMBOL_Sym_FcnAry {
6094     [u32; 2],
6095     Function Function_mut: IMAGE_AUX_SYMBOL_Sym_FcnAry_Function,
6096     Array Array_mut: IMAGE_AUX_SYMBOL_Sym_FcnAry_Array,
6097 }}
6098 STRUCT!{struct IMAGE_AUX_SYMBOL_Sym {
6099     TagIndex: DWORD,
6100     Misc: IMAGE_AUX_SYMBOL_Sym_Misc,
6101     FcnAry: IMAGE_AUX_SYMBOL_Sym_FcnAry,
6102     TvIndex: WORD,
6103 }}
6104 STRUCT!{struct IMAGE_AUX_SYMBOL_File {
6105     Name: [BYTE; IMAGE_SIZEOF_SYMBOL],
6106 }}
6107 STRUCT!{struct IMAGE_AUX_SYMBOL_Section {
6108     Length: DWORD,
6109     NumberOfRelocations: WORD,
6110     NumberOfLinenumbers: WORD,
6111     CheckSum: DWORD,
6112     Number: SHORT,
6113     Selection: BYTE,
6114     bReserved: BYTE,
6115     HighNumber: SHORT,
6116 }}
6117 STRUCT!{struct IMAGE_AUX_SYMBOL_CRC {
6118     crc: DWORD,
6119     rgbReserved: [BYTE; 14],
6120 }}
6121 STRUCT!{struct IMAGE_AUX_SYMBOL {
6122     Sym: IMAGE_AUX_SYMBOL_Sym,
6123     File: IMAGE_AUX_SYMBOL_File,
6124     Section: IMAGE_AUX_SYMBOL_Section,
6125     TokenDef: IMAGE_AUX_SYMBOL_TOKEN_DEF,
6126     CRC: IMAGE_AUX_SYMBOL_CRC,
6127 }}
6128 pub type PIMAGE_AUX_SYMBOL = *mut IMAGE_AUX_SYMBOL;
6129 STRUCT!{struct IMAGE_AUX_SYMBOL_EX_Sym {
6130     WeakDefaultSymIndex: DWORD,
6131     WeakSearchType: DWORD,
6132     rgbReserved: [BYTE; 12],
6133 }}
6134 STRUCT!{struct IMAGE_AUX_SYMBOL_EX_File {
6135     Name: [BYTE; 20],
6136 }}
6137 STRUCT!{struct IMAGE_AUX_SYMBOL_EX_Section {
6138     Length: DWORD,
6139     NumberOfRelocations: WORD,
6140     NumberOfLinenumbers: WORD,
6141     CheckSum: DWORD,
6142     Number: SHORT,
6143     Selection: BYTE,
6144     bReserved: BYTE,
6145     HighNumber: SHORT,
6146     rgbReserved: [BYTE; 2],
6147 }}
6148 STRUCT!{struct IMAGE_AUX_SYMBOL_EX_s {
6149     TokenDef: IMAGE_AUX_SYMBOL_TOKEN_DEF,
6150     rgbReserved: [BYTE; 2],
6151 }}
6152 STRUCT!{struct IMAGE_AUX_SYMBOL_EX_CRC {
6153     crc: DWORD,
6154     rgbReserved: [BYTE; 16],
6155 }}
6156 STRUCT!{struct IMAGE_AUX_SYMBOL_EX {
6157     Sym: IMAGE_AUX_SYMBOL_EX_Sym,
6158     File: IMAGE_AUX_SYMBOL_EX_File,
6159     Section: IMAGE_AUX_SYMBOL_EX_Section,
6160     s: IMAGE_AUX_SYMBOL_EX_s,
6161     CRC: IMAGE_AUX_SYMBOL_EX_CRC,
6162 }}
6163 pub type PIMAGE_AUX_SYMBOL_EX = *mut IMAGE_AUX_SYMBOL_EX;
6164 ENUM!{enum IMAGE_AUX_SYMBOL_TYPE {
6165     IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF = 1,
6166 }}
6167 pub const IMAGE_COMDAT_SELECT_NODUPLICATES: BYTE = 1;
6168 pub const IMAGE_COMDAT_SELECT_ANY: BYTE = 2;
6169 pub const IMAGE_COMDAT_SELECT_SAME_SIZE: BYTE = 3;
6170 pub const IMAGE_COMDAT_SELECT_EXACT_MATCH: BYTE = 4;
6171 pub const IMAGE_COMDAT_SELECT_ASSOCIATIVE: BYTE = 5;
6172 pub const IMAGE_COMDAT_SELECT_LARGEST: BYTE = 6;
6173 pub const IMAGE_COMDAT_SELECT_NEWEST: BYTE = 7;
6174 pub const IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY: BYTE = 1;
6175 pub const IMAGE_WEAK_EXTERN_SEARCH_LIBRARY: BYTE = 2;
6176 pub const IMAGE_WEAK_EXTERN_SEARCH_ALIAS: BYTE = 3;
6177 UNION!{union IMAGE_RELOCATION_u {
6178     [u32; 1],
6179     VirtualAddress VirtualAddress_mut: DWORD,
6180     RelocCount RelocCount_mut: DWORD,
6181 }}
6182 STRUCT!{struct IMAGE_RELOCATION {
6183     u: IMAGE_RELOCATION_u,
6184     SymbolTableIndex: DWORD,
6185     Type: WORD,
6186 }}
6187 pub type PIMAGE_RELOCATION = *mut IMAGE_RELOCATION;
6188 pub const IMAGE_REL_I386_ABSOLUTE: WORD = 0x0000;
6189 pub const IMAGE_REL_I386_DIR16: WORD = 0x0001;
6190 pub const IMAGE_REL_I386_REL16: WORD = 0x0002;
6191 pub const IMAGE_REL_I386_DIR32: WORD = 0x0006;
6192 pub const IMAGE_REL_I386_DIR32NB: WORD = 0x0007;
6193 pub const IMAGE_REL_I386_SEG12: WORD = 0x0009;
6194 pub const IMAGE_REL_I386_SECTION: WORD = 0x000A;
6195 pub const IMAGE_REL_I386_SECREL: WORD = 0x000B;
6196 pub const IMAGE_REL_I386_TOKEN: WORD = 0x000C;
6197 pub const IMAGE_REL_I386_SECREL7: WORD = 0x000D;
6198 pub const IMAGE_REL_I386_REL32: WORD = 0x0014;
6199 pub const IMAGE_REL_MIPS_ABSOLUTE: WORD = 0x0000;
6200 pub const IMAGE_REL_MIPS_REFHALF: WORD = 0x0001;
6201 pub const IMAGE_REL_MIPS_REFWORD: WORD = 0x0002;
6202 pub const IMAGE_REL_MIPS_JMPADDR: WORD = 0x0003;
6203 pub const IMAGE_REL_MIPS_REFHI: WORD = 0x0004;
6204 pub const IMAGE_REL_MIPS_REFLO: WORD = 0x0005;
6205 pub const IMAGE_REL_MIPS_GPREL: WORD = 0x0006;
6206 pub const IMAGE_REL_MIPS_LITERAL: WORD = 0x0007;
6207 pub const IMAGE_REL_MIPS_SECTION: WORD = 0x000A;
6208 pub const IMAGE_REL_MIPS_SECREL: WORD = 0x000B;
6209 pub const IMAGE_REL_MIPS_SECRELLO: WORD = 0x000C;
6210 pub const IMAGE_REL_MIPS_SECRELHI: WORD = 0x000D;
6211 pub const IMAGE_REL_MIPS_TOKEN: WORD = 0x000E;
6212 pub const IMAGE_REL_MIPS_JMPADDR16: WORD = 0x0010;
6213 pub const IMAGE_REL_MIPS_REFWORDNB: WORD = 0x0022;
6214 pub const IMAGE_REL_MIPS_PAIR: WORD = 0x0025;
6215 pub const IMAGE_REL_ALPHA_ABSOLUTE: WORD = 0x0000;
6216 pub const IMAGE_REL_ALPHA_REFLONG: WORD = 0x0001;
6217 pub const IMAGE_REL_ALPHA_REFQUAD: WORD = 0x0002;
6218 pub const IMAGE_REL_ALPHA_GPREL32: WORD = 0x0003;
6219 pub const IMAGE_REL_ALPHA_LITERAL: WORD = 0x0004;
6220 pub const IMAGE_REL_ALPHA_LITUSE: WORD = 0x0005;
6221 pub const IMAGE_REL_ALPHA_GPDISP: WORD = 0x0006;
6222 pub const IMAGE_REL_ALPHA_BRADDR: WORD = 0x0007;
6223 pub const IMAGE_REL_ALPHA_HINT: WORD = 0x0008;
6224 pub const IMAGE_REL_ALPHA_INLINE_REFLONG: WORD = 0x0009;
6225 pub const IMAGE_REL_ALPHA_REFHI: WORD = 0x000A;
6226 pub const IMAGE_REL_ALPHA_REFLO: WORD = 0x000B;
6227 pub const IMAGE_REL_ALPHA_PAIR: WORD = 0x000C;
6228 pub const IMAGE_REL_ALPHA_MATCH: WORD = 0x000D;
6229 pub const IMAGE_REL_ALPHA_SECTION: WORD = 0x000E;
6230 pub const IMAGE_REL_ALPHA_SECREL: WORD = 0x000F;
6231 pub const IMAGE_REL_ALPHA_REFLONGNB: WORD = 0x0010;
6232 pub const IMAGE_REL_ALPHA_SECRELLO: WORD = 0x0011;
6233 pub const IMAGE_REL_ALPHA_SECRELHI: WORD = 0x0012;
6234 pub const IMAGE_REL_ALPHA_REFQ3: WORD = 0x0013;
6235 pub const IMAGE_REL_ALPHA_REFQ2: WORD = 0x0014;
6236 pub const IMAGE_REL_ALPHA_REFQ1: WORD = 0x0015;
6237 pub const IMAGE_REL_ALPHA_GPRELLO: WORD = 0x0016;
6238 pub const IMAGE_REL_ALPHA_GPRELHI: WORD = 0x0017;
6239 pub const IMAGE_REL_PPC_ABSOLUTE: WORD = 0x0000;
6240 pub const IMAGE_REL_PPC_ADDR64: WORD = 0x0001;
6241 pub const IMAGE_REL_PPC_ADDR32: WORD = 0x0002;
6242 pub const IMAGE_REL_PPC_ADDR24: WORD = 0x0003;
6243 pub const IMAGE_REL_PPC_ADDR16: WORD = 0x0004;
6244 pub const IMAGE_REL_PPC_ADDR14: WORD = 0x0005;
6245 pub const IMAGE_REL_PPC_REL24: WORD = 0x0006;
6246 pub const IMAGE_REL_PPC_REL14: WORD = 0x0007;
6247 pub const IMAGE_REL_PPC_TOCREL16: WORD = 0x0008;
6248 pub const IMAGE_REL_PPC_TOCREL14: WORD = 0x0009;
6249 pub const IMAGE_REL_PPC_ADDR32NB: WORD = 0x000A;
6250 pub const IMAGE_REL_PPC_SECREL: WORD = 0x000B;
6251 pub const IMAGE_REL_PPC_SECTION: WORD = 0x000C;
6252 pub const IMAGE_REL_PPC_IFGLUE: WORD = 0x000D;
6253 pub const IMAGE_REL_PPC_IMGLUE: WORD = 0x000E;
6254 pub const IMAGE_REL_PPC_SECREL16: WORD = 0x000F;
6255 pub const IMAGE_REL_PPC_REFHI: WORD = 0x0010;
6256 pub const IMAGE_REL_PPC_REFLO: WORD = 0x0011;
6257 pub const IMAGE_REL_PPC_PAIR: WORD = 0x0012;
6258 pub const IMAGE_REL_PPC_SECRELLO: WORD = 0x0013;
6259 pub const IMAGE_REL_PPC_SECRELHI: WORD = 0x0014;
6260 pub const IMAGE_REL_PPC_GPREL: WORD = 0x0015;
6261 pub const IMAGE_REL_PPC_TOKEN: WORD = 0x0016;
6262 pub const IMAGE_REL_PPC_TYPEMASK: WORD = 0x00FF;
6263 pub const IMAGE_REL_PPC_NEG: WORD = 0x0100;
6264 pub const IMAGE_REL_PPC_BRTAKEN: WORD = 0x0200;
6265 pub const IMAGE_REL_PPC_BRNTAKEN: WORD = 0x0400;
6266 pub const IMAGE_REL_PPC_TOCDEFN: WORD = 0x0800;
6267 pub const IMAGE_REL_SH3_ABSOLUTE: WORD = 0x0000;
6268 pub const IMAGE_REL_SH3_DIRECT16: WORD = 0x0001;
6269 pub const IMAGE_REL_SH3_DIRECT32: WORD = 0x0002;
6270 pub const IMAGE_REL_SH3_DIRECT8: WORD = 0x0003;
6271 pub const IMAGE_REL_SH3_DIRECT8_WORD: WORD = 0x0004;
6272 pub const IMAGE_REL_SH3_DIRECT8_LONG: WORD = 0x0005;
6273 pub const IMAGE_REL_SH3_DIRECT4: WORD = 0x0006;
6274 pub const IMAGE_REL_SH3_DIRECT4_WORD: WORD = 0x0007;
6275 pub const IMAGE_REL_SH3_DIRECT4_LONG: WORD = 0x0008;
6276 pub const IMAGE_REL_SH3_PCREL8_WORD: WORD = 0x0009;
6277 pub const IMAGE_REL_SH3_PCREL8_LONG: WORD = 0x000A;
6278 pub const IMAGE_REL_SH3_PCREL12_WORD: WORD = 0x000B;
6279 pub const IMAGE_REL_SH3_STARTOF_SECTION: WORD = 0x000C;
6280 pub const IMAGE_REL_SH3_SIZEOF_SECTION: WORD = 0x000D;
6281 pub const IMAGE_REL_SH3_SECTION: WORD = 0x000E;
6282 pub const IMAGE_REL_SH3_SECREL: WORD = 0x000F;
6283 pub const IMAGE_REL_SH3_DIRECT32_NB: WORD = 0x0010;
6284 pub const IMAGE_REL_SH3_GPREL4_LONG: WORD = 0x0011;
6285 pub const IMAGE_REL_SH3_TOKEN: WORD = 0x0012;
6286 pub const IMAGE_REL_SHM_PCRELPT: WORD = 0x0013;
6287 pub const IMAGE_REL_SHM_REFLO: WORD = 0x0014;
6288 pub const IMAGE_REL_SHM_REFHALF: WORD = 0x0015;
6289 pub const IMAGE_REL_SHM_RELLO: WORD = 0x0016;
6290 pub const IMAGE_REL_SHM_RELHALF: WORD = 0x0017;
6291 pub const IMAGE_REL_SHM_PAIR: WORD = 0x0018;
6292 pub const IMAGE_REL_SH_NOMODE: WORD = 0x8000;
6293 pub const IMAGE_REL_ARM_ABSOLUTE: WORD = 0x0000;
6294 pub const IMAGE_REL_ARM_ADDR32: WORD = 0x0001;
6295 pub const IMAGE_REL_ARM_ADDR32NB: WORD = 0x0002;
6296 pub const IMAGE_REL_ARM_BRANCH24: WORD = 0x0003;
6297 pub const IMAGE_REL_ARM_BRANCH11: WORD = 0x0004;
6298 pub const IMAGE_REL_ARM_TOKEN: WORD = 0x0005;
6299 pub const IMAGE_REL_ARM_GPREL12: WORD = 0x0006;
6300 pub const IMAGE_REL_ARM_GPREL7: WORD = 0x0007;
6301 pub const IMAGE_REL_ARM_BLX24: WORD = 0x0008;
6302 pub const IMAGE_REL_ARM_BLX11: WORD = 0x0009;
6303 pub const IMAGE_REL_ARM_SECTION: WORD = 0x000E;
6304 pub const IMAGE_REL_ARM_SECREL: WORD = 0x000F;
6305 pub const IMAGE_REL_ARM_MOV32A: WORD = 0x0010;
6306 pub const IMAGE_REL_ARM_MOV32: WORD = 0x0010;
6307 pub const IMAGE_REL_ARM_MOV32T: WORD = 0x0011;
6308 pub const IMAGE_REL_THUMB_MOV32: WORD = 0x0011;
6309 pub const IMAGE_REL_ARM_BRANCH20T: WORD = 0x0012;
6310 pub const IMAGE_REL_THUMB_BRANCH20: WORD = 0x0012;
6311 pub const IMAGE_REL_ARM_BRANCH24T: WORD = 0x0014;
6312 pub const IMAGE_REL_THUMB_BRANCH24: WORD = 0x0014;
6313 pub const IMAGE_REL_ARM_BLX23T: WORD = 0x0015;
6314 pub const IMAGE_REL_THUMB_BLX23: WORD = 0x0015;
6315 pub const IMAGE_REL_AM_ABSOLUTE: WORD = 0x0000;
6316 pub const IMAGE_REL_AM_ADDR32: WORD = 0x0001;
6317 pub const IMAGE_REL_AM_ADDR32NB: WORD = 0x0002;
6318 pub const IMAGE_REL_AM_CALL32: WORD = 0x0003;
6319 pub const IMAGE_REL_AM_FUNCINFO: WORD = 0x0004;
6320 pub const IMAGE_REL_AM_REL32_1: WORD = 0x0005;
6321 pub const IMAGE_REL_AM_REL32_2: WORD = 0x0006;
6322 pub const IMAGE_REL_AM_SECREL: WORD = 0x0007;
6323 pub const IMAGE_REL_AM_SECTION: WORD = 0x0008;
6324 pub const IMAGE_REL_AM_TOKEN: WORD = 0x0009;
6325 pub const IMAGE_REL_ARM64_ABSOLUTE: WORD = 0x0000;
6326 pub const IMAGE_REL_ARM64_ADDR32: WORD = 0x0001;
6327 pub const IMAGE_REL_ARM64_ADDR32NB: WORD = 0x0002;
6328 pub const IMAGE_REL_ARM64_BRANCH26: WORD = 0x0003;
6329 pub const IMAGE_REL_ARM64_PAGEBASE_REL21: WORD = 0x0004;
6330 pub const IMAGE_REL_ARM64_REL21: WORD = 0x0005;
6331 pub const IMAGE_REL_ARM64_PAGEOFFSET_12A: WORD = 0x0006;
6332 pub const IMAGE_REL_ARM64_PAGEOFFSET_12L: WORD = 0x0007;
6333 pub const IMAGE_REL_ARM64_SECREL: WORD = 0x0008;
6334 pub const IMAGE_REL_ARM64_SECREL_LOW12A: WORD = 0x0009;
6335 pub const IMAGE_REL_ARM64_SECREL_HIGH12A: WORD = 0x000A;
6336 pub const IMAGE_REL_ARM64_SECREL_LOW12L: WORD = 0x000B;
6337 pub const IMAGE_REL_ARM64_TOKEN: WORD = 0x000C;
6338 pub const IMAGE_REL_ARM64_SECTION: WORD = 0x000D;
6339 pub const IMAGE_REL_ARM64_ADDR64: WORD = 0x000E;
6340 pub const IMAGE_REL_ARM64_BRANCH19: WORD = 0x000F;
6341 pub const IMAGE_REL_AMD64_ABSOLUTE: WORD = 0x0000;
6342 pub const IMAGE_REL_AMD64_ADDR64: WORD = 0x0001;
6343 pub const IMAGE_REL_AMD64_ADDR32: WORD = 0x0002;
6344 pub const IMAGE_REL_AMD64_ADDR32NB: WORD = 0x0003;
6345 pub const IMAGE_REL_AMD64_REL32: WORD = 0x0004;
6346 pub const IMAGE_REL_AMD64_REL32_1: WORD = 0x0005;
6347 pub const IMAGE_REL_AMD64_REL32_2: WORD = 0x0006;
6348 pub const IMAGE_REL_AMD64_REL32_3: WORD = 0x0007;
6349 pub const IMAGE_REL_AMD64_REL32_4: WORD = 0x0008;
6350 pub const IMAGE_REL_AMD64_REL32_5: WORD = 0x0009;
6351 pub const IMAGE_REL_AMD64_SECTION: WORD = 0x000A;
6352 pub const IMAGE_REL_AMD64_SECREL: WORD = 0x000B;
6353 pub const IMAGE_REL_AMD64_SECREL7: WORD = 0x000C;
6354 pub const IMAGE_REL_AMD64_TOKEN: WORD = 0x000D;
6355 pub const IMAGE_REL_AMD64_SREL32: WORD = 0x000E;
6356 pub const IMAGE_REL_AMD64_PAIR: WORD = 0x000F;
6357 pub const IMAGE_REL_AMD64_SSPAN32: WORD = 0x0010;
6358 pub const IMAGE_REL_IA64_ABSOLUTE: WORD = 0x0000;
6359 pub const IMAGE_REL_IA64_IMM14: WORD = 0x0001;
6360 pub const IMAGE_REL_IA64_IMM22: WORD = 0x0002;
6361 pub const IMAGE_REL_IA64_IMM64: WORD = 0x0003;
6362 pub const IMAGE_REL_IA64_DIR32: WORD = 0x0004;
6363 pub const IMAGE_REL_IA64_DIR64: WORD = 0x0005;
6364 pub const IMAGE_REL_IA64_PCREL21B: WORD = 0x0006;
6365 pub const IMAGE_REL_IA64_PCREL21M: WORD = 0x0007;
6366 pub const IMAGE_REL_IA64_PCREL21F: WORD = 0x0008;
6367 pub const IMAGE_REL_IA64_GPREL22: WORD = 0x0009;
6368 pub const IMAGE_REL_IA64_LTOFF22: WORD = 0x000A;
6369 pub const IMAGE_REL_IA64_SECTION: WORD = 0x000B;
6370 pub const IMAGE_REL_IA64_SECREL22: WORD = 0x000C;
6371 pub const IMAGE_REL_IA64_SECREL64I: WORD = 0x000D;
6372 pub const IMAGE_REL_IA64_SECREL32: WORD = 0x000E;
6373 pub const IMAGE_REL_IA64_DIR32NB: WORD = 0x0010;
6374 pub const IMAGE_REL_IA64_SREL14: WORD = 0x0011;
6375 pub const IMAGE_REL_IA64_SREL22: WORD = 0x0012;
6376 pub const IMAGE_REL_IA64_SREL32: WORD = 0x0013;
6377 pub const IMAGE_REL_IA64_UREL32: WORD = 0x0014;
6378 pub const IMAGE_REL_IA64_PCREL60X: WORD = 0x0015;
6379 pub const IMAGE_REL_IA64_PCREL60B: WORD = 0x0016;
6380 pub const IMAGE_REL_IA64_PCREL60F: WORD = 0x0017;
6381 pub const IMAGE_REL_IA64_PCREL60I: WORD = 0x0018;
6382 pub const IMAGE_REL_IA64_PCREL60M: WORD = 0x0019;
6383 pub const IMAGE_REL_IA64_IMMGPREL64: WORD = 0x001A;
6384 pub const IMAGE_REL_IA64_TOKEN: WORD = 0x001B;
6385 pub const IMAGE_REL_IA64_GPREL32: WORD = 0x001C;
6386 pub const IMAGE_REL_IA64_ADDEND: WORD = 0x001F;
6387 pub const IMAGE_REL_CEF_ABSOLUTE: WORD = 0x0000;
6388 pub const IMAGE_REL_CEF_ADDR32: WORD = 0x0001;
6389 pub const IMAGE_REL_CEF_ADDR64: WORD = 0x0002;
6390 pub const IMAGE_REL_CEF_ADDR32NB: WORD = 0x0003;
6391 pub const IMAGE_REL_CEF_SECTION: WORD = 0x0004;
6392 pub const IMAGE_REL_CEF_SECREL: WORD = 0x0005;
6393 pub const IMAGE_REL_CEF_TOKEN: WORD = 0x0006;
6394 pub const IMAGE_REL_CEE_ABSOLUTE: WORD = 0x0000;
6395 pub const IMAGE_REL_CEE_ADDR32: WORD = 0x0001;
6396 pub const IMAGE_REL_CEE_ADDR64: WORD = 0x0002;
6397 pub const IMAGE_REL_CEE_ADDR32NB: WORD = 0x0003;
6398 pub const IMAGE_REL_CEE_SECTION: WORD = 0x0004;
6399 pub const IMAGE_REL_CEE_SECREL: WORD = 0x0005;
6400 pub const IMAGE_REL_CEE_TOKEN: WORD = 0x0006;
6401 pub const IMAGE_REL_M32R_ABSOLUTE: WORD = 0x0000;
6402 pub const IMAGE_REL_M32R_ADDR32: WORD = 0x0001;
6403 pub const IMAGE_REL_M32R_ADDR32NB: WORD = 0x0002;
6404 pub const IMAGE_REL_M32R_ADDR24: WORD = 0x0003;
6405 pub const IMAGE_REL_M32R_GPREL16: WORD = 0x0004;
6406 pub const IMAGE_REL_M32R_PCREL24: WORD = 0x0005;
6407 pub const IMAGE_REL_M32R_PCREL16: WORD = 0x0006;
6408 pub const IMAGE_REL_M32R_PCREL8: WORD = 0x0007;
6409 pub const IMAGE_REL_M32R_REFHALF: WORD = 0x0008;
6410 pub const IMAGE_REL_M32R_REFHI: WORD = 0x0009;
6411 pub const IMAGE_REL_M32R_REFLO: WORD = 0x000A;
6412 pub const IMAGE_REL_M32R_PAIR: WORD = 0x000B;
6413 pub const IMAGE_REL_M32R_SECTION: WORD = 0x000C;
6414 pub const IMAGE_REL_M32R_SECREL32: WORD = 0x000D;
6415 pub const IMAGE_REL_M32R_TOKEN: WORD = 0x000E;
6416 pub const IMAGE_REL_EBC_ABSOLUTE: WORD = 0x0000;
6417 pub const IMAGE_REL_EBC_ADDR32NB: WORD = 0x0001;
6418 pub const IMAGE_REL_EBC_REL32: WORD = 0x0002;
6419 pub const IMAGE_REL_EBC_SECTION: WORD = 0x0003;
6420 pub const IMAGE_REL_EBC_SECREL: WORD = 0x0004;
6421 UNION!{union IMAGE_LINENUMBER_Type {
6422     [u32; 1],
6423     SymbolTableIndex SymbolTableIndex_mut: DWORD,
6424     VirtualAddress VirtualAddress_mut: DWORD,
6425 }}
6426 STRUCT!{struct IMAGE_LINENUMBER {
6427     Type: IMAGE_LINENUMBER_Type,
6428     Linenumber: WORD,
6429 }}
6430 pub type PIMAGE_LINENUMBER = *mut IMAGE_LINENUMBER;
6431 STRUCT!{struct IMAGE_BASE_RELOCATION {
6432     VirtualAddress: DWORD,
6433     SizeOfBlock: DWORD,
6434 }}
6435 pub type PIMAGE_BASE_RELOCATION = *mut IMAGE_BASE_RELOCATION;
6436 pub const IMAGE_REL_BASED_ABSOLUTE: WORD = 0;
6437 pub const IMAGE_REL_BASED_HIGH: WORD = 1;
6438 pub const IMAGE_REL_BASED_LOW: WORD = 2;
6439 pub const IMAGE_REL_BASED_HIGHLOW: WORD = 3;
6440 pub const IMAGE_REL_BASED_HIGHADJ: WORD = 4;
6441 pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_5: WORD = 5;
6442 pub const IMAGE_REL_BASED_RESERVED: WORD = 6;
6443 pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_7: WORD = 7;
6444 pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_8: WORD = 8;
6445 pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_9: WORD = 9;
6446 pub const IMAGE_REL_BASED_DIR64: WORD = 10;
6447 pub const IMAGE_REL_BASED_IA64_IMM64: WORD = 9;
6448 pub const IMAGE_REL_BASED_MIPS_JMPADDR: WORD = 5;
6449 pub const IMAGE_REL_BASED_MIPS_JMPADDR16: WORD = 9;
6450 pub const IMAGE_REL_BASED_ARM_MOV32: WORD = 5;
6451 pub const IMAGE_REL_BASED_THUMB_MOV32: WORD = 7;
6452 pub const IMAGE_ARCHIVE_START_SIZE: usize = 8;
6453 pub const IMAGE_ARCHIVE_START: &'static str = "!<arch>\n";
6454 pub const IMAGE_ARCHIVE_END: &'static str = "`\n";
6455 pub const IMAGE_ARCHIVE_PAD: &'static str = "\n";
6456 pub const IMAGE_ARCHIVE_LINKER_MEMBER: &'static str = "/               ";
6457 pub const IMAGE_ARCHIVE_LONGNAMES_MEMBER: &'static str = "//              ";
6458 pub const IMAGE_ARCHIVE_HYBRIDMAP_MEMBER: &'static str = "/<HYBRIDMAP>/   ";
6459 STRUCT!{struct IMAGE_ARCHIVE_MEMBER_HEADER {
6460     Name: [BYTE; 16],
6461     Date: [BYTE; 12],
6462     UserID: [BYTE; 6],
6463     GroupID: [BYTE; 6],
6464     Mode: [BYTE; 8],
6465     Size: [BYTE; 10],
6466     EndHeader: [BYTE; 2],
6467 }}
6468 pub type PIMAGE_ARCHIVE_MEMBER_HEADER = *mut IMAGE_ARCHIVE_MEMBER_HEADER;
6469 pub const IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR: usize = 60;
6470 STRUCT!{struct IMAGE_EXPORT_DIRECTORY {
6471     Characteristics: DWORD,
6472     TimeDateStamp: DWORD,
6473     MajorVersion: WORD,
6474     MinorVersion: WORD,
6475     Name: DWORD,
6476     Base: DWORD,
6477     NumberOfFunctions: DWORD,
6478     NumberOfNames: DWORD,
6479     AddressOfFunctions: DWORD,
6480     AddressOfNames: DWORD,
6481     AddressOfNameOrdinals: DWORD,
6482 }}
6483 pub type PIMAGE_EXPORT_DIRECTORY = *mut IMAGE_EXPORT_DIRECTORY;
6484 STRUCT!{struct IMAGE_IMPORT_BY_NAME {
6485     Hint: WORD,
6486     Name: [CHAR; 1],
6487 }}
6488 pub type PIMAGE_IMPORT_BY_NAME = *mut IMAGE_IMPORT_BY_NAME;
6489 UNION!{union IMAGE_THUNK_DATA64_u1 {
6490     [u64; 1],
6491     ForwarderString ForwarderString_mut: ULONGLONG,
6492     Function Function_mut: ULONGLONG,
6493     Ordinal Ordinal_mut: ULONGLONG,
6494     AddressOfData AddressOfData_mut: ULONGLONG,
6495 }}
6496 STRUCT!{struct IMAGE_THUNK_DATA64 {
6497     u1: IMAGE_THUNK_DATA64_u1,
6498 }}
6499 pub type PIMAGE_THUNK_DATA64 = *mut IMAGE_THUNK_DATA64;
6500 UNION!{union IMAGE_THUNK_DATA32_u1 {
6501     [u32; 1],
6502     ForwarderString ForwarderString_mut: DWORD,
6503     Function Function_mut: DWORD,
6504     Ordinal Ordinal_mut: DWORD,
6505     AddressOfData AddressOfData_mut: DWORD,
6506 }}
6507 STRUCT!{struct IMAGE_THUNK_DATA32 {
6508     u1: IMAGE_THUNK_DATA32_u1,
6509 }}
6510 pub type PIMAGE_THUNK_DATA32 = *mut IMAGE_THUNK_DATA32;
6511 pub const IMAGE_ORDINAL_FLAG64: ULONGLONG = 0x8000000000000000;
6512 pub const IMAGE_ORDINAL_FLAG32: DWORD = 0x80000000;
6513 #[inline]
IMAGE_ORDINAL64(Ordinal: ULONGLONG) -> ULONGLONG6514 pub fn IMAGE_ORDINAL64(Ordinal: ULONGLONG) -> ULONGLONG {
6515     Ordinal & 0xffff
6516 }
6517 #[inline]
IMAGE_ORDINAL32(Ordinal: DWORD) -> DWORD6518 pub fn IMAGE_ORDINAL32(Ordinal: DWORD) -> DWORD {
6519     Ordinal & 0xffff
6520 }
6521 #[inline]
IMAGE_SNAP_BY_ORDINAL64(Ordinal: ULONGLONG) -> bool6522 pub fn IMAGE_SNAP_BY_ORDINAL64(Ordinal: ULONGLONG) -> bool {
6523     (Ordinal & IMAGE_ORDINAL_FLAG64) != 0
6524 }
6525 #[inline]
IMAGE_SNAP_BY_ORDINAL32(Ordinal: DWORD) -> bool6526 pub fn IMAGE_SNAP_BY_ORDINAL32(Ordinal: DWORD) -> bool {
6527     (Ordinal & IMAGE_ORDINAL_FLAG32) != 0
6528 }
6529 FN!{stdcall PIMAGE_TLS_CALLBACK(
6530     DllHandle: PVOID,
6531     Reason: DWORD,
6532     Reserved: PVOID,
6533 ) -> ()}
6534 STRUCT!{struct IMAGE_TLS_DIRECTORY64 {
6535     StartAddressOfRawData: ULONGLONG,
6536     EndAddressOfRawData: ULONGLONG,
6537     AddressOfIndex: ULONGLONG,
6538     AddressOfCallBacks: ULONGLONG,
6539     SizeOfZeroFill: DWORD,
6540     Characteristics: DWORD,
6541 }}
6542 BITFIELD!{IMAGE_TLS_DIRECTORY64 Characteristics: DWORD [
6543     Reserved0 set_Reserved0[0..20],
6544     Alignment set_Alignment[20..24],
6545     Reserved1 set_Reserved1[24..32],
6546 ]}
6547 pub type PIMAGE_TLS_DIRECTORY64 = *mut IMAGE_TLS_DIRECTORY64;
6548 STRUCT!{struct IMAGE_TLS_DIRECTORY32 {
6549     StartAddressOfRawData: DWORD,
6550     EndAddressOfRawData: DWORD,
6551     AddressOfIndex: DWORD,
6552     AddressOfCallBacks: DWORD,
6553     SizeOfZeroFill: DWORD,
6554     Characteristics: DWORD,
6555 }}
6556 BITFIELD!{IMAGE_TLS_DIRECTORY32 Characteristics: DWORD [
6557     Reserved0 set_Reserved0[0..20],
6558     Alignment set_Alignment[20..24],
6559     Reserved1 set_Reserved1[24..32],
6560 ]}
6561 pub type PIMAGE_TLS_DIRECTORY32 = *mut IMAGE_TLS_DIRECTORY32;
6562 #[cfg(target_pointer_width = "64")]
6563 IFDEF!{
6564 pub const IMAGE_ORDINAL_FLAG: ULONGLONG = IMAGE_ORDINAL_FLAG64;
6565 #[inline]
6566 pub fn IMAGE_ORDINAL(Ordinal: ULONGLONG) -> ULONGLONG {
6567     IMAGE_ORDINAL64(Ordinal)
6568 }
6569 pub type IMAGE_THUNK_DATA = IMAGE_THUNK_DATA64;
6570 pub type PIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA64;
6571 #[inline]
6572 pub fn IMAGE_SNAP_BY_ORDINAL(Ordinal: ULONGLONG) -> bool {
6573     IMAGE_SNAP_BY_ORDINAL64(Ordinal)
6574 }
6575 pub type IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY64;
6576 pub type PIMAGE_TLS_DIRECTORY = PIMAGE_TLS_DIRECTORY64;
6577 }
6578 #[cfg(target_pointer_width = "32")]
6579 IFDEF!{
6580 pub const IMAGE_ORDINAL_FLAG: DWORD = IMAGE_ORDINAL_FLAG32;
6581 #[inline]
6582 pub fn IMAGE_ORDINAL(Ordinal: DWORD) -> DWORD {
6583     IMAGE_ORDINAL32(Ordinal)
6584 }
6585 pub type IMAGE_THUNK_DATA = IMAGE_THUNK_DATA32;
6586 pub type PIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA32;
6587 #[inline]
6588 pub fn IMAGE_SNAP_BY_ORDINAL(Ordinal: DWORD) -> bool {
6589     IMAGE_SNAP_BY_ORDINAL32(Ordinal)
6590 }
6591 pub type IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY32;
6592 pub type PIMAGE_TLS_DIRECTORY = PIMAGE_TLS_DIRECTORY32;
6593 }
6594 UNION!{union IMAGE_IMPORT_DESCRIPTOR_u {
6595     [u32; 1],
6596     Characteristics Characteristics_mut: DWORD,
6597     OriginalFirstThunk OriginalFirstThunk_mut: DWORD,
6598 }}
6599 STRUCT!{struct IMAGE_IMPORT_DESCRIPTOR {
6600     u: IMAGE_IMPORT_DESCRIPTOR_u,
6601     TimeDateStamp: DWORD,
6602     ForwarderChain: DWORD,
6603     Name: DWORD,
6604     FirstThunk: DWORD,
6605 }}
6606 pub type PIMAGE_IMPORT_DESCRIPTOR = *mut IMAGE_IMPORT_DESCRIPTOR;
6607 STRUCT!{struct IMAGE_BOUND_IMPORT_DESCRIPTOR {
6608     TimeDateStamp: DWORD,
6609     OffsetModuleName: WORD,
6610     NumberOfModuleForwarderRefs: WORD,
6611 }}
6612 pub type PIMAGE_BOUND_IMPORT_DESCRIPTOR = *mut IMAGE_BOUND_IMPORT_DESCRIPTOR;
6613 STRUCT!{struct IMAGE_BOUND_FORWARDER_REF {
6614     TimeDateStamp: DWORD,
6615     OffsetModuleName: WORD,
6616     Reserved: WORD,
6617 }}
6618 pub type PIMAGE_BOUND_FORWARDER_REF = *mut IMAGE_BOUND_FORWARDER_REF;
6619 STRUCT!{struct IMAGE_DELAYLOAD_DESCRIPTOR_Attributes {
6620     AllAttributes: DWORD,
6621 }}
6622 BITFIELD!{IMAGE_DELAYLOAD_DESCRIPTOR_Attributes AllAttributes: DWORD [
6623     RvaBased set_RvaBased[0..1],
6624     ReservedAttributes set_ReservedAttributes[1..32],
6625 ]}
6626 STRUCT!{struct IMAGE_DELAYLOAD_DESCRIPTOR {
6627     Attributes: IMAGE_DELAYLOAD_DESCRIPTOR_Attributes,
6628     DllNameRVA: DWORD,
6629     ModuleHandleRVA: DWORD,
6630     ImportAddressTableRVA: DWORD,
6631     ImportNameTableRVA: DWORD,
6632     BoundImportAddressTableRVA: DWORD,
6633     UnloadInformationTableRVA: DWORD,
6634     TimeDateStamp: DWORD,
6635 }}
6636 pub type PIMAGE_DELAYLOAD_DESCRIPTOR = *mut IMAGE_DELAYLOAD_DESCRIPTOR;
6637 pub type PCIMAGE_DELAYLOAD_DESCRIPTOR = *const IMAGE_DELAYLOAD_DESCRIPTOR;
6638 STRUCT!{struct IMAGE_RESOURCE_DIRECTORY {
6639     Characteristics: DWORD,
6640     TimeDateStamp: DWORD,
6641     MajorVersion: WORD,
6642     MinorVersion: WORD,
6643     NumberOfNamedEntries: WORD,
6644     NumberOfIdEntries: WORD,
6645 }}
6646 pub type PIMAGE_RESOURCE_DIRECTORY = *mut IMAGE_RESOURCE_DIRECTORY;
6647 pub const IMAGE_RESOURCE_NAME_IS_STRING: DWORD = 0x80000000;
6648 pub const IMAGE_RESOURCE_DATA_IS_DIRECTORY: DWORD = 0x80000000;
6649 STRUCT!{struct IMAGE_RESOURCE_DIRECTORY_ENTRY_u_s {
6650     BitFields: DWORD,
6651 }}
6652 BITFIELD!{IMAGE_RESOURCE_DIRECTORY_ENTRY_u_s BitFields: DWORD [
6653     NameOffset set_NameOffset[0..31],
6654     NameIsString set_NameIsString[31..32],
6655 ]}
6656 UNION!{union IMAGE_RESOURCE_DIRECTORY_ENTRY_u {
6657     [u32; 1],
6658     s s_mut: IMAGE_RESOURCE_DIRECTORY_ENTRY_u_s,
6659     Name Name_mut: DWORD,
6660     Id Id_mut: WORD,
6661 }}
6662 STRUCT!{struct IMAGE_RESOURCE_DIRECTORY_ENTRY {
6663     u: IMAGE_RESOURCE_DIRECTORY_ENTRY_u,
6664     OffsetToData: DWORD,
6665 }}
6666 BITFIELD!{IMAGE_RESOURCE_DIRECTORY_ENTRY OffsetToData: DWORD [
6667     OffsetToDirectory set_OffsetToDirectory[0..31],
6668     DataIsDirectory set_DataIsDirectory[31..32],
6669 ]}
6670 pub type PIMAGE_RESOURCE_DIRECTORY_ENTRY = *mut IMAGE_RESOURCE_DIRECTORY_ENTRY;
6671 STRUCT!{struct IMAGE_RESOURCE_DIRECTORY_STRING {
6672     Length: WORD,
6673     NameString: [CHAR; 1],
6674 }}
6675 pub type PIMAGE_RESOURCE_DIRECTORY_STRING = *mut IMAGE_RESOURCE_DIRECTORY_STRING;
6676 STRUCT!{struct IMAGE_RESOURCE_DIR_STRING_U {
6677     Length: WORD,
6678     NameString: [WCHAR; 1],
6679 }}
6680 pub type PIMAGE_RESOURCE_DIR_STRING_U = *mut IMAGE_RESOURCE_DIR_STRING_U;
6681 STRUCT!{struct IMAGE_RESOURCE_DATA_ENTRY {
6682     OffsetToData: DWORD,
6683     Size: DWORD,
6684     CodePage: DWORD,
6685     Reserved: DWORD,
6686 }}
6687 pub type PIMAGE_RESOURCE_DATA_ENTRY = *mut IMAGE_RESOURCE_DATA_ENTRY;
6688 STRUCT!{struct IMAGE_LOAD_CONFIG_CODE_INTEGRITY {
6689     Flags: WORD,
6690     Catalog: WORD,
6691     CatalogOffset: DWORD,
6692     Reserved: DWORD,
6693 }}
6694 pub type PIMAGE_LOAD_CONFIG_CODE_INTEGRITY = *mut IMAGE_LOAD_CONFIG_CODE_INTEGRITY;
6695 STRUCT!{struct IMAGE_DYNAMIC_RELOCATION_TABLE {
6696     Version: DWORD,
6697     Size: DWORD,
6698 }}
6699 pub type PIMAGE_DYNAMIC_RELOCATION_TABLE = *mut IMAGE_DYNAMIC_RELOCATION_TABLE;
6700 STRUCT!{#[repr(packed)] struct IMAGE_DYNAMIC_RELOCATION32 {
6701     Symbol: DWORD,
6702     BaseRelocSize: DWORD,
6703 }}
6704 pub type PIMAGE_DYNAMIC_RELOCATION32 = *mut IMAGE_DYNAMIC_RELOCATION32;
6705 STRUCT!{#[repr(packed)] struct IMAGE_DYNAMIC_RELOCATION64 {
6706     Symbol: ULONGLONG,
6707     BaseRelocSize: DWORD,
6708 }}
6709 pub type PIMAGE_DYNAMIC_RELOCATION64 = *mut IMAGE_DYNAMIC_RELOCATION64;
6710 STRUCT!{#[repr(packed)] struct IMAGE_DYNAMIC_RELOCATION32_V2 {
6711     HeaderSize: DWORD,
6712     FixupInfoSize: DWORD,
6713     Symbol: DWORD,
6714     SymbolGroup: DWORD,
6715     Flags: DWORD,
6716 }}
6717 pub type PIMAGE_DYNAMIC_RELOCATION32_V2 = *mut IMAGE_DYNAMIC_RELOCATION32_V2;
6718 STRUCT!{#[repr(packed)] struct IMAGE_DYNAMIC_RELOCATION64_V2 {
6719     HeaderSize: DWORD,
6720     FixupInfoSize: DWORD,
6721     Symbol: ULONGLONG,
6722     SymbolGroup: DWORD,
6723     Flags: DWORD,
6724 }}
6725 pub type PIMAGE_DYNAMIC_RELOCATION64_V2 = *mut IMAGE_DYNAMIC_RELOCATION64_V2;
6726 #[cfg(target_pointer_width = "64")]
6727 IFDEF!{
6728 pub type IMAGE_DYNAMIC_RELOCATION = IMAGE_DYNAMIC_RELOCATION64;
6729 pub type PIMAGE_DYNAMIC_RELOCATION = PIMAGE_DYNAMIC_RELOCATION64;
6730 pub type IMAGE_DYNAMIC_RELOCATION_V2 = IMAGE_DYNAMIC_RELOCATION64_V2;
6731 pub type PIMAGE_DYNAMIC_RELOCATION_V2 = PIMAGE_DYNAMIC_RELOCATION64_V2;
6732 }
6733 #[cfg(target_pointer_width = "32")]
6734 IFDEF!{
6735 pub type IMAGE_DYNAMIC_RELOCATION = IMAGE_DYNAMIC_RELOCATION32;
6736 pub type PIMAGE_DYNAMIC_RELOCATION = PIMAGE_DYNAMIC_RELOCATION32;
6737 pub type IMAGE_DYNAMIC_RELOCATION_V2 = IMAGE_DYNAMIC_RELOCATION32_V2;
6738 pub type PIMAGE_DYNAMIC_RELOCATION_V2 = PIMAGE_DYNAMIC_RELOCATION32_V2;
6739 }
6740 pub const IMAGE_DYNAMIC_RELOCATION_GUARD_RF_PROLOGUE: DWORD = 0x00000001;
6741 pub const IMAGE_DYNAMIC_RELOCATION_GUARD_RF_EPILOGUE: DWORD = 0x00000002;
6742 STRUCT!{#[repr(packed)] struct IMAGE_PROLOGUE_DYNAMIC_RELOCATION_HEADER {
6743     PrologueByteCount: BYTE,
6744 }}
6745 pub type PIMAGE_PROLOGUE_DYNAMIC_RELOCATION_HEADER = *mut IMAGE_PROLOGUE_DYNAMIC_RELOCATION_HEADER;
6746 STRUCT!{#[repr(packed)] struct IMAGE_EPILOGUE_DYNAMIC_RELOCATION_HEADER {
6747     EpilogueCount: DWORD,
6748     EpilogueByteCount: BYTE,
6749     BranchDescriptorElementSize: BYTE,
6750     BranchDescriptorCount: WORD,
6751 }}
6752 pub type PIMAGE_EPILOGUE_DYNAMIC_RELOCATION_HEADER = *mut IMAGE_EPILOGUE_DYNAMIC_RELOCATION_HEADER;
6753 STRUCT!{struct IMAGE_LOAD_CONFIG_DIRECTORY32 {
6754     Size: DWORD,
6755     TimeDateStamp: DWORD,
6756     MajorVersion: WORD,
6757     MinorVersion: WORD,
6758     GlobalFlagsClear: DWORD,
6759     GlobalFlagsSet: DWORD,
6760     CriticalSectionDefaultTimeout: DWORD,
6761     DeCommitFreeBlockThreshold: DWORD,
6762     DeCommitTotalFreeThreshold: DWORD,
6763     LockPrefixTable: DWORD,
6764     MaximumAllocationSize: DWORD,
6765     VirtualMemoryThreshold: DWORD,
6766     ProcessHeapFlags: DWORD,
6767     ProcessAffinityMask: DWORD,
6768     CSDVersion: WORD,
6769     DependentLoadFlags: WORD,
6770     EditList: DWORD,
6771     SecurityCookie: DWORD,
6772     SEHandlerTable: DWORD,
6773     SEHandlerCount: DWORD,
6774     GuardCFCheckFunctionPointer: DWORD,
6775     GuardCFDispatchFunctionPointer: DWORD,
6776     GuardCFFunctionTable: DWORD,
6777     GuardCFFunctionCount: DWORD,
6778     GuardFlags: DWORD,
6779     CodeIntegrity: IMAGE_LOAD_CONFIG_CODE_INTEGRITY,
6780     GuardAddressTakenIatEntryTable: DWORD,
6781     GuardAddressTakenIatEntryCount: DWORD,
6782     GuardLongJumpTargetTable: DWORD,
6783     GuardLongJumpTargetCount: DWORD,
6784     DynamicValueRelocTable: DWORD,
6785     CHPEMetadataPointer: DWORD,
6786     GuardRFFailureRoutine: DWORD,
6787     GuardRFFailureRoutineFunctionPointer: DWORD,
6788     DynamicValueRelocTableOffset: DWORD,
6789     DynamicValueRelocTableSection: WORD,
6790     Reserved2: WORD,
6791     GuardRFVerifyStackPointerFunctionPointer: DWORD,
6792     HotPatchTableOffset: DWORD,
6793     Reserved3: DWORD,
6794     EnclaveConfigurationPointer: DWORD,
6795 }}
6796 pub type PIMAGE_LOAD_CONFIG_DIRECTORY32 = *mut IMAGE_LOAD_CONFIG_DIRECTORY32;
6797 STRUCT!{struct IMAGE_LOAD_CONFIG_DIRECTORY64 {
6798     Size: DWORD,
6799     TimeDateStamp: DWORD,
6800     MajorVersion: WORD,
6801     MinorVersion: WORD,
6802     GlobalFlagsClear: DWORD,
6803     GlobalFlagsSet: DWORD,
6804     CriticalSectionDefaultTimeout: DWORD,
6805     DeCommitFreeBlockThreshold: ULONGLONG,
6806     DeCommitTotalFreeThreshold: ULONGLONG,
6807     LockPrefixTable: ULONGLONG,
6808     MaximumAllocationSize: ULONGLONG,
6809     VirtualMemoryThreshold: ULONGLONG,
6810     ProcessAffinityMask: ULONGLONG,
6811     ProcessHeapFlags: DWORD,
6812     CSDVersion: WORD,
6813     DependentLoadFlags: WORD,
6814     EditList: ULONGLONG,
6815     SecurityCookie: ULONGLONG,
6816     SEHandlerTable: ULONGLONG,
6817     SEHandlerCount: ULONGLONG,
6818     GuardCFCheckFunctionPointer: ULONGLONG,
6819     GuardCFDispatchFunctionPointer: ULONGLONG,
6820     GuardCFFunctionTable: ULONGLONG,
6821     GuardCFFunctionCount: ULONGLONG,
6822     GuardFlags: DWORD,
6823     CodeIntegrity: IMAGE_LOAD_CONFIG_CODE_INTEGRITY,
6824     GuardAddressTakenIatEntryTable: ULONGLONG,
6825     GuardAddressTakenIatEntryCount: ULONGLONG,
6826     GuardLongJumpTargetTable: ULONGLONG,
6827     GuardLongJumpTargetCount: ULONGLONG,
6828     DynamicValueRelocTable: ULONGLONG,
6829     CHPEMetadataPointer: ULONGLONG,
6830     GuardRFFailureRoutine: ULONGLONG,
6831     GuardRFFailureRoutineFunctionPointer: ULONGLONG,
6832     DynamicValueRelocTableOffset: DWORD,
6833     DynamicValueRelocTableSection: WORD,
6834     Reserved2: WORD,
6835     GuardRFVerifyStackPointerFunctionPointer: ULONGLONG,
6836     HotPatchTableOffset: DWORD,
6837     Reserved3: DWORD,
6838     EnclaveConfigurationPointer: ULONGLONG,
6839 }}
6840 pub type PIMAGE_LOAD_CONFIG_DIRECTORY64 = *mut IMAGE_LOAD_CONFIG_DIRECTORY64;
6841 #[cfg(target_pointer_width = "64")]
6842 IFDEF!{
6843 pub type IMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY64;
6844 pub type PIMAGE_LOAD_CONFIG_DIRECTORY = PIMAGE_LOAD_CONFIG_DIRECTORY64;
6845 }
6846 #[cfg(target_pointer_width = "32")]
6847 IFDEF!{
6848 pub type IMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY32;
6849 pub type PIMAGE_LOAD_CONFIG_DIRECTORY = PIMAGE_LOAD_CONFIG_DIRECTORY32;
6850 }
6851 STRUCT!{struct IMAGE_HOT_PATCH_INFO {
6852     Version: DWORD,
6853     Size: DWORD,
6854     SequenceNumber: DWORD,
6855     BaseImageList: DWORD,
6856     BaseImageCount: DWORD,
6857     BufferOffset: DWORD,
6858 }}
6859 pub type PIMAGE_HOT_PATCH_INFO = *mut IMAGE_HOT_PATCH_INFO;
6860 STRUCT!{struct IMAGE_HOT_PATCH_BASE {
6861     SequenceNumber: DWORD,
6862     Flags: DWORD,
6863     OriginalTimeDateStamp: DWORD,
6864     OriginalCheckSum: DWORD,
6865     CodeIntegrityInfo: DWORD,
6866     CodeIntegritySize: DWORD,
6867     PatchTable: DWORD,
6868     BufferOffset: DWORD,
6869 }}
6870 pub type PIMAGE_HOT_PATCH_BASE = *mut IMAGE_HOT_PATCH_BASE;
6871 STRUCT!{struct IMAGE_HOT_PATCH_HASHES {
6872     SHA256: [BYTE; 32],
6873     SHA1: [BYTE; 20],
6874 }}
6875 pub type PIMAGE_HOT_PATCH_HASHES = *mut IMAGE_HOT_PATCH_HASHES;
6876 pub const IMAGE_HOT_PATCH_BASE_OBLIGATORY: DWORD = 0x00000001;
6877 pub const IMAGE_HOT_PATCH_CHUNK_INVERSE: DWORD = 0x80000000;
6878 pub const IMAGE_HOT_PATCH_CHUNK_OBLIGATORY: DWORD = 0x40000000;
6879 pub const IMAGE_HOT_PATCH_CHUNK_RESERVED: DWORD = 0x3FF03000;
6880 pub const IMAGE_HOT_PATCH_CHUNK_TYPE: DWORD = 0x000FC000;
6881 pub const IMAGE_HOT_PATCH_CHUNK_SOURCE_RVA: DWORD = 0x00008000;
6882 pub const IMAGE_HOT_PATCH_CHUNK_TARGET_RVA: DWORD = 0x00004000;
6883 pub const IMAGE_HOT_PATCH_CHUNK_SIZE: DWORD = 0x00000FFF;
6884 pub const IMAGE_HOT_PATCH_NONE: DWORD = 0x00000000;
6885 pub const IMAGE_HOT_PATCH_FUNCTION: DWORD = 0x0001C000;
6886 pub const IMAGE_HOT_PATCH_ABSOLUTE: DWORD = 0x0002C000;
6887 pub const IMAGE_HOT_PATCH_REL32: DWORD = 0x0003C000;
6888 pub const IMAGE_HOT_PATCH_CALL_TARGET: DWORD = 0x00044000;
6889 pub const IMAGE_HOT_PATCH_INDIRECT: DWORD = 0x0005C000;
6890 pub const IMAGE_HOT_PATCH_NO_CALL_TARGET: DWORD = 0x00064000;
6891 pub const IMAGE_HOT_PATCH_DYNAMIC_VALUE: DWORD = 0x00078000;
6892 pub const IMAGE_GUARD_CF_INSTRUMENTED: DWORD = 0x00000100;
6893 pub const IMAGE_GUARD_CFW_INSTRUMENTED: DWORD = 0x00000200;
6894 pub const IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT: DWORD = 0x00000400;
6895 pub const IMAGE_GUARD_SECURITY_COOKIE_UNUSED: DWORD = 0x00000800;
6896 pub const IMAGE_GUARD_PROTECT_DELAYLOAD_IAT: DWORD = 0x00001000;
6897 pub const IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION: DWORD = 0x00002000;
6898 pub const IMAGE_GUARD_CF_EXPORT_SUPPRESSION_INFO_PRESENT: DWORD = 0x00004000;
6899 pub const IMAGE_GUARD_CF_ENABLE_EXPORT_SUPPRESSION: DWORD = 0x00008000;
6900 pub const IMAGE_GUARD_CF_LONGJUMP_TABLE_PRESENT: DWORD = 0x00010000;
6901 pub const IMAGE_GUARD_RF_INSTRUMENTED: DWORD = 0x00020000;
6902 pub const IMAGE_GUARD_RF_ENABLE: DWORD = 0x00040000;
6903 pub const IMAGE_GUARD_RF_STRICT: DWORD = 0x00080000;
6904 pub const IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK: DWORD = 0xF0000000;
6905 pub const IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT: usize = 28;
6906 pub const IMAGE_GUARD_FLAG_FID_SUPPRESSED: DWORD = 0x01;
6907 pub const IMAGE_GUARD_FLAG_EXPORT_SUPPRESSED: DWORD = 0x02;
6908 STRUCT!{struct IMAGE_CE_RUNTIME_FUNCTION_ENTRY {
6909     FuncStart: DWORD,
6910     BitFields: DWORD,
6911 }}
6912 BITFIELD!{IMAGE_CE_RUNTIME_FUNCTION_ENTRY BitFields: DWORD [
6913     PrologLen set_PrologLen[0..8],
6914     FuncLen set_FuncLen[8..30],
6915     ThirtyTwoBit set_ThirtyTwoBit[30..31],
6916     ExceptionFlag set_ExceptionFlag[31..32],
6917 ]}
6918 pub type PIMAGE_CE_RUNTIME_FUNCTION_ENTRY = *mut IMAGE_CE_RUNTIME_FUNCTION_ENTRY;
6919 STRUCT!{struct IMAGE_ARM_RUNTIME_FUNCTION_ENTRY {
6920     BeginAddress: DWORD,
6921     UnwindData: DWORD,
6922 }}
6923 BITFIELD!{IMAGE_ARM_RUNTIME_FUNCTION_ENTRY UnwindData: DWORD [
6924     Flag set_Flag[0..2],
6925     FunctionLength set_FunctionLength[2..13],
6926     Ret set_Ret[13..15],
6927     H set_H[15..16],
6928     Reg set_Reg[16..19],
6929     R set_R[19..20],
6930     L set_L[20..21],
6931     C set_c[21..22],
6932     StackAdjust set_StackAdjust[22..32],
6933 ]}
6934 pub type PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY = *mut IMAGE_ARM_RUNTIME_FUNCTION_ENTRY;
6935 STRUCT!{struct IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY {
6936     BeginAddress: DWORD,
6937     UnwindData: DWORD,
6938 }}
6939 BITFIELD!{IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY UnwindData: DWORD [
6940     Flag set_Flag[0..2],
6941     FunctionLength set_FunctionLength[2..13],
6942     RegF set_RegF[13..16],
6943     RegI set_RegI[16..20],
6944     H set_H[20..21],
6945     CR set_cR[21..23],
6946     FrameSize set_FrameSize[23..32],
6947 ]}
6948 pub type PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY = *mut IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
6949 STRUCT!{struct IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY {
6950     BeginAddress: ULONGLONG,
6951     EndAddress: ULONGLONG,
6952     ExceptionHandler: ULONGLONG,
6953     HandlerData: ULONGLONG,
6954     PrologEndAddress: ULONGLONG,
6955 }}
6956 pub type PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY = *mut IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY;
6957 STRUCT!{struct IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY {
6958     BeginAddress: DWORD,
6959     EndAddress: DWORD,
6960     ExceptionHandler: DWORD,
6961     HandlerData: DWORD,
6962     PrologEndAddress: DWORD,
6963 }}
6964 pub type PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY = *mut IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY;
6965 UNION!{union IMAGE_RUNTIME_FUNCTION_ENTRY_u {
6966     [u32; 1],
6967     UnwindInfoAddress UnwindInfoAddress_mut: DWORD,
6968     UnwindData UnwindData_mut: DWORD,
6969 }}
6970 STRUCT!{struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
6971     BeginAddress: DWORD,
6972     EndAddress: DWORD,
6973     u: IMAGE_RUNTIME_FUNCTION_ENTRY_u,
6974 }}
6975 type _PIMAGE_RUNTIME_FUNCTION_ENTRY = *mut _IMAGE_RUNTIME_FUNCTION_ENTRY;
6976 pub type IMAGE_IA64_RUNTIME_FUNCTION_ENTRY = _IMAGE_RUNTIME_FUNCTION_ENTRY;
6977 pub type PIMAGE_IA64_RUNTIME_FUNCTION_ENTRY = _PIMAGE_RUNTIME_FUNCTION_ENTRY;
6978 #[cfg(target_arch = "aarch64")]
6979 IFDEF!{
6980 pub type IMAGE_RUNTIME_FUNCTION_ENTRY = IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
6981 pub type PIMAGE_RUNTIME_FUNCTION_ENTRY = PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
6982 }
6983 #[cfg(not(target_arch = "aarch64"))]
6984 IFDEF!{
6985 pub type IMAGE_RUNTIME_FUNCTION_ENTRY = _IMAGE_RUNTIME_FUNCTION_ENTRY;
6986 pub type PIMAGE_RUNTIME_FUNCTION_ENTRY = _PIMAGE_RUNTIME_FUNCTION_ENTRY;
6987 }
6988 STRUCT!{struct IMAGE_DEBUG_DIRECTORY {
6989     Characteristics: DWORD,
6990     TimeDateStamp: DWORD,
6991     MajorVersion: WORD,
6992     MinorVersion: WORD,
6993     Type: DWORD,
6994     SizeOfData: DWORD,
6995     AddressOfRawData: DWORD,
6996     PointerToRawData: DWORD,
6997 }}
6998 pub type PIMAGE_DEBUG_DIRECTORY = *mut IMAGE_DEBUG_DIRECTORY;
6999 pub const IMAGE_DEBUG_TYPE_UNKNOWN: DWORD = 0;
7000 pub const IMAGE_DEBUG_TYPE_COFF: DWORD = 1;
7001 pub const IMAGE_DEBUG_TYPE_CODEVIEW: DWORD = 2;
7002 pub const IMAGE_DEBUG_TYPE_FPO: DWORD = 3;
7003 pub const IMAGE_DEBUG_TYPE_MISC: DWORD = 4;
7004 pub const IMAGE_DEBUG_TYPE_EXCEPTION: DWORD = 5;
7005 pub const IMAGE_DEBUG_TYPE_FIXUP: DWORD = 6;
7006 pub const IMAGE_DEBUG_TYPE_OMAP_TO_SRC: DWORD = 7;
7007 pub const IMAGE_DEBUG_TYPE_OMAP_FROM_SRC: DWORD = 8;
7008 pub const IMAGE_DEBUG_TYPE_BORLAND: DWORD = 9;
7009 pub const IMAGE_DEBUG_TYPE_RESERVED10: DWORD = 10;
7010 pub const IMAGE_DEBUG_TYPE_CLSID: DWORD = 11;
7011 pub const IMAGE_DEBUG_TYPE_VC_FEATURE: DWORD = 12;
7012 pub const IMAGE_DEBUG_TYPE_POGO: DWORD = 13;
7013 pub const IMAGE_DEBUG_TYPE_ILTCG: DWORD = 14;
7014 pub const IMAGE_DEBUG_TYPE_MPX: DWORD = 15;
7015 pub const IMAGE_DEBUG_TYPE_REPRO: DWORD = 16;
7016 STRUCT!{struct IMAGE_COFF_SYMBOLS_HEADER {
7017     NumberOfSymbols: DWORD,
7018     LvaToFirstSymbol: DWORD,
7019     NumberOfLinenumbers: DWORD,
7020     LvaToFirstLinenumber: DWORD,
7021     RvaToFirstByteOfCode: DWORD,
7022     RvaToLastByteOfCode: DWORD,
7023     RvaToFirstByteOfData: DWORD,
7024     RvaToLastByteOfData: DWORD,
7025 }}
7026 pub type PIMAGE_COFF_SYMBOLS_HEADER = *mut IMAGE_COFF_SYMBOLS_HEADER;
7027 pub const FRAME_FPO: WORD = 0;
7028 pub const FRAME_TRAP: WORD = 1;
7029 pub const FRAME_TSS: WORD = 2;
7030 pub const FRAME_NONFPO: WORD = 3;
7031 STRUCT!{struct FPO_DATA {
7032     ulOffStart: DWORD,
7033     cbProcSize: DWORD,
7034     cdwLocals: DWORD,
7035     cdwParams: WORD,
7036     BitFields: WORD,
7037 }}
7038 BITFIELD!{FPO_DATA BitFields: WORD [
7039     cbProlog set_cbProlog[0..8],
7040     cbRegs set_cbRegs[8..11],
7041     fHasSEH set_fHasSEH[11..12],
7042     fUseBP set_fUseBP[12..13],
7043     reserved set_reserved[13..14],
7044     cbFrame set_cbFrame[14..16],
7045 ]}
7046 pub type PFPO_DATA = *mut FPO_DATA;
7047 pub const SIZEOF_RFPO_DATA: usize = 16;
7048 pub const IMAGE_DEBUG_MISC_EXENAME: DWORD = 1;
7049 STRUCT!{struct IMAGE_DEBUG_MISC {
7050     DataType: DWORD,
7051     Length: DWORD,
7052     Unicode: BOOLEAN,
7053     Reserved: [BYTE; 3],
7054     Data: [BYTE; 1],
7055 }}
7056 pub type PIMAGE_DEBUG_MISC = *mut IMAGE_DEBUG_MISC;
7057 STRUCT!{struct IMAGE_FUNCTION_ENTRY {
7058     StartingAddress: DWORD,
7059     EndingAddress: DWORD,
7060     EndOfPrologue: DWORD,
7061 }}
7062 pub type PIMAGE_FUNCTION_ENTRY = *mut IMAGE_FUNCTION_ENTRY;
7063 UNION!{union IMAGE_FUNCTION_ENTRY64_u {
7064     [u64; 1],
7065     EndOfPrologue EndOfPrologue_mut: ULONGLONG,
7066     UnwindInfoAddress UnwindInfoAddress_mut: ULONGLONG,
7067 }}
7068 STRUCT!{struct IMAGE_FUNCTION_ENTRY64 {
7069     StartingAddress: ULONGLONG,
7070     EndingAddress: ULONGLONG,
7071     u: IMAGE_FUNCTION_ENTRY64_u,
7072 }}
7073 pub type PIMAGE_FUNCTION_ENTRY64 = *mut IMAGE_FUNCTION_ENTRY64;
7074 STRUCT!{struct IMAGE_SEPARATE_DEBUG_HEADER {
7075     Signature: WORD,
7076     Flags: WORD,
7077     Machine: WORD,
7078     Characteristics: WORD,
7079     TimeDateStamp: DWORD,
7080     CheckSum: DWORD,
7081     ImageBase: DWORD,
7082     SizeOfImage: DWORD,
7083     NumberOfSections: DWORD,
7084     ExportedNamesSize: DWORD,
7085     DebugDirectorySize: DWORD,
7086     SectionAlignment: DWORD,
7087     Reserved: [DWORD; 2],
7088 }}
7089 pub type PIMAGE_SEPARATE_DEBUG_HEADER = *mut IMAGE_SEPARATE_DEBUG_HEADER;
7090 STRUCT!{struct NON_PAGED_DEBUG_INFO {
7091     Signature: WORD,
7092     Flags: WORD,
7093     Size: DWORD,
7094     Machine: WORD,
7095     Characteristics: WORD,
7096     TimeDateStamp: DWORD,
7097     CheckSum: DWORD,
7098     SizeOfImage: DWORD,
7099     ImageBase: ULONGLONG,
7100 }}
7101 pub type PNON_PAGED_DEBUG_INFO = *mut NON_PAGED_DEBUG_INFO;
7102 pub const IMAGE_SEPARATE_DEBUG_SIGNATURE: WORD = 0x4944;
7103 pub const NON_PAGED_DEBUG_SIGNATURE: WORD = 0x494E;
7104 pub const IMAGE_SEPARATE_DEBUG_FLAGS_MASK: WORD = 0x8000;
7105 pub const IMAGE_SEPARATE_DEBUG_MISMATCH: WORD = 0x8000;
7106 STRUCT!{struct IMAGE_ARCHITECTURE_HEADER {
7107     BitFields: c_uint,
7108     FirstEntryRVA: DWORD,
7109 }}
7110 BITFIELD!{IMAGE_ARCHITECTURE_HEADER BitFields: c_uint [
7111     AmaskValue set_AmaskValue[0..1],
7112     unused1 set_unused1[1..8],
7113     AmaskShift set_AmaskShift[8..16],
7114     unused2 set_unused2[8..32],
7115 ]}
7116 pub type PIMAGE_ARCHITECTURE_HEADER = *mut IMAGE_ARCHITECTURE_HEADER;
7117 STRUCT!{struct IMAGE_ARCHITECTURE_ENTRY {
7118     FixupInstRVA: DWORD,
7119     NewInst: DWORD,
7120 }}
7121 pub type PIMAGE_ARCHITECTURE_ENTRY = *mut IMAGE_ARCHITECTURE_ENTRY;
7122 pub const IMPORT_OBJECT_HDR_SIG2: WORD = 0xffff;
7123 UNION!{union IMPORT_OBJECT_HEADER_u {
7124     [u16; 1],
7125     Ordinal Ordinal_mut: WORD,
7126     Hint Hint_mut: WORD,
7127 }}
7128 STRUCT!{struct IMPORT_OBJECT_HEADER {
7129     Sig1: WORD,
7130     Sig2: WORD,
7131     Version: WORD,
7132     Machine: WORD,
7133     TimeDateStamp: DWORD,
7134     SizeOfData: DWORD,
7135     u: IMPORT_OBJECT_HEADER_u,
7136     BitFields: WORD,
7137 }}
7138 BITFIELD!{IMPORT_OBJECT_HEADER BitFields: WORD [
7139     Type set_Type[0..2],
7140     NameType set_NameType[2..5],
7141     Reserved set_Reserved[5..16],
7142 ]}
7143 ENUM!{enum IMPORT_OBJECT_TYPE {
7144     IMPORT_OBJECT_CODE = 0,
7145     IMPORT_OBJECT_DATA = 1,
7146     IMPORT_OBJECT_CONST = 2,
7147 }}
7148 ENUM!{enum IMPORT_OBJECT_NAME_TYPE {
7149     IMPORT_OBJECT_ORDINAL = 0,
7150     IMPORT_OBJECT_NAME = 1,
7151     IMPORT_OBJECT_NAME_NO_PREFIX = 2,
7152     IMPORT_OBJECT_NAME_UNDECORATE = 3,
7153     IMPORT_OBJECT_NAME_EXPORTAS = 4,
7154 }}
7155 ENUM!{enum ReplacesCorHdrNumericDefines {
7156     COMIMAGE_FLAGS_ILONLY = 0x00000001,
7157     COMIMAGE_FLAGS_32BITREQUIRED = 0x00000002,
7158     COMIMAGE_FLAGS_IL_LIBRARY = 0x00000004,
7159     COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x00000008,
7160     COMIMAGE_FLAGS_NATIVE_ENTRYPOINT = 0x00000010,
7161     COMIMAGE_FLAGS_TRACKDEBUGDATA = 0x00010000,
7162     COMIMAGE_FLAGS_32BITPREFERRED = 0x00020000,
7163     COR_VERSION_MAJOR_V2 = 2,
7164     COR_VERSION_MAJOR = COR_VERSION_MAJOR_V2,
7165     COR_VERSION_MINOR = 5,
7166     COR_DELETED_NAME_LENGTH = 8,
7167     COR_VTABLEGAP_NAME_LENGTH = 8,
7168     NATIVE_TYPE_MAX_CB = 1,
7169     COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE= 0xFF,
7170     IMAGE_COR_MIH_METHODRVA = 0x01,
7171     IMAGE_COR_MIH_EHRVA = 0x02,
7172     IMAGE_COR_MIH_BASICBLOCK = 0x08,
7173     COR_VTABLE_32BIT = 0x01,
7174     COR_VTABLE_64BIT = 0x02,
7175     COR_VTABLE_FROM_UNMANAGED = 0x04,
7176     COR_VTABLE_FROM_UNMANAGED_RETAIN_APPDOMAIN = 0x08,
7177     COR_VTABLE_CALL_MOST_DERIVED = 0x10,
7178     IMAGE_COR_EATJ_THUNK_SIZE = 32,
7179     MAX_CLASS_NAME = 1024,
7180     MAX_PACKAGE_NAME = 1024,
7181 }}
7182 UNION!{union IMAGE_COR20_HEADER_u {
7183     [u32; 1],
7184     EntryPointToken EntryPointToken_mut: DWORD,
7185     EntryPointRVA EntryPointRVA_mut: DWORD,
7186 }}
7187 STRUCT!{struct IMAGE_COR20_HEADER {
7188     cb: DWORD,
7189     MajorRuntimeVersion: WORD,
7190     MinorRuntimeVersion: WORD,
7191     MetaData: IMAGE_DATA_DIRECTORY,
7192     Flags: DWORD,
7193     u: IMAGE_COR20_HEADER_u,
7194     Resources: IMAGE_DATA_DIRECTORY,
7195     StrongNameSignature: IMAGE_DATA_DIRECTORY,
7196     CodeManagerTable: IMAGE_DATA_DIRECTORY,
7197     VTableFixups: IMAGE_DATA_DIRECTORY,
7198     ExportAddressTableJumps: IMAGE_DATA_DIRECTORY,
7199     ManagedNativeHeader: IMAGE_DATA_DIRECTORY,
7200 }}
7201 pub type PIMAGE_COR20_HEADER = *mut IMAGE_COR20_HEADER;
7202 extern "system" {
RtlCaptureStackBackTrace( FramesToSkip: DWORD, FramesToCapture: DWORD, BackTrace: *mut PVOID, BackTraceHash: PDWORD, ) -> WORD7203     pub fn RtlCaptureStackBackTrace(
7204         FramesToSkip: DWORD,
7205         FramesToCapture: DWORD,
7206         BackTrace: *mut PVOID,
7207         BackTraceHash: PDWORD,
7208     ) -> WORD;
RtlCaptureContext( ContextRecord: PCONTEXT, )7209     pub fn RtlCaptureContext(
7210         ContextRecord: PCONTEXT,
7211     );
RtlUnwind( TargetFrame: PVOID, TargetIp: PVOID, ExceptionRecord: PEXCEPTION_RECORD, ReturnValue: PVOID, )7212     pub fn RtlUnwind(
7213         TargetFrame: PVOID,
7214         TargetIp: PVOID,
7215         ExceptionRecord: PEXCEPTION_RECORD,
7216         ReturnValue: PVOID,
7217     );
7218 }
7219 #[cfg(target_pointer_width = "64")]
7220 extern "system" {
RtlAddFunctionTable( FunctionTable: PRUNTIME_FUNCTION, EntryCount: DWORD, BaseAddress: DWORD64, ) -> BOOLEAN7221     pub fn RtlAddFunctionTable(
7222         FunctionTable: PRUNTIME_FUNCTION,
7223         EntryCount: DWORD,
7224         BaseAddress: DWORD64,
7225     ) -> BOOLEAN;
RtlDeleteFunctionTable( FunctionTable: PRUNTIME_FUNCTION, ) -> BOOLEAN7226     pub fn RtlDeleteFunctionTable(
7227         FunctionTable: PRUNTIME_FUNCTION,
7228     ) -> BOOLEAN;
RtlInstallFunctionTableCallback( TableIdentifier: DWORD64, BaseAddress: DWORD64, Length: DWORD, Callback: PGET_RUNTIME_FUNCTION_CALLBACK, Context: PVOID, OutOfProcessCallbackDll: PCWSTR, ) -> BOOLEAN7229     pub fn RtlInstallFunctionTableCallback(
7230         TableIdentifier: DWORD64,
7231         BaseAddress: DWORD64,
7232         Length: DWORD,
7233         Callback: PGET_RUNTIME_FUNCTION_CALLBACK,
7234         Context: PVOID,
7235         OutOfProcessCallbackDll: PCWSTR,
7236     ) -> BOOLEAN;
RtlAddGrowableFunctionTable( DynamicTable: *mut PVOID, FunctionTable: PRUNTIME_FUNCTION, EntryCount: DWORD, MaximumEntryCount: DWORD, RangeBase: ULONG_PTR, RangeEnd: ULONG_PTR, ) -> DWORD7237     pub fn RtlAddGrowableFunctionTable(
7238         DynamicTable: *mut PVOID,
7239         FunctionTable: PRUNTIME_FUNCTION,
7240         EntryCount: DWORD,
7241         MaximumEntryCount: DWORD,
7242         RangeBase: ULONG_PTR,
7243         RangeEnd: ULONG_PTR,
7244     ) -> DWORD;
RtlGrowFunctionTable( DynamicTable: PVOID, NewEntryCount: DWORD, )7245     pub fn RtlGrowFunctionTable(
7246         DynamicTable: PVOID,
7247         NewEntryCount: DWORD,
7248     );
RtlDeleteGrowableFunctionTable( DynamicTable: PVOID, )7249     pub fn RtlDeleteGrowableFunctionTable(
7250         DynamicTable: PVOID,
7251     );
RtlLookupFunctionEntry( ControlPc: DWORD64, ImageBase: PDWORD64, HistoryTable: PUNWIND_HISTORY_TABLE, ) -> PRUNTIME_FUNCTION7252     pub fn RtlLookupFunctionEntry(
7253         ControlPc: DWORD64,
7254         ImageBase: PDWORD64,
7255         HistoryTable: PUNWIND_HISTORY_TABLE,
7256     ) -> PRUNTIME_FUNCTION;
7257 }
7258 #[cfg(target_arch = "x86_64")]
7259 IFDEF!{
7260 extern "C" {
7261     pub fn RtlRestoreContext(
7262         ContextRecord: PCONTEXT,
7263         ExceptionRecord: *mut EXCEPTION_RECORD,
7264     );
7265 }
7266 extern "system" {
7267     pub fn RtlUnwindEx(
7268         TargetFrame: PVOID,
7269         TargetIp: PVOID,
7270         ExceptionRecord: PEXCEPTION_RECORD,
7271         ReturnValue: PVOID,
7272         ContextRecord: PCONTEXT,
7273         HistoryTable: PUNWIND_HISTORY_TABLE,
7274     );
7275     pub fn RtlVirtualUnwind(
7276         HandlerType: DWORD,
7277         ImageBase: DWORD64,
7278         ControlPc: DWORD64,
7279         FunctionEntry: PRUNTIME_FUNCTION,
7280         ContextRecord: PCONTEXT,
7281         HandlerData: *mut PVOID,
7282         EstablisherFrame: PDWORD64,
7283         ContextPointers: PKNONVOLATILE_CONTEXT_POINTERS,
7284     ) -> PEXCEPTION_ROUTINE;
7285 }
7286 }
7287 extern "system" {
RtlPcToFileHeader( PcValue: PVOID, BaseOfImage: *mut PVOID, ) -> PVOID7288     pub fn RtlPcToFileHeader(
7289         PcValue: PVOID,
7290         BaseOfImage: *mut PVOID,
7291     ) -> PVOID;
RtlCompareMemory( Source1: *const VOID, Source2: *const VOID, Length: SIZE_T, ) -> SIZE_T7292     pub fn RtlCompareMemory(
7293         Source1: *const VOID,
7294         Source2: *const VOID,
7295         Length: SIZE_T,
7296     ) -> SIZE_T;
7297 }
7298 STRUCT!{struct SLIST_ENTRY {
7299     Next: *mut SLIST_ENTRY,
7300 }}
7301 pub type PSLIST_ENTRY = *mut SLIST_ENTRY;
7302 #[cfg(target_pointer_width = "64")]
7303 IFDEF!{
7304 STRUCT!{struct SLIST_HEADER_s {
7305     Alignment: ULONGLONG,
7306     Region: ULONGLONG,
7307 }}
7308 STRUCT!{struct SLIST_HEADER_HeaderX64 {
7309     BitFields1: ULONGLONG,
7310     BitFields2: ULONGLONG,
7311 }}
7312 BITFIELD!{SLIST_HEADER_HeaderX64 BitFields1: ULONGLONG [
7313     Depth set_Depth[0..16],
7314     Sequence set_Sequence[16..64],
7315 ]}
7316 BITFIELD!{SLIST_HEADER_HeaderX64 BitFields2: ULONGLONG [
7317     Reserved set_Reserved[0..4],
7318     NextEntry set_NextEntry[4..64],
7319 ]}
7320 UNION!{union SLIST_HEADER {
7321     [u64; 2],
7322     s s_mut: SLIST_HEADER_s,
7323     HeaderX64 HeaderX64_mut: SLIST_HEADER_HeaderX64,
7324 }}
7325 pub type PSLIST_HEADER = *mut SLIST_HEADER;
7326 }
7327 #[cfg(target_pointer_width = "32")]
7328 IFDEF!{
7329 STRUCT!{struct SLIST_HEADER_s {
7330     Next: SLIST_ENTRY,
7331     Depth: WORD,
7332     Reserved: WORD,
7333 }}
7334 UNION!{union SLIST_HEADER {
7335     [u64; 1],
7336     Alignment Alignment_mut: ULONGLONG,
7337     s s_mut: SLIST_HEADER_s,
7338 }}
7339 pub type PSLIST_HEADER = *mut SLIST_HEADER;
7340 }
7341 extern "system" {
RtlInitializeSListHead( ListHead: PSLIST_HEADER, )7342     pub fn RtlInitializeSListHead(
7343         ListHead: PSLIST_HEADER,
7344     );
RtlFirstEntrySList( ListHead: *const SLIST_HEADER, ) -> PSLIST_ENTRY7345     pub fn RtlFirstEntrySList(
7346         ListHead: *const SLIST_HEADER,
7347     ) -> PSLIST_ENTRY;
RtlInterlockedPopEntrySList( ListHead: PSLIST_HEADER, ) -> PSLIST_ENTRY7348     pub fn RtlInterlockedPopEntrySList(
7349         ListHead: PSLIST_HEADER,
7350     ) -> PSLIST_ENTRY;
RtlInterlockedPushEntrySList( ListHead: PSLIST_HEADER, ListEntry: PSLIST_ENTRY, ) -> PSLIST_ENTRY7351     pub fn RtlInterlockedPushEntrySList(
7352         ListHead: PSLIST_HEADER,
7353         ListEntry: PSLIST_ENTRY,
7354     ) -> PSLIST_ENTRY;
RtlInterlockedPushListSListEx( ListHead: PSLIST_HEADER, ListEntry: PSLIST_ENTRY, ListEnd: PSLIST_ENTRY, Count: DWORD, ) -> PSLIST_ENTRY7355     pub fn RtlInterlockedPushListSListEx(
7356         ListHead: PSLIST_HEADER,
7357         ListEntry: PSLIST_ENTRY,
7358         ListEnd: PSLIST_ENTRY,
7359         Count: DWORD,
7360     ) -> PSLIST_ENTRY;
RtlInterlockedFlushSList( ListHead: PSLIST_HEADER, ) -> PSLIST_ENTRY7361     pub fn RtlInterlockedFlushSList(
7362         ListHead: PSLIST_HEADER,
7363     ) -> PSLIST_ENTRY;
RtlQueryDepthSList( ListHead: PSLIST_HEADER, ) -> WORD7364     pub fn RtlQueryDepthSList(
7365         ListHead: PSLIST_HEADER,
7366     ) -> WORD;
7367 }
7368 pub const RTL_RUN_ONCE_INIT: RTL_RUN_ONCE = RTL_RUN_ONCE { Ptr: 0 as PVOID };
7369 pub const RTL_RUN_ONCE_CHECK_ONLY: ULONG = 0x00000001;
7370 pub const RTL_RUN_ONCE_ASYNC: ULONG = 0x00000002;
7371 pub const RTL_RUN_ONCE_INIT_FAILED: ULONG = 0x00000004;
7372 STRUCT!{struct RTL_RUN_ONCE {
7373     Ptr: PVOID,
7374 }}
7375 pub type PRTL_RUN_ONCE = *mut RTL_RUN_ONCE;
7376 STRUCT!{struct RTL_BARRIER {
7377     Reserved1: DWORD,
7378     Reserved2: DWORD,
7379     Reserved3: [ULONG_PTR; 2],
7380     Reserved4: DWORD,
7381     Reserved5: DWORD,
7382 }}
7383 pub type PRTL_BARRIER = *mut RTL_BARRIER;
7384 pub const FAST_FAIL_LEGACY_GS_VIOLATION: c_uint = 0;
7385 pub const FAST_FAIL_VTGUARD_CHECK_FAILURE: c_uint = 1;
7386 pub const FAST_FAIL_STACK_COOKIE_CHECK_FAILURE: c_uint = 2;
7387 pub const FAST_FAIL_CORRUPT_LIST_ENTRY: c_uint = 3;
7388 pub const FAST_FAIL_INCORRECT_STACK: c_uint = 4;
7389 pub const FAST_FAIL_INVALID_ARG: c_uint = 5;
7390 pub const FAST_FAIL_GS_COOKIE_INIT: c_uint = 6;
7391 pub const FAST_FAIL_FATAL_APP_EXIT: c_uint = 7;
7392 pub const FAST_FAIL_RANGE_CHECK_FAILURE: c_uint = 8;
7393 pub const FAST_FAIL_UNSAFE_REGISTRY_ACCESS: c_uint = 9;
7394 pub const FAST_FAIL_GUARD_ICALL_CHECK_FAILURE: c_uint = 10;
7395 pub const FAST_FAIL_GUARD_WRITE_CHECK_FAILURE: c_uint = 11;
7396 pub const FAST_FAIL_INVALID_FIBER_SWITCH: c_uint = 12;
7397 pub const FAST_FAIL_INVALID_SET_OF_CONTEXT: c_uint = 13;
7398 pub const FAST_FAIL_INVALID_REFERENCE_COUNT: c_uint = 14;
7399 pub const FAST_FAIL_INVALID_JUMP_BUFFER: c_uint = 18;
7400 pub const FAST_FAIL_MRDATA_MODIFIED: c_uint = 19;
7401 pub const FAST_FAIL_CERTIFICATION_FAILURE: c_uint = 20;
7402 pub const FAST_FAIL_INVALID_EXCEPTION_CHAIN: c_uint = 21;
7403 pub const FAST_FAIL_CRYPTO_LIBRARY: c_uint = 22;
7404 pub const FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT: c_uint = 23;
7405 pub const FAST_FAIL_INVALID_IMAGE_BASE: c_uint = 24;
7406 pub const FAST_FAIL_DLOAD_PROTECTION_FAILURE: c_uint = 25;
7407 pub const FAST_FAIL_UNSAFE_EXTENSION_CALL: c_uint = 26;
7408 pub const FAST_FAIL_DEPRECATED_SERVICE_INVOKED: c_uint = 27;
7409 pub const FAST_FAIL_INVALID_BUFFER_ACCESS: c_uint = 28;
7410 pub const FAST_FAIL_INVALID_BALANCED_TREE: c_uint = 29;
7411 pub const FAST_FAIL_INVALID_NEXT_THREAD: c_uint = 30;
7412 pub const FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED: c_uint = 31;
7413 pub const FAST_FAIL_APCS_DISABLED: c_uint = 32;
7414 pub const FAST_FAIL_INVALID_IDLE_STATE: c_uint = 33;
7415 pub const FAST_FAIL_MRDATA_PROTECTION_FAILURE: c_uint = 34;
7416 pub const FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION: c_uint = 35;
7417 pub const FAST_FAIL_INVALID_LOCK_STATE: c_uint = 36;
7418 pub const FAST_FAIL_GUARD_JUMPTABLE: c_uint = 37;
7419 pub const FAST_FAIL_INVALID_LONGJUMP_TARGET: c_uint = 38;
7420 pub const FAST_FAIL_INVALID_DISPATCH_CONTEXT: c_uint = 39;
7421 pub const FAST_FAIL_INVALID_THREAD: c_uint = 40;
7422 pub const FAST_FAIL_INVALID_SYSCALL_NUMBER: c_uint = 41;
7423 pub const FAST_FAIL_INVALID_FILE_OPERATION: c_uint = 42;
7424 pub const FAST_FAIL_LPAC_ACCESS_DENIED: c_uint = 43;
7425 pub const FAST_FAIL_GUARD_SS_FAILURE: c_uint = 44;
7426 pub const FAST_FAIL_LOADER_CONTINUITY_FAILURE: c_uint = 45;
7427 pub const FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE: c_uint = 46;
7428 pub const FAST_FAIL_INVALID_CONTROL_STACK: c_uint = 47;
7429 pub const FAST_FAIL_SET_CONTEXT_DENIED: c_uint = 48;
7430 pub const FAST_FAIL_INVALID_FAST_FAIL_CODE: c_uint = 0xFFFFFFFF;
7431 pub const HEAP_NO_SERIALIZE: DWORD = 0x00000001;
7432 pub const HEAP_GROWABLE: DWORD = 0x00000002;
7433 pub const HEAP_GENERATE_EXCEPTIONS: DWORD = 0x00000004;
7434 pub const HEAP_ZERO_MEMORY: DWORD = 0x00000008;
7435 pub const HEAP_REALLOC_IN_PLACE_ONLY: DWORD = 0x00000010;
7436 pub const HEAP_TAIL_CHECKING_ENABLED: DWORD = 0x00000020;
7437 pub const HEAP_FREE_CHECKING_ENABLED: DWORD = 0x00000040;
7438 pub const HEAP_DISABLE_COALESCE_ON_FREE: DWORD = 0x00000080;
7439 pub const HEAP_CREATE_ALIGN_16: DWORD = 0x00010000;
7440 pub const HEAP_CREATE_ENABLE_TRACING: DWORD = 0x00020000;
7441 pub const HEAP_CREATE_ENABLE_EXECUTE: DWORD = 0x00040000;
7442 pub const HEAP_MAXIMUM_TAG: DWORD = 0x0FFF;
7443 pub const HEAP_PSEUDO_TAG_FLAG: DWORD = 0x8000;
7444 pub const HEAP_TAG_SHIFT: usize = 18;
7445 pub const HEAP_CREATE_SEGMENT_HEAP: DWORD = 0x00000100;
7446 pub const HEAP_CREATE_HARDENED: DWORD = 0x00000200;
7447 #[inline]
HEAP_MAKE_TAG_FLAGS(TagBase: DWORD, Tag: DWORD) -> DWORD7448 pub fn HEAP_MAKE_TAG_FLAGS(TagBase: DWORD, Tag: DWORD) -> DWORD {
7449     TagBase + (Tag << HEAP_TAG_SHIFT)
7450 }
7451 pub const IS_TEXT_UNICODE_ASCII16: INT = 0x0001;
7452 pub const IS_TEXT_UNICODE_REVERSE_ASCII16: INT = 0x0010;
7453 pub const IS_TEXT_UNICODE_STATISTICS: INT = 0x0002;
7454 pub const IS_TEXT_UNICODE_REVERSE_STATISTICS: INT = 0x0020;
7455 pub const IS_TEXT_UNICODE_CONTROLS: INT = 0x0004;
7456 pub const IS_TEXT_UNICODE_REVERSE_CONTROLS: INT = 0x0040;
7457 pub const IS_TEXT_UNICODE_SIGNATURE: INT = 0x0008;
7458 pub const IS_TEXT_UNICODE_REVERSE_SIGNATURE: INT = 0x0080;
7459 pub const IS_TEXT_UNICODE_ILLEGAL_CHARS: INT = 0x0100;
7460 pub const IS_TEXT_UNICODE_ODD_LENGTH: INT = 0x0200;
7461 pub const IS_TEXT_UNICODE_DBCS_LEADBYTE: INT = 0x0400;
7462 pub const IS_TEXT_UNICODE_NULL_BYTES: INT = 0x1000;
7463 pub const IS_TEXT_UNICODE_UNICODE_MASK: INT = 0x000F;
7464 pub const IS_TEXT_UNICODE_REVERSE_MASK: INT = 0x00F0;
7465 pub const IS_TEXT_UNICODE_NOT_UNICODE_MASK: INT = 0x0F00;
7466 pub const IS_TEXT_UNICODE_NOT_ASCII_MASK: INT = 0xF000;
7467 pub const COMPRESSION_FORMAT_NONE: USHORT = 0x0000;
7468 pub const COMPRESSION_FORMAT_DEFAULT: USHORT = 0x0001;
7469 pub const COMPRESSION_FORMAT_LZNT1: USHORT = 0x0002;
7470 pub const COMPRESSION_FORMAT_XPRESS: USHORT = 0x0003;
7471 pub const COMPRESSION_FORMAT_XPRESS_HUFF: USHORT = 0x0004;
7472 pub const COMPRESSION_ENGINE_STANDARD: USHORT = 0x0000;
7473 pub const COMPRESSION_ENGINE_MAXIMUM: USHORT = 0x0100;
7474 pub const COMPRESSION_ENGINE_HIBER: USHORT = 0x0200;
7475 // RtlEqualMemory
7476 #[inline]
RtlMoveMemory(Destination: *mut c_void, Source: *const c_void, Length: usize)7477 pub unsafe fn RtlMoveMemory(Destination: *mut c_void, Source: *const c_void, Length: usize) {
7478     use core::ptr::copy;
7479     copy(Source as *const u8, Destination as *mut u8, Length);
7480 }
7481 #[inline]
RtlCopyMemory(Destination: *mut c_void, Source: *const c_void, Length: usize)7482 pub unsafe fn RtlCopyMemory(Destination: *mut c_void, Source: *const c_void, Length: usize) {
7483     use core::ptr::copy_nonoverlapping;
7484     copy_nonoverlapping(Source as *const u8, Destination as *mut u8, Length);
7485 }
7486 #[inline]
RtlFillMemory(Destination: *mut c_void, Length: usize, Fill: u8)7487 pub unsafe fn RtlFillMemory(Destination: *mut c_void, Length: usize, Fill: u8) {
7488     use core::ptr::write_bytes;
7489     write_bytes(Destination as *mut u8, Fill, Length);
7490 }
7491 #[inline]
RtlZeroMemory(Destination: *mut c_void, Length: usize)7492 pub unsafe fn RtlZeroMemory(Destination: *mut c_void, Length: usize) {
7493     use core::ptr::write_bytes;
7494     write_bytes(Destination as *mut u8, 0, Length);
7495 }
7496 pub const SEF_DACL_AUTO_INHERIT: ULONG = 0x01;
7497 pub const SEF_SACL_AUTO_INHERIT: ULONG = 0x02;
7498 pub const SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT: ULONG = 0x04;
7499 pub const SEF_AVOID_PRIVILEGE_CHECK: ULONG = 0x08;
7500 pub const SEF_AVOID_OWNER_CHECK: ULONG = 0x10;
7501 pub const SEF_DEFAULT_OWNER_FROM_PARENT: ULONG = 0x20;
7502 pub const SEF_DEFAULT_GROUP_FROM_PARENT: ULONG = 0x40;
7503 pub const SEF_MACL_NO_WRITE_UP: ULONG = 0x100;
7504 pub const SEF_MACL_NO_READ_UP: ULONG = 0x200;
7505 pub const SEF_MACL_NO_EXECUTE_UP: ULONG = 0x400;
7506 pub const SEF_AI_USE_EXTRA_PARAMS: ULONG = 0x800;
7507 pub const SEF_AVOID_OWNER_RESTRICTION: ULONG = 0x1000;
7508 pub const SEF_MACL_VALID_FLAGS: ULONG = SEF_MACL_NO_WRITE_UP | SEF_MACL_NO_READ_UP
7509     | SEF_MACL_NO_EXECUTE_UP;
7510 STRUCT!{struct MESSAGE_RESOURCE_ENTRY {
7511     Length: WORD,
7512     Flags: WORD,
7513     Text: [BYTE; 1],
7514 }}
7515 pub type PMESSAGE_RESOURCE_ENTRY = *mut MESSAGE_RESOURCE_ENTRY;
7516 pub const MESSAGE_RESOURCE_UNICODE: WORD = 0x0001;
7517 STRUCT!{struct MESSAGE_RESOURCE_BLOCK {
7518     LowId: DWORD,
7519     HighId: DWORD,
7520     OffsetToEntries: DWORD,
7521 }}
7522 pub type PMESSAGE_RESOURCE_BLOCK = *mut MESSAGE_RESOURCE_BLOCK;
7523 STRUCT!{struct MESSAGE_RESOURCE_DATA {
7524     NumberOfBlocks: DWORD,
7525     Blocks: [MESSAGE_RESOURCE_BLOCK; 1],
7526 }}
7527 pub type PMESSAGE_RESOURCE_DATA = *mut MESSAGE_RESOURCE_DATA;
7528 STRUCT!{struct OSVERSIONINFOA {
7529     dwOSVersionInfoSize: DWORD,
7530     dwMajorVersion: DWORD,
7531     dwMinorVersion: DWORD,
7532     dwBuildNumber: DWORD,
7533     dwPlatformId: DWORD,
7534     szCSDVersion: [CHAR; 128],
7535 }}
7536 pub type POSVERSIONINFOA = *mut OSVERSIONINFOA;
7537 pub type LPOSVERSIONINFOA = *mut OSVERSIONINFOA;
7538 STRUCT!{struct OSVERSIONINFOW {
7539     dwOSVersionInfoSize: DWORD,
7540     dwMajorVersion: DWORD,
7541     dwMinorVersion: DWORD,
7542     dwBuildNumber: DWORD,
7543     dwPlatformId: DWORD,
7544     szCSDVersion: [WCHAR; 128],
7545 }}
7546 pub type POSVERSIONINFOW = *mut OSVERSIONINFOW;
7547 pub type LPOSVERSIONINFOW = *mut OSVERSIONINFOW;
7548 pub type RTL_OSVERSIONINFOW = OSVERSIONINFOW;
7549 pub type PRTL_OSVERSIONINFOW = *mut OSVERSIONINFOW;
7550 STRUCT!{struct OSVERSIONINFOEXA {
7551     dwOSVersionInfoSize: DWORD,
7552     dwMajorVersion: DWORD,
7553     dwMinorVersion: DWORD,
7554     dwBuildNumber: DWORD,
7555     dwPlatformId: DWORD,
7556     szCSDVersion: [CHAR; 128],
7557     wServicePackMajor: WORD,
7558     wServicePackMinor: WORD,
7559     wSuiteMask: WORD,
7560     wProductType: BYTE,
7561     wReserved: BYTE,
7562 }}
7563 pub type POSVERSIONINFOEXA = *mut OSVERSIONINFOEXA;
7564 pub type LPOSVERSIONINFOEXA = *mut OSVERSIONINFOEXA;
7565 STRUCT!{struct OSVERSIONINFOEXW {
7566     dwOSVersionInfoSize: DWORD,
7567     dwMajorVersion: DWORD,
7568     dwMinorVersion: DWORD,
7569     dwBuildNumber: DWORD,
7570     dwPlatformId: DWORD,
7571     szCSDVersion: [WCHAR; 128],
7572     wServicePackMajor: WORD,
7573     wServicePackMinor: WORD,
7574     wSuiteMask: WORD,
7575     wProductType: BYTE,
7576     wReserved: BYTE,
7577 }}
7578 pub type POSVERSIONINFOEXW = *mut OSVERSIONINFOEXW;
7579 pub type LPOSVERSIONINFOEXW = *mut OSVERSIONINFOEXW;
7580 pub type RTL_OSVERSIONINFOEXW = OSVERSIONINFOEXW;
7581 pub type PRTL_OSVERSIONINFOEXW = *mut OSVERSIONINFOEXW;
7582 pub const VER_EQUAL: BYTE = 1;
7583 pub const VER_GREATER: BYTE = 2;
7584 pub const VER_GREATER_EQUAL: BYTE = 3;
7585 pub const VER_LESS: BYTE = 4;
7586 pub const VER_LESS_EQUAL: BYTE = 5;
7587 pub const VER_AND: BYTE = 6;
7588 pub const VER_OR: BYTE = 7;
7589 pub const VER_CONDITION_MASK: BYTE = 7;
7590 pub const VER_NUM_BITS_PER_CONDITION_MASK: BYTE = 3;
7591 pub const VER_MINORVERSION: DWORD = 0x0000001;
7592 pub const VER_MAJORVERSION: DWORD = 0x0000002;
7593 pub const VER_BUILDNUMBER: DWORD = 0x0000004;
7594 pub const VER_PLATFORMID: DWORD = 0x0000008;
7595 pub const VER_SERVICEPACKMINOR: DWORD = 0x0000010;
7596 pub const VER_SERVICEPACKMAJOR: DWORD = 0x0000020;
7597 pub const VER_SUITENAME: DWORD = 0x0000040;
7598 pub const VER_PRODUCT_TYPE: DWORD = 0x0000080;
7599 pub const VER_NT_WORKSTATION: BYTE = 0x0000001;
7600 pub const VER_NT_DOMAIN_CONTROLLER: BYTE = 0x0000002;
7601 pub const VER_NT_SERVER: BYTE = 0x0000003;
7602 pub const VER_PLATFORM_WIN32s: DWORD = 0;
7603 pub const VER_PLATFORM_WIN32_WINDOWS: DWORD = 1;
7604 pub const VER_PLATFORM_WIN32_NT: DWORD = 2;
7605 extern "system" {
VerSetConditionMask( ConditionMask: ULONGLONG, TypeMask: DWORD, Condition: BYTE, ) -> ULONGLONG7606     pub fn VerSetConditionMask(
7607         ConditionMask: ULONGLONG,
7608         TypeMask: DWORD,
7609         Condition: BYTE,
7610     ) -> ULONGLONG;
RtlGetProductInfo( OSMajorVersion: DWORD, OSMinorVersion: DWORD, SpMajorVersion: DWORD, SpMinorVersion: DWORD, ReturnedProductType: PDWORD, ) -> BOOLEAN7611     pub fn RtlGetProductInfo(
7612         OSMajorVersion: DWORD,
7613         OSMinorVersion: DWORD,
7614         SpMajorVersion: DWORD,
7615         SpMinorVersion: DWORD,
7616         ReturnedProductType: PDWORD,
7617     ) -> BOOLEAN;
7618 }
7619 pub const RTL_UMS_VERSION: DWORD = 0x100;
7620 ENUM!{enum RTL_UMS_THREAD_INFO_CLASS {
7621     UmsThreadInvalidInfoClass = 0,
7622     UmsThreadUserContext,
7623     UmsThreadPriority,
7624     UmsThreadAffinity,
7625     UmsThreadTeb,
7626     UmsThreadIsSuspended,
7627     UmsThreadIsTerminated,
7628     UmsThreadMaxInfoClass,
7629 }}
7630 ENUM!{enum RTL_UMS_SCHEDULER_REASON {
7631     UmsSchedulerStartup = 0,
7632     UmsSchedulerThreadBlocked,
7633     UmsSchedulerThreadYield,
7634 }}
7635 FN!{stdcall PRTL_UMS_SCHEDULER_ENTRY_POINT(
7636     Reason: RTL_UMS_SCHEDULER_REASON,
7637     ActivationPayload: ULONG_PTR,
7638     SchedulerParam: PVOID,
7639 ) -> ()}
7640 #[inline]
IS_VALIDATION_ENABLED(C: DWORD, L: DWORD) -> bool7641 pub fn IS_VALIDATION_ENABLED(C: DWORD, L: DWORD) -> bool {
7642     (L & C) != 0
7643 }
7644 pub const VRL_PREDEFINED_CLASS_BEGIN: DWORD = 1 << 0;
7645 pub const VRL_CUSTOM_CLASS_BEGIN: DWORD = 1 << 8;
7646 pub const VRL_CLASS_CONSISTENCY: DWORD = VRL_CUSTOM_CLASS_BEGIN << 8;
7647 pub const VRL_ENABLE_KERNEL_BREAKS: DWORD = 1 << 31;
7648 pub const CTMF_INCLUDE_APPCONTAINER: ULONG = 0x00000001;
7649 pub const CTMF_INCLUDE_LPAC: ULONG = 0x00000002;
7650 pub const CTMF_VALID_FLAGS: ULONG = CTMF_INCLUDE_APPCONTAINER | CTMF_INCLUDE_LPAC;
7651 extern "system" {
RtlCrc32( Buffer: *const c_void, Size: size_t, InitialCrc: DWORD, ) -> DWORD7652     pub fn RtlCrc32(
7653         Buffer: *const c_void,
7654         Size: size_t,
7655         InitialCrc: DWORD,
7656     ) -> DWORD;
RtlCrc64( Buffer: *const c_void, Size: size_t, InitialCrc: ULONGLONG, ) -> ULONGLONG7657     pub fn RtlCrc64(
7658         Buffer: *const c_void,
7659         Size: size_t,
7660         InitialCrc: ULONGLONG,
7661     ) -> ULONGLONG;
7662 }
7663 ENUM!{enum OS_DEPLOYEMENT_STATE_VALUES {
7664     OS_DEPLOYMENT_STANDARD = 1,
7665     OS_DEPLOYMENT_COMPACT,
7666 }}
7667 extern "system" {
RtlOsDeploymentState( Flags: DWORD, ) -> OS_DEPLOYEMENT_STATE_VALUES7668     pub fn RtlOsDeploymentState(
7669         Flags: DWORD,
7670     ) -> OS_DEPLOYEMENT_STATE_VALUES;
7671 }
7672 #[cfg(target_arch = "x86_64")]
7673 IFDEF!{
7674 STRUCT!{struct NV_MEMORY_RANGE {
7675     BaseAddress: *mut VOID,
7676     Length: SIZE_T,
7677 }}
7678 pub type PNV_MEMORY_RANGE = *mut NV_MEMORY_RANGE;
7679 pub const FLUSH_NV_MEMORY_IN_FLAG_NO_DRAIN: ULONG = 0x00000001;
7680 pub const FLUSH_NV_MEMORY_DEFAULT_TOKEN: ULONG_PTR = -1isize as usize;
7681 }
7682 STRUCT!{struct RTL_CRITICAL_SECTION_DEBUG {
7683     Type: WORD,
7684     CreatorBackTraceIndex: WORD,
7685     CriticalSection: *mut RTL_CRITICAL_SECTION,
7686     ProcessLocksList: LIST_ENTRY,
7687     EntryCount: DWORD,
7688     ContentionCount: DWORD,
7689     Flags: DWORD,
7690     CreatorBackTraceIndexHigh: WORD,
7691     SpareWORD: WORD,
7692 }}
7693 pub type PRTL_CRITICAL_SECTION_DEBUG = *mut RTL_CRITICAL_SECTION_DEBUG;
7694 pub type RTL_RESOURCE_DEBUG = RTL_CRITICAL_SECTION_DEBUG;
7695 pub type PRTL_RESOURCE_DEBUG = *mut RTL_CRITICAL_SECTION_DEBUG;
7696 pub const RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO: ULONG_PTR = 0x01000000;
7697 pub const RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN: ULONG_PTR = 0x02000000;
7698 pub const RTL_CRITICAL_SECTION_FLAG_STATIC_INIT: ULONG_PTR = 0x04000000;
7699 pub const RTL_CRITICAL_SECTION_FLAG_RESOURCE_TYPE: ULONG_PTR = 0x08000000;
7700 pub const RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO: ULONG_PTR = 0x10000000;
7701 pub const RTL_CRITICAL_SECTION_ALL_FLAG_BITS: ULONG_PTR = 0xFF000000;
7702 pub const RTL_CRITICAL_SECTION_FLAG_RESERVED: ULONG_PTR = RTL_CRITICAL_SECTION_ALL_FLAG_BITS
7703     & !(RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO | RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN
7704         | RTL_CRITICAL_SECTION_FLAG_STATIC_INIT | RTL_CRITICAL_SECTION_FLAG_RESOURCE_TYPE
7705         | RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO);
7706 pub const RTL_CRITICAL_SECTION_DEBUG_FLAG_STATIC_INIT: DWORD = 0x00000001;
7707 STRUCT!{struct RTL_CRITICAL_SECTION {
7708     DebugInfo: PRTL_CRITICAL_SECTION_DEBUG,
7709     LockCount: LONG,
7710     RecursionCount: LONG,
7711     OwningThread: HANDLE,
7712     LockSemaphore: HANDLE,
7713     SpinCount: ULONG_PTR,
7714 }}
7715 pub type PRTL_CRITICAL_SECTION = *mut RTL_CRITICAL_SECTION;
7716 STRUCT!{struct RTL_SRWLOCK {
7717     Ptr: PVOID,
7718 }}
7719 pub type PRTL_SRWLOCK = *mut RTL_SRWLOCK;
7720 pub const RTL_SRWLOCK_INIT: RTL_SRWLOCK = RTL_SRWLOCK { Ptr: 0 as PVOID };
7721 STRUCT!{struct RTL_CONDITION_VARIABLE {
7722     Ptr: PVOID,
7723 }}
7724 pub type PRTL_CONDITION_VARIABLE = *mut RTL_CONDITION_VARIABLE;
7725 pub const RTL_CONDITION_VARIABLE_INIT: RTL_CONDITION_VARIABLE = RTL_CONDITION_VARIABLE {
7726     Ptr: 0 as PVOID,
7727 };
7728 pub const RTL_CONDITION_VARIABLE_LOCKMODE_SHARED: DWORD = 0x1;
7729 FN!{stdcall PAPCFUNC(
7730     Parameter: ULONG_PTR,
7731 ) -> ()}
7732 FN!{stdcall PVECTORED_EXCEPTION_HANDLER(
7733     ExceptionInfo: *mut EXCEPTION_POINTERS,
7734 ) -> LONG}
7735 ENUM!{enum HEAP_INFORMATION_CLASS {
7736     HeapCompatibilityInformation = 0,
7737     HeapEnableTerminationOnCorruption = 1,
7738     HeapOptimizeResources = 3,
7739 }}
7740 pub const HEAP_OPTIMIZE_RESOURCES_CURRENT_VERSION: DWORD = 1;
7741 STRUCT!{struct HEAP_OPTIMIZE_RESOURCES_INFORMATION {
7742     Version: DWORD,
7743     Flags: DWORD,
7744 }}
7745 pub type PHEAP_OPTIMIZE_RESOURCES_INFORMATION = *mut HEAP_OPTIMIZE_RESOURCES_INFORMATION;
7746 pub const WT_EXECUTEDEFAULT: ULONG = 0x00000000;
7747 pub const WT_EXECUTEINIOTHREAD: ULONG = 0x00000001;
7748 pub const WT_EXECUTEINUITHREAD: ULONG = 0x00000002;
7749 pub const WT_EXECUTEINWAITTHREAD: ULONG = 0x00000004;
7750 pub const WT_EXECUTEONLYONCE: ULONG = 0x00000008;
7751 pub const WT_EXECUTEINTIMERTHREAD: ULONG = 0x00000020;
7752 pub const WT_EXECUTELONGFUNCTION: ULONG = 0x00000010;
7753 pub const WT_EXECUTEINPERSISTENTIOTHREAD: ULONG = 0x00000040;
7754 pub const WT_EXECUTEINPERSISTENTTHREAD: ULONG = 0x00000080;
7755 pub const WT_TRANSFER_IMPERSONATION: ULONG = 0x00000100;
7756 #[inline]
WT_SET_MAX_THREADPOOL_THREADS(Flags: ULONG, Limit: ULONG) -> ULONG7757 pub fn WT_SET_MAX_THREADPOOL_THREADS(Flags: ULONG, Limit: ULONG) -> ULONG {
7758     Flags | (Limit << 16)
7759 }
7760 FN!{stdcall WAITORTIMERCALLBACKFUNC(
7761     PVOID,
7762     BOOLEAN,
7763 ) -> ()}
7764 FN!{stdcall WORKERCALLBACKFUNC(
7765     PVOID,
7766 ) -> ()}
7767 FN!{stdcall APC_CALLBACK_FUNCTION(
7768     DWORD,
7769     PVOID,
7770     PVOID,
7771 ) -> ()}
7772 pub type WAITORTIMERCALLBACK = WAITORTIMERCALLBACKFUNC;
7773 FN!{stdcall PFLS_CALLBACK_FUNCTION(
7774     lpFlsData: PVOID,
7775 ) -> ()}
7776 FN!{stdcall PSECURE_MEMORY_CACHE_CALLBACK(
7777     Addr: PVOID,
7778     Range: SIZE_T,
7779 ) -> BOOLEAN}
7780 pub const WT_EXECUTEINLONGTHREAD: ULONG = 0x00000010;
7781 pub const WT_EXECUTEDELETEWAIT: ULONG = 0x00000008;
7782 ENUM!{enum ACTIVATION_CONTEXT_INFO_CLASS {
7783     ActivationContextBasicInformation = 1,
7784     ActivationContextDetailedInformation = 2,
7785     AssemblyDetailedInformationInActivationContext = 3,
7786     FileInformationInAssemblyOfAssemblyInActivationContext = 4,
7787     RunlevelInformationInActivationContext = 5,
7788     CompatibilityInformationInActivationContext = 6,
7789     ActivationContextManifestResourceName = 7,
7790     MaxActivationContextInfoClass,
7791     AssemblyDetailedInformationInActivationContxt = 3,
7792     FileInformationInAssemblyOfAssemblyInActivationContxt = 4,
7793 }}
7794 pub type ACTIVATIONCONTEXTINFOCLASS = ACTIVATION_CONTEXT_INFO_CLASS;
7795 STRUCT!{struct ACTIVATION_CONTEXT_QUERY_INDEX {
7796     ulAssemblyIndex: DWORD,
7797     ulFileIndexInAssembly: DWORD,
7798 }}
7799 pub type PACTIVATION_CONTEXT_QUERY_INDEX = *mut ACTIVATION_CONTEXT_QUERY_INDEX;
7800 pub type PCACTIVATION_CONTEXT_QUERY_INDEX = *const ACTIVATION_CONTEXT_QUERY_INDEX;
7801 pub const ACTIVATION_CONTEXT_PATH_TYPE_NONE: DWORD = 1;
7802 pub const ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE: DWORD = 2;
7803 pub const ACTIVATION_CONTEXT_PATH_TYPE_URL: DWORD = 3;
7804 pub const ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF: DWORD = 4;
7805 STRUCT!{struct ASSEMBLY_FILE_DETAILED_INFORMATION {
7806     ulFlags: DWORD,
7807     ulFilenameLength: DWORD,
7808     ulPathLength: DWORD,
7809     lpFileName: PCWSTR,
7810     lpFilePath: PCWSTR,
7811 }}
7812 pub type PASSEMBLY_FILE_DETAILED_INFORMATION = *mut ASSEMBLY_FILE_DETAILED_INFORMATION;
7813 pub type PCASSEMBLY_FILE_DETAILED_INFORMATION = *const ASSEMBLY_FILE_DETAILED_INFORMATION;
7814 pub type ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = ASSEMBLY_FILE_DETAILED_INFORMATION;
7815 pub type PASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = PASSEMBLY_FILE_DETAILED_INFORMATION;
7816 pub type PCASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = PCASSEMBLY_FILE_DETAILED_INFORMATION;
7817 STRUCT!{struct ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
7818     ulFlags: DWORD,
7819     ulEncodedAssemblyIdentityLength: DWORD,
7820     ulManifestPathType: DWORD,
7821     ulManifestPathLength: DWORD,
7822     liManifestLastWriteTime: LARGE_INTEGER,
7823     ulPolicyPathType: DWORD,
7824     ulPolicyPathLength: DWORD,
7825     liPolicyLastWriteTime: LARGE_INTEGER,
7826     ulMetadataSatelliteRosterIndex: DWORD,
7827     ulManifestVersionMajor: DWORD,
7828     ulManifestVersionMinor: DWORD,
7829     ulPolicyVersionMajor: DWORD,
7830     ulPolicyVersionMinor: DWORD,
7831     ulAssemblyDirectoryNameLength: DWORD,
7832     lpAssemblyEncodedAssemblyIdentity: PCWSTR,
7833     lpAssemblyManifestPath: PCWSTR,
7834     lpAssemblyPolicyPath: PCWSTR,
7835     lpAssemblyDirectoryName: PCWSTR,
7836     ulFileCount: DWORD,
7837 }}
7838 pub type PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
7839     = *mut ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
7840 pub type PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
7841     = *const ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
7842 ENUM!{enum ACTCTX_REQUESTED_RUN_LEVEL {
7843     ACTCTX_RUN_LEVEL_UNSPECIFIED = 0,
7844     ACTCTX_RUN_LEVEL_AS_INVOKER,
7845     ACTCTX_RUN_LEVEL_HIGHEST_AVAILABLE,
7846     ACTCTX_RUN_LEVEL_REQUIRE_ADMIN,
7847     ACTCTX_RUN_LEVEL_NUMBERS,
7848 }}
7849 STRUCT!{struct ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION {
7850     ulFlags: DWORD,
7851     RunLevel: ACTCTX_REQUESTED_RUN_LEVEL,
7852     UiAccess: DWORD,
7853 }}
7854 pub type PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION = *mut ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION;
7855 pub type PCACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
7856     = *const ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION;
7857 ENUM!{enum ACTCTX_COMPATIBILITY_ELEMENT_TYPE {
7858     ACTCTX_COMPATIBILITY_ELEMENT_TYPE_UNKNOWN = 0,
7859     ACTCTX_COMPATIBILITY_ELEMENT_TYPE_OS,
7860     ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MITIGATION,
7861 }}
7862 STRUCT!{struct COMPATIBILITY_CONTEXT_ELEMENT {
7863     Id: GUID,
7864     Type: ACTCTX_COMPATIBILITY_ELEMENT_TYPE,
7865 }}
7866 pub type PCOMPATIBILITY_CONTEXT_ELEMENT = *mut COMPATIBILITY_CONTEXT_ELEMENT;
7867 pub type PCCOMPATIBILITY_CONTEXT_ELEMENT = *const COMPATIBILITY_CONTEXT_ELEMENT;
7868 STRUCT!{struct ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION {
7869     ElementCount: DWORD,
7870     Elements: [COMPATIBILITY_CONTEXT_ELEMENT; 0],
7871 }}
7872 pub type PACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
7873     = *mut ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION;
7874 pub type PCACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
7875     = *const ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION;
7876 STRUCT!{struct SUPPORTED_OS_INFO {
7877     MajorVersion: WORD,
7878     MinorVersion: WORD,
7879 }}
7880 pub type PSUPPORTED_OS_INFO = *mut SUPPORTED_OS_INFO;
7881 STRUCT!{struct ACTIVATION_CONTEXT_DETAILED_INFORMATION {
7882     dwFlags: DWORD,
7883     ulFormatVersion: DWORD,
7884     ulAssemblyCount: DWORD,
7885     ulRootManifestPathType: DWORD,
7886     ulRootManifestPathChars: DWORD,
7887     ulRootConfigurationPathType: DWORD,
7888     ulRootConfigurationPathChars: DWORD,
7889     ulAppDirPathType: DWORD,
7890     ulAppDirPathChars: DWORD,
7891     lpRootManifestPath: PCWSTR,
7892     lpRootConfigurationPath: PCWSTR,
7893     lpAppDirPath: PCWSTR,
7894 }}
7895 pub type PACTIVATION_CONTEXT_DETAILED_INFORMATION = *mut ACTIVATION_CONTEXT_DETAILED_INFORMATION;
7896 pub type PCACTIVATION_CONTEXT_DETAILED_INFORMATION
7897     = *const ACTIVATION_CONTEXT_DETAILED_INFORMATION;
7898 pub const CREATE_BOUNDARY_DESCRIPTOR_ADD_APPCONTAINER_SID: DWORD = 0x1;
7899 STRUCT!{struct HARDWARE_COUNTER_DATA {
7900     Type: HARDWARE_COUNTER_TYPE,
7901     Reserved: DWORD,
7902     Value: DWORD64,
7903 }}
7904 pub type PHARDWARE_COUNTER_DATA = *mut HARDWARE_COUNTER_DATA;
7905 pub const PERFORMANCE_DATA_VERSION: BYTE = 1;
7906 STRUCT!{struct PERFORMANCE_DATA {
7907     Size: WORD,
7908     Version: BYTE,
7909     HwCountersCount: BYTE,
7910     ContextSwitchCount: DWORD,
7911     WaitReasonBitMap: DWORD64,
7912     CycleTime: DWORD64,
7913     RetryCount: DWORD,
7914     Reserved: DWORD,
7915     HwCounters: [HARDWARE_COUNTER_DATA; MAX_HW_COUNTERS],
7916 }}
7917 pub type PPERFORMANCE_DATA = *mut PERFORMANCE_DATA;
7918 pub const READ_THREAD_PROFILING_FLAG_DISPATCHING: DWORD = 0x00000001;
7919 pub const READ_THREAD_PROFILING_FLAG_HARDWARE_COUNTERS: DWORD = 0x00000002;
7920 pub const UNIFIEDBUILDREVISION_KEY: &'static str
7921     = "\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion";
7922 pub const UNIFIEDBUILDREVISION_VALUE: &'static str = "UBR";
7923 pub const UNIFIEDBUILDREVISION_MIN: DWORD = 0x00000000;
7924 pub const DEVICEFAMILYDEVICEFORM_KEY: &'static str
7925     = "\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\OEM";
7926 pub const DEVICEFAMILYDEVICEFORM_VALUE: &'static str = "DeviceForm";
7927 pub const DEVICEFAMILYINFOENUM_UAP: DWORD = 0x00000000;
7928 pub const DEVICEFAMILYINFOENUM_WINDOWS_8X: DWORD = 0x00000001;
7929 pub const DEVICEFAMILYINFOENUM_WINDOWS_PHONE_8X: DWORD = 0x00000002;
7930 pub const DEVICEFAMILYINFOENUM_DESKTOP: DWORD = 0x00000003;
7931 pub const DEVICEFAMILYINFOENUM_MOBILE: DWORD = 0x00000004;
7932 pub const DEVICEFAMILYINFOENUM_XBOX: DWORD = 0x00000005;
7933 pub const DEVICEFAMILYINFOENUM_TEAM: DWORD = 0x00000006;
7934 pub const DEVICEFAMILYINFOENUM_IOT: DWORD = 0x00000007;
7935 pub const DEVICEFAMILYINFOENUM_IOT_HEADLESS: DWORD = 0x00000008;
7936 pub const DEVICEFAMILYINFOENUM_SERVER: DWORD = 0x00000009;
7937 pub const DEVICEFAMILYINFOENUM_HOLOGRAPHIC: DWORD = 0x0000000A;
7938 pub const DEVICEFAMILYINFOENUM_XBOXSRA: DWORD = 0x0000000B;
7939 pub const DEVICEFAMILYINFOENUM_XBOXERA: DWORD = 0x0000000C;
7940 pub const DEVICEFAMILYINFOENUM_SERVER_NANO: DWORD = 0x0000000D;
7941 pub const DEVICEFAMILYINFOENUM_MAX: DWORD = 0x0000000D;
7942 pub const DEVICEFAMILYDEVICEFORM_UNKNOWN: DWORD = 0x00000000;
7943 pub const DEVICEFAMILYDEVICEFORM_PHONE: DWORD = 0x00000001;
7944 pub const DEVICEFAMILYDEVICEFORM_TABLET: DWORD = 0x00000002;
7945 pub const DEVICEFAMILYDEVICEFORM_DESKTOP: DWORD = 0x00000003;
7946 pub const DEVICEFAMILYDEVICEFORM_NOTEBOOK: DWORD = 0x00000004;
7947 pub const DEVICEFAMILYDEVICEFORM_CONVERTIBLE: DWORD = 0x00000005;
7948 pub const DEVICEFAMILYDEVICEFORM_DETACHABLE: DWORD = 0x00000006;
7949 pub const DEVICEFAMILYDEVICEFORM_ALLINONE: DWORD = 0x00000007;
7950 pub const DEVICEFAMILYDEVICEFORM_STICKPC: DWORD = 0x00000008;
7951 pub const DEVICEFAMILYDEVICEFORM_PUCK: DWORD = 0x00000009;
7952 pub const DEVICEFAMILYDEVICEFORM_LARGESCREEN: DWORD = 0x0000000A;
7953 pub const DEVICEFAMILYDEVICEFORM_HMD: DWORD = 0x0000000B;
7954 pub const DEVICEFAMILYDEVICEFORM_INDUSTRY_HANDHELD: DWORD = 0x0000000C;
7955 pub const DEVICEFAMILYDEVICEFORM_INDUSTRY_TABLET: DWORD = 0x0000000D;
7956 pub const DEVICEFAMILYDEVICEFORM_BANKING: DWORD = 0x0000000E;
7957 pub const DEVICEFAMILYDEVICEFORM_BUILDING_AUTOMATION: DWORD = 0x0000000F;
7958 pub const DEVICEFAMILYDEVICEFORM_DIGITAL_SIGNAGE: DWORD = 0x00000010;
7959 pub const DEVICEFAMILYDEVICEFORM_GAMING: DWORD = 0x00000011;
7960 pub const DEVICEFAMILYDEVICEFORM_HOME_AUTOMATION: DWORD = 0x00000012;
7961 pub const DEVICEFAMILYDEVICEFORM_INDUSTRIAL_AUTOMATION: DWORD = 0x00000013;
7962 pub const DEVICEFAMILYDEVICEFORM_KIOSK: DWORD = 0x00000014;
7963 pub const DEVICEFAMILYDEVICEFORM_MAKER_BOARD: DWORD = 0x00000015;
7964 pub const DEVICEFAMILYDEVICEFORM_MEDICAL: DWORD = 0x00000016;
7965 pub const DEVICEFAMILYDEVICEFORM_NETWORKING: DWORD = 0x00000017;
7966 pub const DEVICEFAMILYDEVICEFORM_POINT_OF_SERVICE: DWORD = 0x00000018;
7967 pub const DEVICEFAMILYDEVICEFORM_PRINTING: DWORD = 0x00000019;
7968 pub const DEVICEFAMILYDEVICEFORM_THIN_CLIENT: DWORD = 0x0000001A;
7969 pub const DEVICEFAMILYDEVICEFORM_TOY: DWORD = 0x0000001B;
7970 pub const DEVICEFAMILYDEVICEFORM_VENDING: DWORD = 0x0000001C;
7971 pub const DEVICEFAMILYDEVICEFORM_INDUSTRY_OTHER: DWORD = 0x0000001D;
7972 pub const DEVICEFAMILYDEVICEFORM_MAX: DWORD = 0x0000001D;
7973 extern "system" {
RtlGetDeviceFamilyInfoEnum( pullUAPInfo: *mut ULONGLONG, pulDeviceFamily: *mut DWORD, pulDeviceForm: *mut DWORD, )7974     pub fn RtlGetDeviceFamilyInfoEnum(
7975         pullUAPInfo: *mut ULONGLONG,
7976         pulDeviceFamily: *mut DWORD,
7977         pulDeviceForm: *mut DWORD,
7978     );
RtlConvertDeviceFamilyInfoToString( pulDeviceFamilyBufferSize: PDWORD, pulDeviceFormBufferSize: PDWORD, DeviceFamily: PWSTR, DeviceForm: PWSTR, ) -> DWORD7979     pub fn RtlConvertDeviceFamilyInfoToString(
7980         pulDeviceFamilyBufferSize: PDWORD,
7981         pulDeviceFormBufferSize: PDWORD,
7982         DeviceFamily: PWSTR,
7983         DeviceForm: PWSTR,
7984     ) -> DWORD;
RtlSwitchedVVI( VersionInfo: PRTL_OSVERSIONINFOEXW, TypeMask: DWORD, ConditionMask: ULONGLONG, ) -> DWORD7985     pub fn RtlSwitchedVVI(
7986         VersionInfo: PRTL_OSVERSIONINFOEXW,
7987         TypeMask: DWORD,
7988         ConditionMask: ULONGLONG,
7989     ) -> DWORD;
7990 }
7991 pub const DLL_PROCESS_ATTACH: DWORD = 1;
7992 pub const DLL_THREAD_ATTACH: DWORD = 2;
7993 pub const DLL_THREAD_DETACH: DWORD = 3;
7994 pub const DLL_PROCESS_DETACH: DWORD = 0;
7995 pub const EVENTLOG_SEQUENTIAL_READ: DWORD = 0x0001;
7996 pub const EVENTLOG_SEEK_READ: DWORD = 0x0002;
7997 pub const EVENTLOG_FORWARDS_READ: DWORD = 0x0004;
7998 pub const EVENTLOG_BACKWARDS_READ: DWORD = 0x0008;
7999 pub const EVENTLOG_SUCCESS: WORD = 0x0000;
8000 pub const EVENTLOG_ERROR_TYPE: WORD = 0x0001;
8001 pub const EVENTLOG_WARNING_TYPE: WORD = 0x0002;
8002 pub const EVENTLOG_INFORMATION_TYPE: WORD = 0x0004;
8003 pub const EVENTLOG_AUDIT_SUCCESS: WORD = 0x0008;
8004 pub const EVENTLOG_AUDIT_FAILURE: WORD = 0x0010;
8005 pub const EVENTLOG_START_PAIRED_EVENT: WORD = 0x0001;
8006 pub const EVENTLOG_END_PAIRED_EVENT: WORD = 0x0002;
8007 pub const EVENTLOG_END_ALL_PAIRED_EVENTS: WORD = 0x0004;
8008 pub const EVENTLOG_PAIRED_EVENT_ACTIVE: WORD = 0x0008;
8009 pub const EVENTLOG_PAIRED_EVENT_INACTIVE: WORD = 0x0010;
8010 STRUCT!{struct EVENTLOGRECORD {
8011     Length: DWORD,
8012     Reserved: DWORD,
8013     RecordNumber: DWORD,
8014     TimeGenerated: DWORD,
8015     TimeWritten: DWORD,
8016     EventID: DWORD,
8017     EventType: WORD,
8018     NumStrings: WORD,
8019     EventCategory: WORD,
8020     ReservedFlags: WORD,
8021     ClosingRecordNumber: DWORD,
8022     StringOffset: DWORD,
8023     UserSidLength: DWORD,
8024     UserSidOffset: DWORD,
8025     DataLength: DWORD,
8026     DataOffset: DWORD,
8027 }}
8028 pub type PEVENTLOGRECORD = *mut EVENTLOGRECORD;
8029 pub const MAXLOGICALLOGNAMESIZE: usize = 256;
8030 pub type PEVENTSFORLOGFILE = *mut EVENTSFORLOGFILE;
8031 pub type PPACKEDEVENTINFO = *mut PACKEDEVENTINFO;
8032 STRUCT!{struct EVENTSFORLOGFILE {
8033     ulSize: DWORD,
8034     szLogicalLogFile: [WCHAR; MAXLOGICALLOGNAMESIZE],
8035     ulNumRecords: DWORD,
8036     pEventLogRecords: [EVENTLOGRECORD; 0],
8037 }}
8038 STRUCT!{struct PACKEDEVENTINFO {
8039     ulSize: DWORD,
8040     ulNumEventsForLogFile: DWORD,
8041     ulOffsets: [DWORD; 0],
8042 }}
8043 pub const KEY_QUERY_VALUE: u32 = 0x0001;
8044 pub const KEY_SET_VALUE: u32 = 0x0002;
8045 pub const KEY_CREATE_SUB_KEY: u32 = 0x0004;
8046 pub const KEY_ENUMERATE_SUB_KEYS: u32 = 0x0008;
8047 pub const KEY_NOTIFY: u32 = 0x0010;
8048 pub const KEY_CREATE_LINK: u32 = 0x0020;
8049 pub const KEY_WOW64_32KEY: u32 = 0x0200;
8050 pub const KEY_WOW64_64KEY: u32 = 0x0100;
8051 pub const KEY_WOW64_RES: u32 = 0x0300;
8052 pub const KEY_READ: u32 = (STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS
8053     | KEY_NOTIFY) & !SYNCHRONIZE;
8054 pub const KEY_WRITE: u32 = (STANDARD_RIGHTS_WRITE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY)
8055     & !SYNCHRONIZE;
8056 pub const KEY_EXECUTE: u32 = KEY_READ & !SYNCHRONIZE;
8057 pub const KEY_ALL_ACCESS: u32 = (STANDARD_RIGHTS_ALL | KEY_QUERY_VALUE | KEY_SET_VALUE
8058     | KEY_CREATE_SUB_KEY | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY | KEY_CREATE_LINK) & !SYNCHRONIZE;
8059 pub const REG_OPTION_RESERVED: DWORD = 0x00000000;
8060 pub const REG_OPTION_NON_VOLATILE: DWORD = 0x00000000;
8061 pub const REG_OPTION_VOLATILE: DWORD = 0x00000001;
8062 pub const REG_OPTION_CREATE_LINK: DWORD = 0x00000002;
8063 pub const REG_OPTION_BACKUP_RESTORE: DWORD = 0x00000004;
8064 pub const REG_OPTION_OPEN_LINK: DWORD = 0x00000008;
8065 pub const REG_OPTION_DONT_VIRTUALIZE: DWORD = 0x00000010;
8066 pub const REG_LEGAL_OPTION: DWORD = REG_OPTION_RESERVED | REG_OPTION_NON_VOLATILE
8067     | REG_OPTION_VOLATILE | REG_OPTION_CREATE_LINK | REG_OPTION_BACKUP_RESTORE
8068     | REG_OPTION_OPEN_LINK | REG_OPTION_DONT_VIRTUALIZE;
8069 pub const REG_OPEN_LEGAL_OPTION: DWORD = REG_OPTION_RESERVED | REG_OPTION_BACKUP_RESTORE
8070     | REG_OPTION_OPEN_LINK | REG_OPTION_DONT_VIRTUALIZE;
8071 pub const REG_CREATED_NEW_KEY: DWORD = 0x00000001;
8072 pub const REG_OPENED_EXISTING_KEY: DWORD = 0x00000002;
8073 pub const REG_STANDARD_FORMAT: DWORD = 1;
8074 pub const REG_LATEST_FORMAT: DWORD = 2;
8075 pub const REG_NO_COMPRESSION: DWORD = 4;
8076 pub const REG_WHOLE_HIVE_VOLATILE: DWORD = 0x00000001;
8077 pub const REG_REFRESH_HIVE: DWORD = 0x00000002;
8078 pub const REG_NO_LAZY_FLUSH: DWORD = 0x00000004;
8079 pub const REG_FORCE_RESTORE: DWORD = 0x00000008;
8080 pub const REG_APP_HIVE: DWORD = 0x00000010;
8081 pub const REG_PROCESS_PRIVATE: DWORD = 0x00000020;
8082 pub const REG_START_JOURNAL: DWORD = 0x00000040;
8083 pub const REG_HIVE_EXACT_FILE_GROWTH: DWORD = 0x00000080;
8084 pub const REG_HIVE_NO_RM: DWORD = 0x00000100;
8085 pub const REG_HIVE_SINGLE_LOG: DWORD = 0x00000200;
8086 pub const REG_BOOT_HIVE: DWORD = 0x00000400;
8087 pub const REG_LOAD_HIVE_OPEN_HANDLE: DWORD = 0x00000800;
8088 pub const REG_FLUSH_HIVE_FILE_GROWTH: DWORD = 0x00001000;
8089 pub const REG_OPEN_READ_ONLY: DWORD = 0x00002000;
8090 pub const REG_IMMUTABLE: DWORD = 0x00004000;
8091 pub const REG_APP_HIVE_OPEN_READ_ONLY: DWORD = REG_OPEN_READ_ONLY;
8092 pub const REG_FORCE_UNLOAD: DWORD = 1;
8093 pub const REG_UNLOAD_LEGAL_FLAGS: DWORD = REG_FORCE_UNLOAD;
8094 pub const REG_NOTIFY_CHANGE_NAME: DWORD = 0x00000001;
8095 pub const REG_NOTIFY_CHANGE_ATTRIBUTES: DWORD = 0x00000002;
8096 pub const REG_NOTIFY_CHANGE_LAST_SET: DWORD = 0x00000004;
8097 pub const REG_NOTIFY_CHANGE_SECURITY: DWORD = 0x00000008;
8098 pub const REG_NOTIFY_THREAD_AGNOSTIC: DWORD = 0x10000000;
8099 pub const REG_LEGAL_CHANGE_FILTER: DWORD = REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_ATTRIBUTES
8100     | REG_NOTIFY_CHANGE_LAST_SET | REG_NOTIFY_CHANGE_SECURITY | REG_NOTIFY_THREAD_AGNOSTIC;
8101 pub const REG_NONE: DWORD = 0;
8102 pub const REG_SZ: DWORD = 1;
8103 pub const REG_EXPAND_SZ: DWORD = 2;
8104 pub const REG_BINARY: DWORD = 3;
8105 pub const REG_DWORD: DWORD = 4;
8106 pub const REG_DWORD_LITTLE_ENDIAN: DWORD = 4;
8107 pub const REG_DWORD_BIG_ENDIAN: DWORD = 5;
8108 pub const REG_LINK: DWORD = 6;
8109 pub const REG_MULTI_SZ: DWORD = 7;
8110 pub const REG_RESOURCE_LIST: DWORD = 8;
8111 pub const REG_FULL_RESOURCE_DESCRIPTOR: DWORD = 9;
8112 pub const REG_RESOURCE_REQUIREMENTS_LIST: DWORD = 10;
8113 pub const REG_QWORD: DWORD = 11;
8114 pub const REG_QWORD_LITTLE_ENDIAN: DWORD = 11;
8115 pub const SERVICE_KERNEL_DRIVER: DWORD = 0x00000001;
8116 pub const SERVICE_FILE_SYSTEM_DRIVER: DWORD = 0x00000002;
8117 pub const SERVICE_ADAPTER: DWORD = 0x00000004;
8118 pub const SERVICE_RECOGNIZER_DRIVER: DWORD = 0x00000008;
8119 pub const SERVICE_DRIVER: DWORD = SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER
8120     | SERVICE_RECOGNIZER_DRIVER;
8121 pub const SERVICE_WIN32_OWN_PROCESS: DWORD = 0x00000010;
8122 pub const SERVICE_WIN32_SHARE_PROCESS: DWORD = 0x00000020;
8123 pub const SERVICE_WIN32: DWORD = SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS;
8124 pub const SERVICE_USER_SERVICE: DWORD = 0x00000040;
8125 pub const SERVICE_USERSERVICE_INSTANCE: DWORD = 0x00000080;
8126 pub const SERVICE_USER_SHARE_PROCESS: DWORD = SERVICE_USER_SERVICE | SERVICE_WIN32_SHARE_PROCESS;
8127 pub const SERVICE_USER_OWN_PROCESS: DWORD = SERVICE_USER_SERVICE | SERVICE_WIN32_OWN_PROCESS;
8128 pub const SERVICE_INTERACTIVE_PROCESS: DWORD = 0x00000100;
8129 pub const SERVICE_PKG_SERVICE: DWORD = 0x00000200;
8130 pub const SERVICE_TYPE_ALL: DWORD = SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER
8131     | SERVICE_INTERACTIVE_PROCESS | SERVICE_USER_SERVICE | SERVICE_USERSERVICE_INSTANCE
8132     | SERVICE_PKG_SERVICE;
8133 pub const SERVICE_BOOT_START: DWORD = 0x00000000;
8134 pub const SERVICE_SYSTEM_START: DWORD = 0x00000001;
8135 pub const SERVICE_AUTO_START: DWORD = 0x00000002;
8136 pub const SERVICE_DEMAND_START: DWORD = 0x00000003;
8137 pub const SERVICE_DISABLED: DWORD = 0x00000004;
8138 pub const SERVICE_ERROR_IGNORE: DWORD = 0x00000000;
8139 pub const SERVICE_ERROR_NORMAL: DWORD = 0x00000001;
8140 pub const SERVICE_ERROR_SEVERE: DWORD = 0x00000002;
8141 pub const SERVICE_ERROR_CRITICAL: DWORD = 0x00000003;
8142 ENUM!{enum SERVICE_NODE_TYPE {
8143     DriverType = SERVICE_KERNEL_DRIVER,
8144     FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,
8145     Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
8146     Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
8147     AdapterType = SERVICE_ADAPTER,
8148     RecognizerType = SERVICE_RECOGNIZER_DRIVER,
8149 }}
8150 ENUM!{enum SERVICE_LOAD_TYPE {
8151     BootLoad = SERVICE_BOOT_START,
8152     SystemLoad = SERVICE_SYSTEM_START,
8153     AutoLoad = SERVICE_AUTO_START,
8154     DemandLoad = SERVICE_DEMAND_START,
8155     DisableLoad = SERVICE_DISABLED,
8156 }}
8157 ENUM!{enum SERVICE_ERROR_TYPE {
8158     IgnoreError = SERVICE_ERROR_IGNORE,
8159     NormalError = SERVICE_ERROR_NORMAL,
8160     SevereError = SERVICE_ERROR_SEVERE,
8161     CriticalError = SERVICE_ERROR_CRITICAL,
8162 }}
8163 pub const CM_SERVICE_NETWORK_BOOT_LOAD: DWORD = 0x00000001;
8164 pub const CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD: DWORD = 0x00000002;
8165 pub const CM_SERVICE_USB_DISK_BOOT_LOAD: DWORD = 0x00000004;
8166 pub const CM_SERVICE_SD_DISK_BOOT_LOAD: DWORD = 0x00000008;
8167 pub const CM_SERVICE_USB3_DISK_BOOT_LOAD: DWORD = 0x00000010;
8168 pub const CM_SERVICE_MEASURED_BOOT_LOAD: DWORD = 0x00000020;
8169 pub const CM_SERVICE_VERIFIER_BOOT_LOAD: DWORD = 0x00000040;
8170 pub const CM_SERVICE_WINPE_BOOT_LOAD: DWORD = 0x00000080;
8171 pub const CM_SERVICE_VALID_PROMOTION_MASK: DWORD = CM_SERVICE_NETWORK_BOOT_LOAD
8172     | CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | CM_SERVICE_USB_DISK_BOOT_LOAD
8173     | CM_SERVICE_SD_DISK_BOOT_LOAD | CM_SERVICE_USB3_DISK_BOOT_LOAD
8174     | CM_SERVICE_MEASURED_BOOT_LOAD | CM_SERVICE_VERIFIER_BOOT_LOAD | CM_SERVICE_WINPE_BOOT_LOAD;
8175 pub const TAPE_ERASE_SHORT: DWORD = 0;
8176 pub const TAPE_ERASE_LONG: DWORD = 1;
8177 STRUCT!{struct TAPE_ERASE {
8178     Type: DWORD,
8179     Immediate: BOOLEAN,
8180 }}
8181 pub type PTAPE_ERASE = *mut TAPE_ERASE;
8182 pub const TAPE_LOAD: DWORD = 0;
8183 pub const TAPE_UNLOAD: DWORD = 1;
8184 pub const TAPE_TENSION: DWORD = 2;
8185 pub const TAPE_LOCK: DWORD = 3;
8186 pub const TAPE_UNLOCK: DWORD = 4;
8187 pub const TAPE_FORMAT: DWORD = 5;
8188 STRUCT!{struct TAPE_PREPARE {
8189     Operation: DWORD,
8190     Immediate: BOOLEAN,
8191 }}
8192 pub type PTAPE_PREPARE = *mut TAPE_PREPARE;
8193 pub const TAPE_SETMARKS: DWORD = 0;
8194 pub const TAPE_FILEMARKS: DWORD = 1;
8195 pub const TAPE_SHORT_FILEMARKS: DWORD = 2;
8196 pub const TAPE_LONG_FILEMARKS: DWORD = 3;
8197 STRUCT!{struct TAPE_WRITE_MARKS {
8198     Type: DWORD,
8199     Count: DWORD,
8200     Immediate: BOOLEAN,
8201 }}
8202 pub type PTAPE_WRITE_MARKS = *mut TAPE_WRITE_MARKS;
8203 pub const TAPE_ABSOLUTE_POSITION: DWORD = 0;
8204 pub const TAPE_LOGICAL_POSITION: DWORD = 1;
8205 pub const TAPE_PSEUDO_LOGICAL_POSITION: DWORD = 2;
8206 STRUCT!{struct TAPE_GET_POSITION {
8207     Type: DWORD,
8208     Partition: DWORD,
8209     Offset: LARGE_INTEGER,
8210 }}
8211 pub type PTAPE_GET_POSITION = *mut TAPE_GET_POSITION;
8212 pub const TAPE_REWIND: DWORD = 0;
8213 pub const TAPE_ABSOLUTE_BLOCK: DWORD = 1;
8214 pub const TAPE_LOGICAL_BLOCK: DWORD = 2;
8215 pub const TAPE_PSEUDO_LOGICAL_BLOCK: DWORD = 3;
8216 pub const TAPE_SPACE_END_OF_DATA: DWORD = 4;
8217 pub const TAPE_SPACE_RELATIVE_BLOCKS: DWORD = 5;
8218 pub const TAPE_SPACE_FILEMARKS: DWORD = 6;
8219 pub const TAPE_SPACE_SEQUENTIAL_FMKS: DWORD = 7;
8220 pub const TAPE_SPACE_SETMARKS: DWORD = 8;
8221 pub const TAPE_SPACE_SEQUENTIAL_SMKS: DWORD = 9;
8222 STRUCT!{struct TAPE_SET_POSITION {
8223     Method: DWORD,
8224     Partition: DWORD,
8225     Offset: LARGE_INTEGER,
8226     Immediate: BOOLEAN,
8227 }}
8228 pub type PTAPE_SET_POSITION = *mut TAPE_SET_POSITION;
8229 pub const TAPE_DRIVE_FIXED: DWORD = 0x00000001;
8230 pub const TAPE_DRIVE_SELECT: DWORD = 0x00000002;
8231 pub const TAPE_DRIVE_INITIATOR: DWORD = 0x00000004;
8232 pub const TAPE_DRIVE_ERASE_SHORT: DWORD = 0x00000010;
8233 pub const TAPE_DRIVE_ERASE_LONG: DWORD = 0x00000020;
8234 pub const TAPE_DRIVE_ERASE_BOP_ONLY: DWORD = 0x00000040;
8235 pub const TAPE_DRIVE_ERASE_IMMEDIATE: DWORD = 0x00000080;
8236 pub const TAPE_DRIVE_TAPE_CAPACITY: DWORD = 0x00000100;
8237 pub const TAPE_DRIVE_TAPE_REMAINING: DWORD = 0x00000200;
8238 pub const TAPE_DRIVE_FIXED_BLOCK: DWORD = 0x00000400;
8239 pub const TAPE_DRIVE_VARIABLE_BLOCK: DWORD = 0x00000800;
8240 pub const TAPE_DRIVE_WRITE_PROTECT: DWORD = 0x00001000;
8241 pub const TAPE_DRIVE_EOT_WZ_SIZE: DWORD = 0x00002000;
8242 pub const TAPE_DRIVE_ECC: DWORD = 0x00010000;
8243 pub const TAPE_DRIVE_COMPRESSION: DWORD = 0x00020000;
8244 pub const TAPE_DRIVE_PADDING: DWORD = 0x00040000;
8245 pub const TAPE_DRIVE_REPORT_SMKS: DWORD = 0x00080000;
8246 pub const TAPE_DRIVE_GET_ABSOLUTE_BLK: DWORD = 0x00100000;
8247 pub const TAPE_DRIVE_GET_LOGICAL_BLK: DWORD = 0x00200000;
8248 pub const TAPE_DRIVE_SET_EOT_WZ_SIZE: DWORD = 0x00400000;
8249 pub const TAPE_DRIVE_EJECT_MEDIA: DWORD = 0x01000000;
8250 pub const TAPE_DRIVE_CLEAN_REQUESTS: DWORD = 0x02000000;
8251 pub const TAPE_DRIVE_SET_CMP_BOP_ONLY: DWORD = 0x04000000;
8252 pub const TAPE_DRIVE_RESERVED_BIT: DWORD = 0x80000000;
8253 pub const TAPE_DRIVE_LOAD_UNLOAD: DWORD = 0x80000001;
8254 pub const TAPE_DRIVE_TENSION: DWORD = 0x80000002;
8255 pub const TAPE_DRIVE_LOCK_UNLOCK: DWORD = 0x80000004;
8256 pub const TAPE_DRIVE_REWIND_IMMEDIATE: DWORD = 0x80000008;
8257 pub const TAPE_DRIVE_SET_BLOCK_SIZE: DWORD = 0x80000010;
8258 pub const TAPE_DRIVE_LOAD_UNLD_IMMED: DWORD = 0x80000020;
8259 pub const TAPE_DRIVE_TENSION_IMMED: DWORD = 0x80000040;
8260 pub const TAPE_DRIVE_LOCK_UNLK_IMMED: DWORD = 0x80000080;
8261 pub const TAPE_DRIVE_SET_ECC: DWORD = 0x80000100;
8262 pub const TAPE_DRIVE_SET_COMPRESSION: DWORD = 0x80000200;
8263 pub const TAPE_DRIVE_SET_PADDING: DWORD = 0x80000400;
8264 pub const TAPE_DRIVE_SET_REPORT_SMKS: DWORD = 0x80000800;
8265 pub const TAPE_DRIVE_ABSOLUTE_BLK: DWORD = 0x80001000;
8266 pub const TAPE_DRIVE_ABS_BLK_IMMED: DWORD = 0x80002000;
8267 pub const TAPE_DRIVE_LOGICAL_BLK: DWORD = 0x80004000;
8268 pub const TAPE_DRIVE_LOG_BLK_IMMED: DWORD = 0x80008000;
8269 pub const TAPE_DRIVE_END_OF_DATA: DWORD = 0x80010000;
8270 pub const TAPE_DRIVE_RELATIVE_BLKS: DWORD = 0x80020000;
8271 pub const TAPE_DRIVE_FILEMARKS: DWORD = 0x80040000;
8272 pub const TAPE_DRIVE_SEQUENTIAL_FMKS: DWORD = 0x80080000;
8273 pub const TAPE_DRIVE_SETMARKS: DWORD = 0x80100000;
8274 pub const TAPE_DRIVE_SEQUENTIAL_SMKS: DWORD = 0x80200000;
8275 pub const TAPE_DRIVE_REVERSE_POSITION: DWORD = 0x80400000;
8276 pub const TAPE_DRIVE_SPACE_IMMEDIATE: DWORD = 0x80800000;
8277 pub const TAPE_DRIVE_WRITE_SETMARKS: DWORD = 0x81000000;
8278 pub const TAPE_DRIVE_WRITE_FILEMARKS: DWORD = 0x82000000;
8279 pub const TAPE_DRIVE_WRITE_SHORT_FMKS: DWORD = 0x84000000;
8280 pub const TAPE_DRIVE_WRITE_LONG_FMKS: DWORD = 0x88000000;
8281 pub const TAPE_DRIVE_WRITE_MARK_IMMED: DWORD = 0x90000000;
8282 pub const TAPE_DRIVE_FORMAT: DWORD = 0xA0000000;
8283 pub const TAPE_DRIVE_FORMAT_IMMEDIATE: DWORD = 0xC0000000;
8284 pub const TAPE_DRIVE_HIGH_FEATURES: DWORD = 0x80000000;
8285 STRUCT!{struct TAPE_GET_DRIVE_PARAMETERS {
8286     ECC: BOOLEAN,
8287     Compression: BOOLEAN,
8288     DataPadding: BOOLEAN,
8289     ReportSetmarks: BOOLEAN,
8290     DefaultBlockSize: DWORD,
8291     MaximumBlockSize: DWORD,
8292     MinimumBlockSize: DWORD,
8293     MaximumPartitionCount: DWORD,
8294     FeaturesLow: DWORD,
8295     FeaturesHigh: DWORD,
8296     EOTWarningZoneSize: DWORD,
8297 }}
8298 pub type PTAPE_GET_DRIVE_PARAMETERS = *mut TAPE_GET_DRIVE_PARAMETERS;
8299 STRUCT!{struct TAPE_SET_DRIVE_PARAMETERS {
8300     ECC: BOOLEAN,
8301     Compression: BOOLEAN,
8302     DataPadding: BOOLEAN,
8303     ReportSetmarks: BOOLEAN,
8304     EOTWarningZoneSize: DWORD,
8305 }}
8306 pub type PTAPE_SET_DRIVE_PARAMETERS = *mut TAPE_SET_DRIVE_PARAMETERS;
8307 STRUCT!{struct TAPE_GET_MEDIA_PARAMETERS {
8308     Capacity: LARGE_INTEGER,
8309     Remaining: LARGE_INTEGER,
8310     BlockSize: DWORD,
8311     PartitionCount: DWORD,
8312     WriteProtected: BOOLEAN,
8313 }}
8314 pub type PTAPE_GET_MEDIA_PARAMETERS = *mut TAPE_GET_MEDIA_PARAMETERS;
8315 STRUCT!{struct TAPE_SET_MEDIA_PARAMETERS {
8316     BlockSize: DWORD,
8317 }}
8318 pub type PTAPE_SET_MEDIA_PARAMETERS = *mut TAPE_SET_MEDIA_PARAMETERS;
8319 pub const TAPE_FIXED_PARTITIONS: DWORD = 0;
8320 pub const TAPE_SELECT_PARTITIONS: DWORD = 1;
8321 pub const TAPE_INITIATOR_PARTITIONS: DWORD = 2;
8322 STRUCT!{struct TAPE_CREATE_PARTITION {
8323     Method: DWORD,
8324     Count: DWORD,
8325     Size: DWORD,
8326 }}
8327 pub type PTAPE_CREATE_PARTITION = *mut TAPE_CREATE_PARTITION;
8328 pub const TAPE_QUERY_DRIVE_PARAMETERS: DWORD = 0;
8329 pub const TAPE_QUERY_MEDIA_CAPACITY: DWORD = 1;
8330 pub const TAPE_CHECK_FOR_DRIVE_PROBLEM: DWORD = 2;
8331 pub const TAPE_QUERY_IO_ERROR_DATA: DWORD = 3;
8332 pub const TAPE_QUERY_DEVICE_ERROR_DATA: DWORD = 4;
8333 STRUCT!{struct TAPE_WMI_OPERATIONS {
8334     Method: DWORD,
8335     DataBufferSize: DWORD,
8336     DataBuffer: PVOID,
8337 }}
8338 pub type PTAPE_WMI_OPERATIONS = *mut TAPE_WMI_OPERATIONS;
8339 ENUM!{enum TAPE_DRIVE_PROBLEM_TYPE {
8340     TapeDriveProblemNone,
8341     TapeDriveReadWriteWarning,
8342     TapeDriveReadWriteError,
8343     TapeDriveReadWarning,
8344     TapeDriveWriteWarning,
8345     TapeDriveReadError,
8346     TapeDriveWriteError,
8347     TapeDriveHardwareError,
8348     TapeDriveUnsupportedMedia,
8349     TapeDriveScsiConnectionError,
8350     TapeDriveTimetoClean,
8351     TapeDriveCleanDriveNow,
8352     TapeDriveMediaLifeExpired,
8353     TapeDriveSnappedTape,
8354 }}
8355 pub const TRANSACTIONMANAGER_QUERY_INFORMATION: DWORD = 0x0001;
8356 pub const TRANSACTIONMANAGER_SET_INFORMATION: DWORD = 0x0002;
8357 pub const TRANSACTIONMANAGER_RECOVER: DWORD = 0x0004;
8358 pub const TRANSACTIONMANAGER_RENAME: DWORD = 0x0008;
8359 pub const TRANSACTIONMANAGER_CREATE_RM: DWORD = 0x0010;
8360 pub const TRANSACTIONMANAGER_BIND_TRANSACTION: DWORD = 0x0020;
8361 pub const TRANSACTIONMANAGER_GENERIC_READ: DWORD = STANDARD_RIGHTS_READ
8362     | TRANSACTIONMANAGER_QUERY_INFORMATION;
8363 pub const TRANSACTIONMANAGER_GENERIC_WRITE: DWORD = STANDARD_RIGHTS_WRITE
8364     | TRANSACTIONMANAGER_SET_INFORMATION | TRANSACTIONMANAGER_RECOVER | TRANSACTIONMANAGER_RENAME
8365     | TRANSACTIONMANAGER_CREATE_RM;
8366 pub const TRANSACTIONMANAGER_GENERIC_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE;
8367 pub const TRANSACTIONMANAGER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED
8368     | TRANSACTIONMANAGER_GENERIC_READ | TRANSACTIONMANAGER_GENERIC_WRITE
8369     | TRANSACTIONMANAGER_GENERIC_EXECUTE | TRANSACTIONMANAGER_BIND_TRANSACTION;
8370 pub const TRANSACTION_QUERY_INFORMATION: DWORD = 0x0001;
8371 pub const TRANSACTION_SET_INFORMATION: DWORD = 0x0002;
8372 pub const TRANSACTION_ENLIST: DWORD = 0x0004;
8373 pub const TRANSACTION_COMMIT: DWORD = 0x0008;
8374 pub const TRANSACTION_ROLLBACK: DWORD = 0x0010;
8375 pub const TRANSACTION_PROPAGATE: DWORD = 0x0020;
8376 pub const TRANSACTION_RIGHT_RESERVED1: DWORD = 0x0040;
8377 pub const TRANSACTION_GENERIC_READ: DWORD = STANDARD_RIGHTS_READ | TRANSACTION_QUERY_INFORMATION
8378     | SYNCHRONIZE;
8379 pub const TRANSACTION_GENERIC_WRITE: DWORD = STANDARD_RIGHTS_WRITE | TRANSACTION_SET_INFORMATION
8380     | TRANSACTION_COMMIT | TRANSACTION_ENLIST | TRANSACTION_ROLLBACK | TRANSACTION_PROPAGATE
8381     | SYNCHRONIZE;
8382 pub const TRANSACTION_GENERIC_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | TRANSACTION_COMMIT
8383     | TRANSACTION_ROLLBACK | SYNCHRONIZE;
8384 pub const TRANSACTION_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | TRANSACTION_GENERIC_READ
8385     | TRANSACTION_GENERIC_WRITE | TRANSACTION_GENERIC_EXECUTE;
8386 pub const TRANSACTION_RESOURCE_MANAGER_RIGHTS: DWORD = TRANSACTION_GENERIC_READ
8387     | STANDARD_RIGHTS_WRITE | TRANSACTION_SET_INFORMATION | TRANSACTION_ENLIST
8388     | TRANSACTION_ROLLBACK | TRANSACTION_PROPAGATE | SYNCHRONIZE;
8389 pub const RESOURCEMANAGER_QUERY_INFORMATION: DWORD = 0x0001;
8390 pub const RESOURCEMANAGER_SET_INFORMATION: DWORD = 0x0002;
8391 pub const RESOURCEMANAGER_RECOVER: DWORD = 0x0004;
8392 pub const RESOURCEMANAGER_ENLIST: DWORD = 0x0008;
8393 pub const RESOURCEMANAGER_GET_NOTIFICATION: DWORD = 0x0010;
8394 pub const RESOURCEMANAGER_REGISTER_PROTOCOL: DWORD = 0x0020;
8395 pub const RESOURCEMANAGER_COMPLETE_PROPAGATION: DWORD = 0x0040;
8396 pub const RESOURCEMANAGER_GENERIC_READ: DWORD = STANDARD_RIGHTS_READ
8397     | RESOURCEMANAGER_QUERY_INFORMATION | SYNCHRONIZE;
8398 pub const RESOURCEMANAGER_GENERIC_WRITE: DWORD = STANDARD_RIGHTS_WRITE
8399     | RESOURCEMANAGER_SET_INFORMATION | RESOURCEMANAGER_RECOVER | RESOURCEMANAGER_ENLIST
8400     | RESOURCEMANAGER_GET_NOTIFICATION | RESOURCEMANAGER_REGISTER_PROTOCOL
8401     | RESOURCEMANAGER_COMPLETE_PROPAGATION | SYNCHRONIZE;
8402 pub const RESOURCEMANAGER_GENERIC_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE
8403     | RESOURCEMANAGER_RECOVER | RESOURCEMANAGER_ENLIST | RESOURCEMANAGER_GET_NOTIFICATION
8404     | RESOURCEMANAGER_COMPLETE_PROPAGATION | SYNCHRONIZE;
8405 pub const RESOURCEMANAGER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED
8406     | RESOURCEMANAGER_GENERIC_READ | RESOURCEMANAGER_GENERIC_WRITE
8407     | RESOURCEMANAGER_GENERIC_EXECUTE;
8408 pub const ENLISTMENT_QUERY_INFORMATION: DWORD = 0x0001;
8409 pub const ENLISTMENT_SET_INFORMATION: DWORD = 0x0002;
8410 pub const ENLISTMENT_RECOVER: DWORD = 0x0004;
8411 pub const ENLISTMENT_SUBORDINATE_RIGHTS: DWORD = 0x0008;
8412 pub const ENLISTMENT_SUPERIOR_RIGHTS: DWORD = 0x0010;
8413 pub const ENLISTMENT_GENERIC_READ: DWORD = STANDARD_RIGHTS_READ | ENLISTMENT_QUERY_INFORMATION;
8414 pub const ENLISTMENT_GENERIC_WRITE: DWORD = STANDARD_RIGHTS_WRITE | ENLISTMENT_SET_INFORMATION
8415     | ENLISTMENT_RECOVER | ENLISTMENT_SUBORDINATE_RIGHTS | ENLISTMENT_SUPERIOR_RIGHTS;
8416 pub const ENLISTMENT_GENERIC_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | ENLISTMENT_RECOVER
8417     | ENLISTMENT_SUBORDINATE_RIGHTS | ENLISTMENT_SUPERIOR_RIGHTS;
8418 pub const ENLISTMENT_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | ENLISTMENT_GENERIC_READ
8419     | ENLISTMENT_GENERIC_WRITE | ENLISTMENT_GENERIC_EXECUTE;
8420 ENUM!{enum TRANSACTION_OUTCOME {
8421     TransactionOutcomeUndetermined = 1,
8422     TransactionOutcomeCommitted,
8423     TransactionOutcomeAborted,
8424 }}
8425 ENUM!{enum TRANSACTION_STATE {
8426     TransactionStateNormal = 1,
8427     TransactionStateIndoubt,
8428     TransactionStateCommittedNotify,
8429 }}
8430 STRUCT!{struct TRANSACTION_BASIC_INFORMATION {
8431     TransactionId: GUID,
8432     State: DWORD,
8433     Outcome: DWORD,
8434 }}
8435 pub type PTRANSACTION_BASIC_INFORMATION = *mut TRANSACTION_BASIC_INFORMATION;
8436 STRUCT!{struct TRANSACTIONMANAGER_BASIC_INFORMATION {
8437     TmIdentity: GUID,
8438     VirtualClock: LARGE_INTEGER,
8439 }}
8440 pub type PTRANSACTIONMANAGER_BASIC_INFORMATION = *mut TRANSACTIONMANAGER_BASIC_INFORMATION;
8441 STRUCT!{struct TRANSACTIONMANAGER_LOG_INFORMATION {
8442     LogIdentity: GUID,
8443 }}
8444 pub type PTRANSACTIONMANAGER_LOG_INFORMATION = *mut TRANSACTIONMANAGER_LOG_INFORMATION;
8445 STRUCT!{struct TRANSACTIONMANAGER_LOGPATH_INFORMATION {
8446     LogPathLength: DWORD,
8447     LogPath: [WCHAR; 1],
8448 }}
8449 pub type PTRANSACTIONMANAGER_LOGPATH_INFORMATION = *mut TRANSACTIONMANAGER_LOGPATH_INFORMATION;
8450 STRUCT!{struct TRANSACTIONMANAGER_RECOVERY_INFORMATION {
8451     LastRecoveredLsn: ULONGLONG,
8452 }}
8453 pub type PTRANSACTIONMANAGER_RECOVERY_INFORMATION = *mut TRANSACTIONMANAGER_RECOVERY_INFORMATION;
8454 STRUCT!{struct TRANSACTIONMANAGER_OLDEST_INFORMATION {
8455     OldestTransactionGuid: GUID,
8456 }}
8457 pub type PTRANSACTIONMANAGER_OLDEST_INFORMATION = *mut TRANSACTIONMANAGER_OLDEST_INFORMATION;
8458 STRUCT!{struct TRANSACTION_PROPERTIES_INFORMATION {
8459     IsolationLevel: DWORD,
8460     IsolationFlags: DWORD,
8461     Timeout: LARGE_INTEGER,
8462     Outcome: DWORD,
8463     DescriptionLength: DWORD,
8464     Description: [WCHAR; 1],
8465 }}
8466 pub type PTRANSACTION_PROPERTIES_INFORMATION = *mut TRANSACTION_PROPERTIES_INFORMATION;
8467 STRUCT!{struct TRANSACTION_BIND_INFORMATION {
8468     TmHandle: HANDLE,
8469 }}
8470 pub type PTRANSACTION_BIND_INFORMATION = *mut TRANSACTION_BIND_INFORMATION;
8471 STRUCT!{struct TRANSACTION_ENLISTMENT_PAIR {
8472     EnlistmentId: GUID,
8473     ResourceManagerId: GUID,
8474 }}
8475 pub type PTRANSACTION_ENLISTMENT_PAIR = *mut TRANSACTION_ENLISTMENT_PAIR;
8476 STRUCT!{struct TRANSACTION_ENLISTMENTS_INFORMATION {
8477     NumberOfEnlistments: DWORD,
8478     EnlistmentPair: [TRANSACTION_ENLISTMENT_PAIR; 1],
8479 }}
8480 pub type PTRANSACTION_ENLISTMENTS_INFORMATION = *mut TRANSACTION_ENLISTMENTS_INFORMATION;
8481 STRUCT!{struct TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION {
8482     SuperiorEnlistmentPair: TRANSACTION_ENLISTMENT_PAIR,
8483 }}
8484 pub type PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
8485     = *mut TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION;
8486 STRUCT!{struct RESOURCEMANAGER_BASIC_INFORMATION {
8487     ResourceManagerId: GUID,
8488     DescriptionLength: DWORD,
8489     Description: [WCHAR; 1],
8490 }}
8491 pub type PRESOURCEMANAGER_BASIC_INFORMATION = *mut RESOURCEMANAGER_BASIC_INFORMATION;
8492 STRUCT!{struct RESOURCEMANAGER_COMPLETION_INFORMATION {
8493     IoCompletionPortHandle: HANDLE,
8494     CompletionKey: ULONG_PTR,
8495 }}
8496 pub type PRESOURCEMANAGER_COMPLETION_INFORMATION = *mut RESOURCEMANAGER_COMPLETION_INFORMATION;
8497 ENUM!{enum TRANSACTION_INFORMATION_CLASS {
8498     TransactionBasicInformation,
8499     TransactionPropertiesInformation,
8500     TransactionEnlistmentInformation,
8501     TransactionSuperiorEnlistmentInformation,
8502     TransactionBindInformation,
8503     TransactionDTCPrivateInformation,
8504 }}
8505 ENUM!{enum TRANSACTIONMANAGER_INFORMATION_CLASS {
8506     TransactionManagerBasicInformation,
8507     TransactionManagerLogInformation,
8508     TransactionManagerLogPathInformation,
8509     TransactionManagerRecoveryInformation = 4,
8510     TransactionManagerOnlineProbeInformation = 3,
8511     TransactionManagerOldestTransactionInformation = 5,
8512 }}
8513 ENUM!{enum RESOURCEMANAGER_INFORMATION_CLASS {
8514     ResourceManagerBasicInformation,
8515     ResourceManagerCompletionInformation,
8516 }}
8517 STRUCT!{struct ENLISTMENT_BASIC_INFORMATION {
8518     EnlistmentId: GUID,
8519     TransactionId: GUID,
8520     ResourceManagerId: GUID,
8521 }}
8522 pub type PENLISTMENT_BASIC_INFORMATION = *mut ENLISTMENT_BASIC_INFORMATION;
8523 STRUCT!{struct ENLISTMENT_CRM_INFORMATION {
8524     CrmTransactionManagerId: GUID,
8525     CrmResourceManagerId: GUID,
8526     CrmEnlistmentId: GUID,
8527 }}
8528 pub type PENLISTMENT_CRM_INFORMATION = *mut ENLISTMENT_CRM_INFORMATION;
8529 ENUM!{enum ENLISTMENT_INFORMATION_CLASS {
8530     EnlistmentBasicInformation,
8531     EnlistmentRecoveryInformation,
8532     EnlistmentCrmInformation,
8533 }}
8534 STRUCT!{struct TRANSACTION_LIST_ENTRY {
8535     UOW: UOW,
8536 }}
8537 pub type PTRANSACTION_LIST_ENTRY = *mut TRANSACTION_LIST_ENTRY;
8538 STRUCT!{struct TRANSACTION_LIST_INFORMATION {
8539     NumberOfTransactions: DWORD,
8540     TransactionInformation: [TRANSACTION_LIST_ENTRY; 1],
8541 }}
8542 pub type PTRANSACTION_LIST_INFORMATION = *mut TRANSACTION_LIST_INFORMATION;
8543 ENUM!{enum KTMOBJECT_TYPE {
8544     KTMOBJECT_TRANSACTION,
8545     KTMOBJECT_TRANSACTION_MANAGER,
8546     KTMOBJECT_RESOURCE_MANAGER,
8547     KTMOBJECT_ENLISTMENT,
8548     KTMOBJECT_INVALID,
8549 }}
8550 pub type PKTMOBJECT_TYPE = *mut KTMOBJECT_TYPE;
8551 STRUCT!{struct KTMOBJECT_CURSOR {
8552     LastQuery: GUID,
8553     ObjectIdCount: DWORD,
8554     ObjectIds: [GUID; 1],
8555 }}
8556 pub type PKTMOBJECT_CURSOR = *mut KTMOBJECT_CURSOR;
8557 pub type TP_VERSION = DWORD;
8558 pub type PTP_VERSION = *mut DWORD;
8559 STRUCT!{struct TP_CALLBACK_INSTANCE {
8560     dummy: *mut c_void,
8561 }}
8562 pub type PTP_CALLBACK_INSTANCE = *mut TP_CALLBACK_INSTANCE;
8563 FN!{stdcall PTP_SIMPLE_CALLBACK(
8564     Instance: PTP_CALLBACK_INSTANCE,
8565     Context: PVOID,
8566 ) -> ()}
8567 STRUCT!{struct TP_POOL {
8568     dummy: *mut c_void,
8569 }}
8570 pub type PTP_POOL = *mut TP_POOL;
8571 ENUM!{enum TP_CALLBACK_PRIORITY {
8572     TP_CALLBACK_PRIORITY_HIGH,
8573     TP_CALLBACK_PRIORITY_NORMAL,
8574     TP_CALLBACK_PRIORITY_LOW,
8575     TP_CALLBACK_PRIORITY_INVALID,
8576     TP_CALLBACK_PRIORITY_COUNT = TP_CALLBACK_PRIORITY_INVALID,
8577 }}
8578 STRUCT!{struct TP_POOL_STACK_INFORMATION {
8579     StackReserve: SIZE_T,
8580     StackCommit: SIZE_T,
8581 }}
8582 pub type PTP_POOL_STACK_INFORMATION = *mut TP_POOL_STACK_INFORMATION;
8583 STRUCT!{struct TP_CLEANUP_GROUP {
8584     dummy: *mut c_void,
8585 }}
8586 pub type PTP_CLEANUP_GROUP = *mut TP_CLEANUP_GROUP;
8587 FN!{stdcall PTP_CLEANUP_GROUP_CANCEL_CALLBACK(
8588     ObjectContext: PVOID,
8589     CleanupContext: PVOID,
8590 ) -> ()}
8591 STRUCT!{struct TP_CALLBACK_ENVIRON_V3_u_s {
8592     BitFields: DWORD,
8593 }}
8594 BITFIELD!{TP_CALLBACK_ENVIRON_V3_u_s BitFields: DWORD [
8595     LongFunction set_LongFunction[0..1],
8596     Persistent set_Persistent[1..2],
8597     Private set_Private[2..32],
8598 ]}
8599 UNION!{union TP_CALLBACK_ENVIRON_V3_u {
8600     [u32; 1],
8601     Flags Flags_mut: DWORD,
8602     s s_mut: TP_CALLBACK_ENVIRON_V3_u_s,
8603 }}
8604 STRUCT!{struct TP_CALLBACK_ENVIRON_V3 {
8605     Version: TP_VERSION,
8606     Pool: PTP_POOL,
8607     CleanupGroup: PTP_CLEANUP_GROUP,
8608     CleanupGroupCancelCallback: PTP_CLEANUP_GROUP_CANCEL_CALLBACK,
8609     RaceDll: PVOID,
8610     ActivationContext: *mut ACTIVATION_CONTEXT,
8611     FinalizationCallback: PTP_SIMPLE_CALLBACK,
8612     u: TP_CALLBACK_ENVIRON_V3_u,
8613     CallbackPriority: TP_CALLBACK_PRIORITY,
8614     Size: DWORD,
8615 }}
8616 pub type TP_CALLBACK_ENVIRON = TP_CALLBACK_ENVIRON_V3;
8617 pub type PTP_CALLBACK_ENVIRON = *mut TP_CALLBACK_ENVIRON_V3;
8618 STRUCT!{struct TP_WORK {
8619     dummy: *mut c_void,
8620 }}
8621 pub type PTP_WORK = *mut TP_WORK;
8622 FN!{stdcall PTP_WORK_CALLBACK(
8623     Instance: PTP_CALLBACK_INSTANCE,
8624     Context: PVOID,
8625     Work: PTP_WORK,
8626 ) -> ()}
8627 STRUCT!{struct TP_TIMER {
8628     dummy: *mut c_void,
8629 }}
8630 pub type PTP_TIMER = *mut TP_TIMER;
8631 FN!{stdcall PTP_TIMER_CALLBACK(
8632     Instance: PTP_CALLBACK_INSTANCE,
8633     Context: PVOID,
8634     Timer: PTP_TIMER,
8635 ) -> ()}
8636 pub type TP_WAIT_RESULT = DWORD;
8637 STRUCT!{struct TP_WAIT {
8638     dummy: *mut c_void,
8639 }}
8640 pub type PTP_WAIT = *mut TP_WAIT;
8641 FN!{stdcall PTP_WAIT_CALLBACK(
8642     Instance: PTP_CALLBACK_INSTANCE,
8643     Context: PVOID,
8644     Wait: PTP_WAIT,
8645     WaitResult: TP_WAIT_RESULT,
8646 ) -> ()}
8647 STRUCT!{struct TP_IO {
8648     dummy: *mut c_void,
8649 }}
8650 pub type PTP_IO = *mut TP_IO;
8651 pub const ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION: ULONG = 1;
8652 pub const ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION: ULONG = 2;
8653 pub const ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION: ULONG = 3;
8654 pub const ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION: ULONG = 4;
8655 pub const ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION: ULONG = 5;
8656 pub const ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION: ULONG = 6;
8657 pub const ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION: ULONG = 7;
8658 pub const ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE: ULONG = 8;
8659 pub const ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES: ULONG = 9;
8660 pub const ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS: ULONG = 10;
8661 pub const ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO: ULONG = 11;
8662 STRUCT!{struct ACTIVATION_CONTEXT {
8663     dummy: *mut c_void,
8664 }}
8665