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