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