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