1use 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; pub 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; pub type PUWSTR = *mut WCHAR; pub type LPCWSTR = *const WCHAR;
52pub type PCWSTR = *const WCHAR;
53pub type PZPCWSTR = *mut PCWSTR;
54pub type PCZPCWSTR = *const PCWSTR;
55pub type LPCUWSTR = *const WCHAR; pub type PCUWSTR = *const WCHAR; pub type PZZWSTR = *mut WCHAR;
58pub type PCZZWSTR = *const WCHAR;
59pub type PUZZWSTR = *mut WCHAR; pub type PCUZZWSTR = *const WCHAR; pub type PNZWCH = *mut WCHAR;
62pub type PCNZWCH = *const WCHAR;
63pub type PUNZWCH = *mut WCHAR; pub type PCUNZWCH = *const WCHAR; pub type LPCWCHAR = *const WCHAR;
66pub type PCWCHAR = *const WCHAR;
67pub type LPCUWCHAR = *const WCHAR; pub type PCUWCHAR = *const WCHAR; pub 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; pub type PCUCSSTR = *const UCSCHAR;
78pub type PCUUCSSTR = *const UCSCHAR; pub type PUUCSCHAR = *mut UCSCHAR; pub type PCUUCSCHAR = *const UCSCHAR; pub 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;
99pub 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; STRUCT!{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 { Low: ULONGLONG,
912 High: LONGLONG,
913}}
914pub type PM128A = *mut M128A;
915#[cfg(target_pointer_width = "32")]
916STRUCT!{struct XSAVE_FORMAT { 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 { 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 { Mask: DWORD64,
974 CompactionMask: DWORD64,
975 Reserved2: [DWORD64; 6],
976}}
977pub type PXSAVE_AREA_HEADER = *mut XSAVE_AREA_HEADER;
978STRUCT!{struct XSAVE_AREA { 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#[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 { 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} #[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} STRUCT!{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 { 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} #[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} pub 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 { 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#[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}}