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