winapi_forked_icmpapi/um/
winnt.rs

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