]>
Commit | Line | Data |
---|---|---|
923072b8 FG |
1 | use core::mem::uninitialized; |
2 | use core::ptr::read_volatile; | |
3 | #[cfg(target_arch = "x86")] | |
4 | use core::sync::atomic::spin_loop_hint; | |
5 | use crate::ntapi_base::{CLIENT_ID, KPRIORITY, KSYSTEM_TIME, PRTL_ATOM, RTL_ATOM}; | |
6 | use crate::ntioapi::{BUS_DATA_TYPE, FILE_IO_COMPLETION_INFORMATION, INTERFACE_TYPE}; | |
7 | use crate::ntkeapi::{KPROFILE_SOURCE, KTHREAD_STATE, KWAIT_REASON}; | |
8 | use crate::ntldr::RTL_PROCESS_MODULE_INFORMATION_EX; | |
9 | use crate::ntpebteb::PTEB; | |
10 | use crate::ntpoapi::COUNTED_REASON_CONTEXT; | |
11 | use winapi::shared::basetsd::{KAFFINITY, PULONG64, PULONG_PTR, SIZE_T, ULONG64, ULONG_PTR}; | |
12 | use winapi::shared::evntrace::PROFILE_SOURCE_INFO; | |
13 | use winapi::shared::guiddef::{GUID, LPGUID}; | |
14 | use winapi::shared::ntdef::{ | |
15 | BOOLEAN, CCHAR, EVENT_TYPE, HANDLE, LANGID, LARGE_INTEGER, LCID, LOGICAL, LONG, LONGLONG, | |
16 | NTSTATUS, NT_PRODUCT_TYPE, PBOOLEAN, PCHAR, PCWNF_STATE_NAME, PGROUP_AFFINITY, PHANDLE, | |
17 | PHYSICAL_ADDRESS, PLARGE_INTEGER, PLCID, PLONG, PLUID, POBJECT_ATTRIBUTES, PUCHAR, | |
18 | PULARGE_INTEGER, PULONG, PUNICODE_STRING, PUSHORT, PVOID, PWNF_STATE_NAME, PWSTR, TIMER_TYPE, | |
19 | UCHAR, ULARGE_INTEGER, ULONG, ULONGLONG, UNICODE_STRING, USHORT, VOID, WCHAR, WNF_STATE_NAME, | |
20 | }; | |
21 | use winapi::um::winnt::{ | |
22 | ACCESS_MASK, ANYSIZE_ARRAY, FIRMWARE_TYPE, GENERIC_MAPPING, PSECURITY_DESCRIPTOR, | |
23 | STANDARD_RIGHTS_REQUIRED, SYNCHRONIZE, XSTATE_CONFIGURATION, | |
24 | }; | |
25 | use crate::winapi_local::um::winnt::UInt32x32To64; | |
26 | EXTERN!{extern "system" { | |
27 | fn NtDelayExecution( | |
28 | Alertable: BOOLEAN, | |
29 | DelayInterval: PLARGE_INTEGER, | |
30 | ) -> NTSTATUS; | |
31 | fn NtQuerySystemEnvironmentValue( | |
32 | VariableName: PUNICODE_STRING, | |
33 | VariableValue: PWSTR, | |
34 | ValueLength: USHORT, | |
35 | ReturnLength: PUSHORT, | |
36 | ) -> NTSTATUS; | |
37 | fn NtSetSystemEnvironmentValue( | |
38 | VariableName: PUNICODE_STRING, | |
39 | VariableValue: PUNICODE_STRING, | |
40 | ) -> NTSTATUS; | |
41 | fn NtQuerySystemEnvironmentValueEx( | |
42 | VariableName: PUNICODE_STRING, | |
43 | VendorGuid: LPGUID, | |
44 | Value: PVOID, | |
45 | ValueLength: PULONG, | |
46 | Attributes: PULONG, | |
47 | ) -> NTSTATUS; | |
48 | fn NtSetSystemEnvironmentValueEx( | |
49 | VariableName: PUNICODE_STRING, | |
50 | VendorGuid: LPGUID, | |
51 | Value: PVOID, | |
52 | ValueLength: ULONG, | |
53 | Attributes: ULONG, | |
54 | ) -> NTSTATUS; | |
55 | fn NtEnumerateSystemEnvironmentValuesEx( | |
56 | InformationClass: ULONG, | |
57 | Buffer: PVOID, | |
58 | BufferLength: PULONG, | |
59 | ) -> NTSTATUS; | |
60 | }} | |
61 | STRUCT!{struct BOOT_ENTRY { | |
62 | Version: ULONG, | |
63 | Length: ULONG, | |
64 | Id: ULONG, | |
65 | Attributes: ULONG, | |
66 | FriendlyNameOffset: ULONG, | |
67 | BootFilePathOffset: ULONG, | |
68 | OsOptionsLength: ULONG, | |
69 | OsOptions: [UCHAR; 1], | |
70 | }} | |
71 | pub type PBOOT_ENTRY = *mut BOOT_ENTRY; | |
72 | STRUCT!{struct BOOT_ENTRY_LIST { | |
73 | NextEntryOffset: ULONG, | |
74 | BootEntry: BOOT_ENTRY, | |
75 | }} | |
76 | pub type PBOOT_ENTRY_LIST = *mut BOOT_ENTRY_LIST; | |
77 | STRUCT!{struct BOOT_OPTIONS { | |
78 | Version: ULONG, | |
79 | Length: ULONG, | |
80 | Timeout: ULONG, | |
81 | CurrentBootEntryId: ULONG, | |
82 | NextBootEntryId: ULONG, | |
83 | HeadlessRedirection: [WCHAR; 1], | |
84 | }} | |
85 | pub type PBOOT_OPTIONS = *mut BOOT_OPTIONS; | |
86 | STRUCT!{struct FILE_PATH { | |
87 | Version: ULONG, | |
88 | Length: ULONG, | |
89 | Type: ULONG, | |
90 | FilePath: [UCHAR; 1], | |
91 | }} | |
92 | pub type PFILE_PATH = *mut FILE_PATH; | |
93 | STRUCT!{struct EFI_DRIVER_ENTRY { | |
94 | Version: ULONG, | |
95 | Length: ULONG, | |
96 | Id: ULONG, | |
97 | FriendlyNameOffset: ULONG, | |
98 | DriverFilePathOffset: ULONG, | |
99 | }} | |
100 | pub type PEFI_DRIVER_ENTRY = *mut EFI_DRIVER_ENTRY; | |
101 | STRUCT!{struct EFI_DRIVER_ENTRY_LIST { | |
102 | NextEntryOffset: ULONG, | |
103 | DriverEntry: EFI_DRIVER_ENTRY, | |
104 | }} | |
105 | pub type PEFI_DRIVER_ENTRY_LIST = *mut EFI_DRIVER_ENTRY_LIST; | |
106 | EXTERN!{extern "system" { | |
107 | fn NtAddBootEntry( | |
108 | BootEntry: PBOOT_ENTRY, | |
109 | Id: PULONG, | |
110 | ) -> NTSTATUS; | |
111 | fn NtDeleteBootEntry( | |
112 | Id: ULONG, | |
113 | ) -> NTSTATUS; | |
114 | fn NtModifyBootEntry( | |
115 | BootEntry: PBOOT_ENTRY, | |
116 | ) -> NTSTATUS; | |
117 | fn NtEnumerateBootEntries( | |
118 | Buffer: PVOID, | |
119 | BufferLength: PULONG, | |
120 | ) -> NTSTATUS; | |
121 | fn NtQueryBootEntryOrder( | |
122 | Ids: PULONG, | |
123 | Count: PULONG, | |
124 | ) -> NTSTATUS; | |
125 | fn NtSetBootEntryOrder( | |
126 | Ids: PULONG, | |
127 | Count: ULONG, | |
128 | ) -> NTSTATUS; | |
129 | fn NtQueryBootOptions( | |
130 | BootOptions: PBOOT_OPTIONS, | |
131 | BootOptionsLength: PULONG, | |
132 | ) -> NTSTATUS; | |
133 | fn NtSetBootOptions( | |
134 | BootOptions: PBOOT_OPTIONS, | |
135 | FieldsToChange: ULONG, | |
136 | ) -> NTSTATUS; | |
137 | fn NtTranslateFilePath( | |
138 | InputFilePath: PFILE_PATH, | |
139 | OutputType: ULONG, | |
140 | OutputFilePath: PFILE_PATH, | |
141 | OutputFilePathLength: PULONG, | |
142 | ) -> NTSTATUS; | |
143 | fn NtAddDriverEntry( | |
144 | DriverEntry: PEFI_DRIVER_ENTRY, | |
145 | Id: PULONG, | |
146 | ) -> NTSTATUS; | |
147 | fn NtDeleteDriverEntry( | |
148 | Id: ULONG, | |
149 | ) -> NTSTATUS; | |
150 | fn NtModifyDriverEntry( | |
151 | DriverEntry: PEFI_DRIVER_ENTRY, | |
152 | ) -> NTSTATUS; | |
153 | fn NtEnumerateDriverEntries( | |
154 | Buffer: PVOID, | |
155 | BufferLength: PULONG, | |
156 | ) -> NTSTATUS; | |
157 | fn NtQueryDriverEntryOrder( | |
158 | Ids: PULONG, | |
159 | Count: PULONG, | |
160 | ) -> NTSTATUS; | |
161 | fn NtSetDriverEntryOrder( | |
162 | Ids: PULONG, | |
163 | Count: ULONG, | |
164 | ) -> NTSTATUS; | |
165 | }} | |
166 | ENUM!{enum FILTER_BOOT_OPTION_OPERATION { | |
167 | FilterBootOptionOperationOpenSystemStore = 0, | |
168 | FilterBootOptionOperationSetElement = 1, | |
169 | FilterBootOptionOperationDeleteElement = 2, | |
170 | FilterBootOptionOperationMax = 3, | |
171 | }} | |
172 | EXTERN!{extern "system" { | |
173 | fn NtFilterBootOption( | |
174 | FilterOperation: FILTER_BOOT_OPTION_OPERATION, | |
175 | ObjectType: ULONG, | |
176 | ElementType: ULONG, | |
177 | Data: PVOID, | |
178 | DataSize: ULONG, | |
179 | ) -> NTSTATUS; | |
180 | }} | |
181 | pub const EVENT_QUERY_STATE: u32 = 0x0001; | |
182 | ENUM!{enum EVENT_INFORMATION_CLASS { | |
183 | EventBasicInformation = 0, | |
184 | }} | |
185 | STRUCT!{struct EVENT_BASIC_INFORMATION { | |
186 | EventType: EVENT_TYPE, | |
187 | EventState: LONG, | |
188 | }} | |
189 | pub type PEVENT_BASIC_INFORMATION = *mut EVENT_BASIC_INFORMATION; | |
190 | EXTERN!{extern "system" { | |
191 | fn NtCreateEvent( | |
192 | EventHandle: PHANDLE, | |
193 | DesiredAccess: ACCESS_MASK, | |
194 | ObjectAttributes: POBJECT_ATTRIBUTES, | |
195 | EventType: EVENT_TYPE, | |
196 | InitialState: BOOLEAN, | |
197 | ) -> NTSTATUS; | |
198 | fn NtOpenEvent( | |
199 | EventHandle: PHANDLE, | |
200 | DesiredAccess: ACCESS_MASK, | |
201 | ObjectAttributes: POBJECT_ATTRIBUTES, | |
202 | ) -> NTSTATUS; | |
203 | fn NtSetEvent( | |
204 | EventHandle: HANDLE, | |
205 | PreviousState: PLONG, | |
206 | ) -> NTSTATUS; | |
207 | fn NtSetEventBoostPriority( | |
208 | EventHandle: HANDLE, | |
209 | ) -> NTSTATUS; | |
210 | fn NtClearEvent( | |
211 | EventHandle: HANDLE, | |
212 | ) -> NTSTATUS; | |
213 | fn NtResetEvent( | |
214 | EventHandle: HANDLE, | |
215 | PreviousState: PLONG, | |
216 | ) -> NTSTATUS; | |
217 | fn NtPulseEvent( | |
218 | EventHandle: HANDLE, | |
219 | PreviousState: PLONG, | |
220 | ) -> NTSTATUS; | |
221 | fn NtQueryEvent( | |
222 | EventHandle: HANDLE, | |
223 | EventInformationClass: EVENT_INFORMATION_CLASS, | |
224 | EventInformation: PVOID, | |
225 | EventInformationLength: ULONG, | |
226 | ReturnLength: PULONG, | |
227 | ) -> NTSTATUS; | |
228 | }} | |
229 | pub const EVENT_PAIR_ALL_ACCESS: ACCESS_MASK = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE; | |
230 | EXTERN!{extern "system" { | |
231 | fn NtCreateEventPair( | |
232 | EventPairHandle: PHANDLE, | |
233 | DesiredAccess: ACCESS_MASK, | |
234 | ObjectAttributes: POBJECT_ATTRIBUTES, | |
235 | ) -> NTSTATUS; | |
236 | fn NtOpenEventPair( | |
237 | EventPairHandle: PHANDLE, | |
238 | DesiredAccess: ACCESS_MASK, | |
239 | ObjectAttributes: POBJECT_ATTRIBUTES, | |
240 | ) -> NTSTATUS; | |
241 | fn NtSetLowEventPair( | |
242 | EventPairHandle: HANDLE, | |
243 | ) -> NTSTATUS; | |
244 | fn NtSetHighEventPair( | |
245 | EventPairHandle: HANDLE, | |
246 | ) -> NTSTATUS; | |
247 | fn NtWaitLowEventPair( | |
248 | EventPairHandle: HANDLE, | |
249 | ) -> NTSTATUS; | |
250 | fn NtWaitHighEventPair( | |
251 | EventPairHandle: HANDLE, | |
252 | ) -> NTSTATUS; | |
253 | fn NtSetLowWaitHighEventPair( | |
254 | EventPairHandle: HANDLE, | |
255 | ) -> NTSTATUS; | |
256 | fn NtSetHighWaitLowEventPair( | |
257 | EventPairHandle: HANDLE, | |
258 | ) -> NTSTATUS; | |
259 | }} | |
260 | ENUM!{enum MUTANT_INFORMATION_CLASS { | |
261 | MutantBasicInformation = 0, | |
262 | MutantOwnerInformation = 1, | |
263 | }} | |
264 | STRUCT!{struct MUTANT_BASIC_INFORMATION { | |
265 | CurrentCount: LONG, | |
266 | OwnedByCaller: BOOLEAN, | |
267 | AbandonedState: BOOLEAN, | |
268 | }} | |
269 | pub type PMUTANT_BASIC_INFORMATION = *mut MUTANT_BASIC_INFORMATION; | |
270 | STRUCT!{struct MUTANT_OWNER_INFORMATION { | |
271 | ClientId: CLIENT_ID, | |
272 | }} | |
273 | pub type PMUTANT_OWNER_INFORMATION = *mut MUTANT_OWNER_INFORMATION; | |
274 | EXTERN!{extern "system" { | |
275 | fn NtCreateMutant( | |
276 | MutantHandle: PHANDLE, | |
277 | DesiredAccess: ACCESS_MASK, | |
278 | ObjectAttributes: POBJECT_ATTRIBUTES, | |
279 | InitialOwner: BOOLEAN, | |
280 | ) -> NTSTATUS; | |
281 | fn NtOpenMutant( | |
282 | MutantHandle: PHANDLE, | |
283 | DesiredAccess: ACCESS_MASK, | |
284 | ObjectAttributes: POBJECT_ATTRIBUTES, | |
285 | ) -> NTSTATUS; | |
286 | fn NtReleaseMutant( | |
287 | MutantHandle: HANDLE, | |
288 | PreviousCount: PLONG, | |
289 | ) -> NTSTATUS; | |
290 | fn NtQueryMutant( | |
291 | MutantHandle: HANDLE, | |
292 | MutantInformationClass: MUTANT_INFORMATION_CLASS, | |
293 | MutantInformation: PVOID, | |
294 | MutantInformationLength: ULONG, | |
295 | ReturnLength: PULONG, | |
296 | ) -> NTSTATUS; | |
297 | }} | |
298 | pub const SEMAPHORE_QUERY_STATE: u32 = 0x0001; | |
299 | ENUM!{enum SEMAPHORE_INFORMATION_CLASS { | |
300 | SemaphoreBasicInformation = 0, | |
301 | }} | |
302 | STRUCT!{struct SEMAPHORE_BASIC_INFORMATION { | |
303 | CurrentCount: LONG, | |
304 | MaximumCount: LONG, | |
305 | }} | |
306 | pub type PSEMAPHORE_BASIC_INFORMATION = *mut SEMAPHORE_BASIC_INFORMATION; | |
307 | EXTERN!{extern "system" { | |
308 | fn NtCreateSemaphore( | |
309 | SemaphoreHandle: PHANDLE, | |
310 | DesiredAccess: ACCESS_MASK, | |
311 | ObjectAttributes: POBJECT_ATTRIBUTES, | |
312 | InitialCount: LONG, | |
313 | MaximumCount: LONG, | |
314 | ) -> NTSTATUS; | |
315 | fn NtOpenSemaphore( | |
316 | SemaphoreHandle: PHANDLE, | |
317 | DesiredAccess: ACCESS_MASK, | |
318 | ObjectAttributes: POBJECT_ATTRIBUTES, | |
319 | ) -> NTSTATUS; | |
320 | fn NtReleaseSemaphore( | |
321 | SemaphoreHandle: HANDLE, | |
322 | ReleaseCount: LONG, | |
323 | PreviousCount: PLONG, | |
324 | ) -> NTSTATUS; | |
325 | fn NtQuerySemaphore( | |
326 | SemaphoreHandle: HANDLE, | |
327 | SemaphoreInformationClass: SEMAPHORE_INFORMATION_CLASS, | |
328 | SemaphoreInformation: PVOID, | |
329 | SemaphoreInformationLength: ULONG, | |
330 | ReturnLength: PULONG, | |
331 | ) -> NTSTATUS; | |
332 | }} | |
333 | ENUM!{enum TIMER_INFORMATION_CLASS { | |
334 | TimerBasicInformation = 0, | |
335 | }} | |
336 | STRUCT!{struct TIMER_BASIC_INFORMATION { | |
337 | RemainingTime: LARGE_INTEGER, | |
338 | TimerState: BOOLEAN, | |
339 | }} | |
340 | pub type PTIMER_BASIC_INFORMATION = *mut TIMER_BASIC_INFORMATION; | |
341 | FN!{stdcall PTIMER_APC_ROUTINE( | |
342 | TimerContext: PVOID, | |
343 | TimerLowValue: ULONG, | |
344 | TimerHighValue: LONG, | |
345 | ) -> ()} | |
346 | ENUM!{enum TIMER_SET_INFORMATION_CLASS { | |
347 | TimerSetCoalescableTimer = 0, | |
348 | MaxTimerInfoClass = 1, | |
349 | }} | |
350 | STRUCT!{struct TIMER_SET_COALESCABLE_TIMER_INFO { | |
351 | DueTime: LARGE_INTEGER, | |
352 | TimerApcRoutine: PTIMER_APC_ROUTINE, | |
353 | TimerContext: PVOID, | |
354 | WakeContext: *mut COUNTED_REASON_CONTEXT, | |
355 | Period: ULONG, | |
356 | TolerableDelay: ULONG, | |
357 | PreviousState: PBOOLEAN, | |
358 | }} | |
359 | pub type PTIMER_SET_COALESCABLE_TIMER_INFO = *mut TIMER_SET_COALESCABLE_TIMER_INFO; | |
360 | EXTERN!{extern "system" { | |
361 | fn NtCreateTimer( | |
362 | TimerHandle: PHANDLE, | |
363 | DesiredAccess: ACCESS_MASK, | |
364 | ObjectAttributes: POBJECT_ATTRIBUTES, | |
365 | TimerType: TIMER_TYPE, | |
366 | ) -> NTSTATUS; | |
367 | fn NtOpenTimer( | |
368 | TimerHandle: PHANDLE, | |
369 | DesiredAccess: ACCESS_MASK, | |
370 | ObjectAttributes: POBJECT_ATTRIBUTES, | |
371 | ) -> NTSTATUS; | |
372 | fn NtSetTimer( | |
373 | TimerHandle: HANDLE, | |
374 | DueTime: PLARGE_INTEGER, | |
375 | TimerApcRoutine: PTIMER_APC_ROUTINE, | |
376 | TimerContext: PVOID, | |
377 | ResumeTimer: BOOLEAN, | |
378 | Period: LONG, | |
379 | PreviousState: PBOOLEAN, | |
380 | ) -> NTSTATUS; | |
381 | fn NtSetTimerEx( | |
382 | TimerHandle: HANDLE, | |
383 | TimerSetInformationClass: TIMER_SET_INFORMATION_CLASS, | |
384 | TimerSetInformation: PVOID, | |
385 | TimerSetInformationLength: ULONG, | |
386 | ) -> NTSTATUS; | |
387 | fn NtCancelTimer( | |
388 | TimerHandle: HANDLE, | |
389 | CurrentState: PBOOLEAN, | |
390 | ) -> NTSTATUS; | |
391 | fn NtQueryTimer( | |
392 | TimerHandle: HANDLE, | |
393 | TimerInformationClass: TIMER_INFORMATION_CLASS, | |
394 | TimerInformation: PVOID, | |
395 | TimerInformationLength: ULONG, | |
396 | ReturnLength: PULONG, | |
397 | ) -> NTSTATUS; | |
398 | fn NtCreateIRTimer( | |
399 | TimerHandle: PHANDLE, | |
400 | DesiredAccess: ACCESS_MASK, | |
401 | ) -> NTSTATUS; | |
402 | fn NtSetIRTimer( | |
403 | TimerHandle: HANDLE, | |
404 | DueTime: PLARGE_INTEGER, | |
405 | ) -> NTSTATUS; | |
406 | }} | |
407 | STRUCT!{struct T2_SET_PARAMETERS { | |
408 | Version: ULONG, | |
409 | Reserved: ULONG, | |
410 | NoWakeTolerance: LONGLONG, | |
411 | }} | |
412 | pub type PT2_SET_PARAMETERS = *mut T2_SET_PARAMETERS; | |
413 | pub type PT2_CANCEL_PARAMETERS = PVOID; | |
414 | EXTERN!{extern "system" { | |
415 | fn NtCreateTimer2( | |
416 | TimerHandle: PHANDLE, | |
417 | Reserved1: PVOID, | |
418 | Reserved2: PVOID, | |
419 | Attributes: ULONG, | |
420 | DesiredAccess: ACCESS_MASK, | |
421 | ) -> NTSTATUS; | |
422 | fn NtSetTimer2( | |
423 | TimerHandle: HANDLE, | |
424 | DueTime: PLARGE_INTEGER, | |
425 | Period: PLARGE_INTEGER, | |
426 | Parameters: PT2_SET_PARAMETERS, | |
427 | ) -> NTSTATUS; | |
428 | fn NtCancelTimer2( | |
429 | TimerHandle: HANDLE, | |
430 | Parameters: PT2_CANCEL_PARAMETERS, | |
431 | ) -> NTSTATUS; | |
432 | }} | |
433 | pub const PROFILE_CONTROL: u32 = 0x0001; | |
434 | pub const PROFILE_ALL_ACCESS: u32 = STANDARD_RIGHTS_REQUIRED | PROFILE_CONTROL; | |
435 | EXTERN!{extern "system" { | |
436 | fn NtCreateProfile( | |
437 | ProfileHandle: PHANDLE, | |
438 | Process: HANDLE, | |
439 | ProfileBase: PVOID, | |
440 | ProfileSize: SIZE_T, | |
441 | BucketSize: ULONG, | |
442 | Buffer: PULONG, | |
443 | BufferSize: ULONG, | |
444 | ProfileSource: KPROFILE_SOURCE, | |
445 | Affinity: KAFFINITY, | |
446 | ) -> NTSTATUS; | |
447 | fn NtCreateProfileEx( | |
448 | ProfileHandle: PHANDLE, | |
449 | Process: HANDLE, | |
450 | ProfileBase: PVOID, | |
451 | ProfileSize: SIZE_T, | |
452 | BucketSize: ULONG, | |
453 | Buffer: PULONG, | |
454 | BufferSize: ULONG, | |
455 | ProfileSource: KPROFILE_SOURCE, | |
456 | GroupCount: USHORT, | |
457 | GroupAffinity: PGROUP_AFFINITY, | |
458 | ) -> NTSTATUS; | |
459 | fn NtStartProfile( | |
460 | ProfileHandle: HANDLE, | |
461 | ) -> NTSTATUS; | |
462 | fn NtStopProfile( | |
463 | ProfileHandle: HANDLE, | |
464 | ) -> NTSTATUS; | |
465 | fn NtQueryIntervalProfile( | |
466 | ProfileSource: KPROFILE_SOURCE, | |
467 | Interval: PULONG, | |
468 | ) -> NTSTATUS; | |
469 | fn NtSetIntervalProfile( | |
470 | Interval: ULONG, | |
471 | Source: KPROFILE_SOURCE, | |
472 | ) -> NTSTATUS; | |
473 | }} | |
474 | pub const KEYEDEVENT_WAIT: ULONG = 0x0001; | |
475 | pub const KEYEDEVENT_WAKE: ULONG = 0x0002; | |
476 | pub const KEYEDEVENT_ALL_ACCESS: ACCESS_MASK = | |
477 | STANDARD_RIGHTS_REQUIRED | KEYEDEVENT_WAIT | KEYEDEVENT_WAKE; | |
478 | EXTERN!{extern "system" { | |
479 | fn NtCreateKeyedEvent( | |
480 | KeyedEventHandle: PHANDLE, | |
481 | DesiredAccess: ACCESS_MASK, | |
482 | ObjectAttributes: POBJECT_ATTRIBUTES, | |
483 | Flags: ULONG, | |
484 | ) -> NTSTATUS; | |
485 | fn NtOpenKeyedEvent( | |
486 | KeyedEventHandle: PHANDLE, | |
487 | DesiredAccess: ACCESS_MASK, | |
488 | ObjectAttributes: POBJECT_ATTRIBUTES, | |
489 | ) -> NTSTATUS; | |
490 | fn NtReleaseKeyedEvent( | |
491 | KeyedEventHandle: HANDLE, | |
492 | KeyValue: PVOID, | |
493 | Alertable: BOOLEAN, | |
494 | Timeout: PLARGE_INTEGER, | |
495 | ) -> NTSTATUS; | |
496 | fn NtWaitForKeyedEvent( | |
497 | KeyedEventHandle: HANDLE, | |
498 | KeyValue: PVOID, | |
499 | Alertable: BOOLEAN, | |
500 | Timeout: PLARGE_INTEGER, | |
501 | ) -> NTSTATUS; | |
502 | fn NtUmsThreadYield( | |
503 | SchedulerParam: PVOID, | |
504 | ) -> NTSTATUS; | |
505 | }} | |
506 | ENUM!{enum WNF_STATE_NAME_LIFETIME { | |
507 | WnfWellKnownStateName = 0, | |
508 | WnfPermanentStateName = 1, | |
509 | WnfPersistentStateName = 2, | |
510 | WnfTemporaryStateName = 3, | |
511 | }} | |
512 | ENUM!{enum WNF_STATE_NAME_INFORMATION { | |
513 | WnfInfoStateNameExist = 0, | |
514 | WnfInfoSubscribersPresent = 1, | |
515 | WnfInfoIsQuiescent = 2, | |
516 | }} | |
517 | ENUM!{enum WNF_DATA_SCOPE { | |
518 | WnfDataScopeSystem = 0, | |
519 | WnfDataScopeSession = 1, | |
520 | WnfDataScopeUser = 2, | |
521 | WnfDataScopeProcess = 3, | |
522 | WnfDataScopeMachine = 4, | |
523 | }} | |
524 | STRUCT!{struct WNF_TYPE_ID { | |
525 | TypeId: GUID, | |
526 | }} | |
527 | pub type PWNF_TYPE_ID = *mut WNF_TYPE_ID; | |
528 | pub type PCWNF_TYPE_ID = *const WNF_TYPE_ID; | |
529 | pub type PWNF_CHANGE_STAMP = *mut ULONG; | |
530 | pub type WNF_CHANGE_STAMP = ULONG; | |
531 | STRUCT!{struct WNF_DELIVERY_DESCRIPTOR { | |
532 | SubscriptionId: ULONGLONG, | |
533 | StateName: WNF_STATE_NAME, | |
534 | ChangeStamp: WNF_CHANGE_STAMP, | |
535 | StateDataSize: ULONG, | |
536 | EventMask: ULONG, | |
537 | TypeId: WNF_TYPE_ID, | |
538 | StateDataOffset: ULONG, | |
539 | }} | |
540 | pub type PWNF_DELIVERY_DESCRIPTOR = *mut WNF_DELIVERY_DESCRIPTOR; | |
541 | EXTERN!{extern "system" { | |
542 | fn NtCreateWnfStateName( | |
543 | StateName: PWNF_STATE_NAME, | |
544 | NameLifetime: WNF_STATE_NAME_LIFETIME, | |
545 | DataScope: WNF_DATA_SCOPE, | |
546 | PersistData: BOOLEAN, | |
547 | TypeId: PCWNF_TYPE_ID, | |
548 | MaximumStateSize: ULONG, | |
549 | SecurityDescriptor: PSECURITY_DESCRIPTOR, | |
550 | ) -> NTSTATUS; | |
551 | fn NtDeleteWnfStateName( | |
552 | StateName: PCWNF_STATE_NAME, | |
553 | ) -> NTSTATUS; | |
554 | fn NtUpdateWnfStateData( | |
555 | StateName: PCWNF_STATE_NAME, | |
556 | Buffer: *const VOID, | |
557 | Length: ULONG, | |
558 | TypeId: PCWNF_TYPE_ID, | |
559 | ExplicitScope: *const VOID, | |
560 | MatchingChangeStamp: WNF_CHANGE_STAMP, | |
561 | CheckStamp: LOGICAL, | |
562 | ) -> NTSTATUS; | |
563 | fn NtDeleteWnfStateData( | |
564 | StateName: PCWNF_STATE_NAME, | |
565 | ExplicitScope: *const VOID, | |
566 | ) -> NTSTATUS; | |
567 | fn NtQueryWnfStateData( | |
568 | StateName: PCWNF_STATE_NAME, | |
569 | TypeId: PCWNF_TYPE_ID, | |
570 | ExplicitScope: *const VOID, | |
571 | ChangeStamp: PWNF_CHANGE_STAMP, | |
572 | Buffer: PVOID, | |
573 | BufferSize: PULONG, | |
574 | ) -> NTSTATUS; | |
575 | fn NtQueryWnfStateNameInformation( | |
576 | StateName: PCWNF_STATE_NAME, | |
577 | NameInfoClass: WNF_STATE_NAME_INFORMATION, | |
578 | ExplicitScope: *const VOID, | |
579 | InfoBuffer: PVOID, | |
580 | InfoBufferSize: ULONG, | |
581 | ) -> NTSTATUS; | |
582 | fn NtSubscribeWnfStateChange( | |
583 | StateName: PCWNF_STATE_NAME, | |
584 | ChangeStamp: WNF_CHANGE_STAMP, | |
585 | EventMask: ULONG, | |
586 | SubscriptionId: PULONG64, | |
587 | ) -> NTSTATUS; | |
588 | fn NtUnsubscribeWnfStateChange( | |
589 | StateName: PCWNF_STATE_NAME, | |
590 | ) -> NTSTATUS; | |
591 | fn NtGetCompleteWnfStateSubscription( | |
592 | OldDescriptorStateName: PWNF_STATE_NAME, | |
593 | OldSubscriptionId: *mut ULONG64, | |
594 | OldDescriptorEventMask: ULONG, | |
595 | OldDescriptorStatus: ULONG, | |
596 | NewDeliveryDescriptor: PWNF_DELIVERY_DESCRIPTOR, | |
597 | DescriptorSize: ULONG, | |
598 | ) -> NTSTATUS; | |
599 | fn NtSetWnfProcessNotificationEvent( | |
600 | NotificationEvent: HANDLE, | |
601 | ) -> NTSTATUS; | |
602 | }} | |
603 | pub const WORKER_FACTORY_RELEASE_WORKER: u32 = 0x0001; | |
604 | pub const WORKER_FACTORY_WAIT: u32 = 0x0002; | |
605 | pub const WORKER_FACTORY_SET_INFORMATION: u32 = 0x0004; | |
606 | pub const WORKER_FACTORY_QUERY_INFORMATION: u32 = 0x0008; | |
607 | pub const WORKER_FACTORY_READY_WORKER: u32 = 0x0010; | |
608 | pub const WORKER_FACTORY_SHUTDOWN: u32 = 0x0020; | |
609 | pub const WORKER_FACTORY_ALL_ACCESS: ACCESS_MASK = STANDARD_RIGHTS_REQUIRED | |
610 | | WORKER_FACTORY_RELEASE_WORKER | WORKER_FACTORY_WAIT | WORKER_FACTORY_SET_INFORMATION | |
611 | | WORKER_FACTORY_QUERY_INFORMATION | WORKER_FACTORY_READY_WORKER | WORKER_FACTORY_SHUTDOWN; | |
612 | ENUM!{enum WORKERFACTORYINFOCLASS { | |
613 | WorkerFactoryTimeout = 0, | |
614 | WorkerFactoryRetryTimeout = 1, | |
615 | WorkerFactoryIdleTimeout = 2, | |
616 | WorkerFactoryBindingCount = 3, | |
617 | WorkerFactoryThreadMinimum = 4, | |
618 | WorkerFactoryThreadMaximum = 5, | |
619 | WorkerFactoryPaused = 6, | |
620 | WorkerFactoryBasicInformation = 7, | |
621 | WorkerFactoryAdjustThreadGoal = 8, | |
622 | WorkerFactoryCallbackType = 9, | |
623 | WorkerFactoryStackInformation = 10, | |
624 | WorkerFactoryThreadBasePriority = 11, | |
625 | WorkerFactoryTimeoutWaiters = 12, | |
626 | WorkerFactoryFlags = 13, | |
627 | WorkerFactoryThreadSoftMaximum = 14, | |
628 | MaxWorkerFactoryInfoClass = 15, | |
629 | }} | |
630 | pub type PWORKERFACTORYINFOCLASS = *mut WORKERFACTORYINFOCLASS; | |
631 | STRUCT!{struct WORKER_FACTORY_BASIC_INFORMATION { | |
632 | Timeout: LARGE_INTEGER, | |
633 | RetryTimeout: LARGE_INTEGER, | |
634 | IdleTimeout: LARGE_INTEGER, | |
635 | Paused: BOOLEAN, | |
636 | TimerSet: BOOLEAN, | |
637 | QueuedToExWorker: BOOLEAN, | |
638 | MayCreate: BOOLEAN, | |
639 | CreateInProgress: BOOLEAN, | |
640 | InsertedIntoQueue: BOOLEAN, | |
641 | Shutdown: BOOLEAN, | |
642 | BindingCount: ULONG, | |
643 | ThreadMinimum: ULONG, | |
644 | ThreadMaximum: ULONG, | |
645 | PendingWorkerCount: ULONG, | |
646 | WaitingWorkerCount: ULONG, | |
647 | TotalWorkerCount: ULONG, | |
648 | ReleaseCount: ULONG, | |
649 | InfiniteWaitGoal: LONGLONG, | |
650 | StartRoutine: PVOID, | |
651 | StartParameter: PVOID, | |
652 | ProcessId: HANDLE, | |
653 | StackReserve: SIZE_T, | |
654 | StackCommit: SIZE_T, | |
655 | LastThreadCreationStatus: NTSTATUS, | |
656 | }} | |
657 | pub type PWORKER_FACTORY_BASIC_INFORMATION = *mut WORKER_FACTORY_BASIC_INFORMATION; | |
658 | EXTERN!{extern "system" { | |
659 | fn NtCreateWorkerFactory( | |
660 | WorkerFactoryHandleReturn: PHANDLE, | |
661 | DesiredAccess: ACCESS_MASK, | |
662 | ObjectAttributes: POBJECT_ATTRIBUTES, | |
663 | CompletionPortHandle: HANDLE, | |
664 | WorkerProcessHandle: HANDLE, | |
665 | StartRoutine: PVOID, | |
666 | StartParameter: PVOID, | |
667 | MaxThreadCount: ULONG, | |
668 | StackReserve: SIZE_T, | |
669 | StackCommit: SIZE_T, | |
670 | ) -> NTSTATUS; | |
671 | fn NtQueryInformationWorkerFactory( | |
672 | WorkerFactoryHandle: HANDLE, | |
673 | WorkerFactoryInformationClass: WORKERFACTORYINFOCLASS, | |
674 | WorkerFactoryInformation: PVOID, | |
675 | WorkerFactoryInformationLength: ULONG, | |
676 | ReturnLength: PULONG, | |
677 | ) -> NTSTATUS; | |
678 | fn NtSetInformationWorkerFactory( | |
679 | WorkerFactoryHandle: HANDLE, | |
680 | WorkerFactoryInformationClass: WORKERFACTORYINFOCLASS, | |
681 | WorkerFactoryInformation: PVOID, | |
682 | WorkerFactoryInformationLength: ULONG, | |
683 | ) -> NTSTATUS; | |
684 | fn NtShutdownWorkerFactory( | |
685 | WorkerFactoryHandle: HANDLE, | |
686 | PendingWorkerCount: *mut LONG, | |
687 | ) -> NTSTATUS; | |
688 | fn NtReleaseWorkerFactoryWorker( | |
689 | WorkerFactoryHandle: HANDLE, | |
690 | ) -> NTSTATUS; | |
691 | fn NtWorkerFactoryWorkerReady( | |
692 | WorkerFactoryHandle: HANDLE, | |
693 | ) -> NTSTATUS; | |
694 | fn NtWaitForWorkViaWorkerFactory( | |
695 | WorkerFactoryHandle: HANDLE, | |
696 | MiniPacket: *mut FILE_IO_COMPLETION_INFORMATION, | |
697 | ) -> NTSTATUS; | |
698 | fn NtQuerySystemTime( | |
699 | SystemTime: PLARGE_INTEGER, | |
700 | ) -> NTSTATUS; | |
701 | fn NtSetSystemTime( | |
702 | SystemTime: PLARGE_INTEGER, | |
703 | PreviousTime: PLARGE_INTEGER, | |
704 | ) -> NTSTATUS; | |
705 | fn NtQueryTimerResolution( | |
706 | MaximumTime: PULONG, | |
707 | MinimumTime: PULONG, | |
708 | CurrentTime: PULONG, | |
709 | ) -> NTSTATUS; | |
710 | fn NtSetTimerResolution( | |
711 | DesiredTime: ULONG, | |
712 | SetResolution: BOOLEAN, | |
713 | ActualTime: PULONG, | |
714 | ) -> NTSTATUS; | |
715 | fn NtQueryPerformanceCounter( | |
716 | PerformanceCounter: PLARGE_INTEGER, | |
717 | PerformanceFrequency: PLARGE_INTEGER, | |
718 | ) -> NTSTATUS; | |
719 | fn NtAllocateLocallyUniqueId( | |
720 | Luid: PLUID, | |
721 | ) -> NTSTATUS; | |
722 | fn NtSetUuidSeed( | |
723 | Seed: PCHAR, | |
724 | ) -> NTSTATUS; | |
725 | fn NtAllocateUuids( | |
726 | Time: PULARGE_INTEGER, | |
727 | Range: PULONG, | |
728 | Sequence: PULONG, | |
729 | Seed: PCHAR, | |
730 | ) -> NTSTATUS; | |
731 | }} | |
732 | ENUM!{enum SYSTEM_INFORMATION_CLASS { | |
733 | SystemBasicInformation = 0, | |
734 | SystemProcessorInformation = 1, | |
735 | SystemPerformanceInformation = 2, | |
736 | SystemTimeOfDayInformation = 3, | |
737 | SystemPathInformation = 4, | |
738 | SystemProcessInformation = 5, | |
739 | SystemCallCountInformation = 6, | |
740 | SystemDeviceInformation = 7, | |
741 | SystemProcessorPerformanceInformation = 8, | |
742 | SystemFlagsInformation = 9, | |
743 | SystemCallTimeInformation = 10, | |
744 | SystemModuleInformation = 11, | |
745 | SystemLocksInformation = 12, | |
746 | SystemStackTraceInformation = 13, | |
747 | SystemPagedPoolInformation = 14, | |
748 | SystemNonPagedPoolInformation = 15, | |
749 | SystemHandleInformation = 16, | |
750 | SystemObjectInformation = 17, | |
751 | SystemPageFileInformation = 18, | |
752 | SystemVdmInstemulInformation = 19, | |
753 | SystemVdmBopInformation = 20, | |
754 | SystemFileCacheInformation = 21, | |
755 | SystemPoolTagInformation = 22, | |
756 | SystemInterruptInformation = 23, | |
757 | SystemDpcBehaviorInformation = 24, | |
758 | SystemFullMemoryInformation = 25, | |
759 | SystemLoadGdiDriverInformation = 26, | |
760 | SystemUnloadGdiDriverInformation = 27, | |
761 | SystemTimeAdjustmentInformation = 28, | |
762 | SystemSummaryMemoryInformation = 29, | |
763 | SystemMirrorMemoryInformation = 30, | |
764 | SystemPerformanceTraceInformation = 31, | |
765 | SystemObsolete0 = 32, | |
766 | SystemExceptionInformation = 33, | |
767 | SystemCrashDumpStateInformation = 34, | |
768 | SystemKernelDebuggerInformation = 35, | |
769 | SystemContextSwitchInformation = 36, | |
770 | SystemRegistryQuotaInformation = 37, | |
771 | SystemExtendServiceTableInformation = 38, | |
772 | SystemPrioritySeperation = 39, | |
773 | SystemVerifierAddDriverInformation = 40, | |
774 | SystemVerifierRemoveDriverInformation = 41, | |
775 | SystemProcessorIdleInformation = 42, | |
776 | SystemLegacyDriverInformation = 43, | |
777 | SystemCurrentTimeZoneInformation = 44, | |
778 | SystemLookasideInformation = 45, | |
779 | SystemTimeSlipNotification = 46, | |
780 | SystemSessionCreate = 47, | |
781 | SystemSessionDetach = 48, | |
782 | SystemSessionInformation = 49, | |
783 | SystemRangeStartInformation = 50, | |
784 | SystemVerifierInformation = 51, | |
785 | SystemVerifierThunkExtend = 52, | |
786 | SystemSessionProcessInformation = 53, | |
787 | SystemLoadGdiDriverInSystemSpace = 54, | |
788 | SystemNumaProcessorMap = 55, | |
789 | SystemPrefetcherInformation = 56, | |
790 | SystemExtendedProcessInformation = 57, | |
791 | SystemRecommendedSharedDataAlignment = 58, | |
792 | SystemComPlusPackage = 59, | |
793 | SystemNumaAvailableMemory = 60, | |
794 | SystemProcessorPowerInformation = 61, | |
795 | SystemEmulationBasicInformation = 62, | |
796 | SystemEmulationProcessorInformation = 63, | |
797 | SystemExtendedHandleInformation = 64, | |
798 | SystemLostDelayedWriteInformation = 65, | |
799 | SystemBigPoolInformation = 66, | |
800 | SystemSessionPoolTagInformation = 67, | |
801 | SystemSessionMappedViewInformation = 68, | |
802 | SystemHotpatchInformation = 69, | |
803 | SystemObjectSecurityMode = 70, | |
804 | SystemWatchdogTimerHandler = 71, | |
805 | SystemWatchdogTimerInformation = 72, | |
806 | SystemLogicalProcessorInformation = 73, | |
807 | SystemWow64SharedInformationObsolete = 74, | |
808 | SystemRegisterFirmwareTableInformationHandler = 75, | |
809 | SystemFirmwareTableInformation = 76, | |
810 | SystemModuleInformationEx = 77, | |
811 | SystemVerifierTriageInformation = 78, | |
812 | SystemSuperfetchInformation = 79, | |
813 | SystemMemoryListInformation = 80, | |
814 | SystemFileCacheInformationEx = 81, | |
815 | SystemThreadPriorityClientIdInformation = 82, | |
816 | SystemProcessorIdleCycleTimeInformation = 83, | |
817 | SystemVerifierCancellationInformation = 84, | |
818 | SystemProcessorPowerInformationEx = 85, | |
819 | SystemRefTraceInformation = 86, | |
820 | SystemSpecialPoolInformation = 87, | |
821 | SystemProcessIdInformation = 88, | |
822 | SystemErrorPortInformation = 89, | |
823 | SystemBootEnvironmentInformation = 90, | |
824 | SystemHypervisorInformation = 91, | |
825 | SystemVerifierInformationEx = 92, | |
826 | SystemTimeZoneInformation = 93, | |
827 | SystemImageFileExecutionOptionsInformation = 94, | |
828 | SystemCoverageInformation = 95, | |
829 | SystemPrefetchPatchInformation = 96, | |
830 | SystemVerifierFaultsInformation = 97, | |
831 | SystemSystemPartitionInformation = 98, | |
832 | SystemSystemDiskInformation = 99, | |
833 | SystemProcessorPerformanceDistribution = 100, | |
834 | SystemNumaProximityNodeInformation = 101, | |
835 | SystemDynamicTimeZoneInformation = 102, | |
836 | SystemCodeIntegrityInformation = 103, | |
837 | SystemProcessorMicrocodeUpdateInformation = 104, | |
838 | SystemProcessorBrandString = 105, | |
839 | SystemVirtualAddressInformation = 106, | |
840 | SystemLogicalProcessorAndGroupInformation = 107, | |
841 | SystemProcessorCycleTimeInformation = 108, | |
842 | SystemStoreInformation = 109, | |
843 | SystemRegistryAppendString = 110, | |
844 | SystemAitSamplingValue = 111, | |
845 | SystemVhdBootInformation = 112, | |
846 | SystemCpuQuotaInformation = 113, | |
847 | SystemNativeBasicInformation = 114, | |
848 | SystemSpare1 = 115, | |
849 | SystemLowPriorityIoInformation = 116, | |
850 | SystemTpmBootEntropyInformation = 117, | |
851 | SystemVerifierCountersInformation = 118, | |
852 | SystemPagedPoolInformationEx = 119, | |
853 | SystemSystemPtesInformationEx = 120, | |
854 | SystemNodeDistanceInformation = 121, | |
855 | SystemAcpiAuditInformation = 122, | |
856 | SystemBasicPerformanceInformation = 123, | |
857 | SystemQueryPerformanceCounterInformation = 124, | |
858 | SystemSessionBigPoolInformation = 125, | |
859 | SystemBootGraphicsInformation = 126, | |
860 | SystemScrubPhysicalMemoryInformation = 127, | |
861 | SystemBadPageInformation = 128, | |
862 | SystemProcessorProfileControlArea = 129, | |
863 | SystemCombinePhysicalMemoryInformation = 130, | |
864 | SystemEntropyInterruptTimingCallback = 131, | |
865 | SystemConsoleInformation = 132, | |
866 | SystemPlatformBinaryInformation = 133, | |
867 | SystemThrottleNotificationInformation = 134, | |
868 | SystemHypervisorProcessorCountInformation = 135, | |
869 | SystemDeviceDataInformation = 136, | |
870 | SystemDeviceDataEnumerationInformation = 137, | |
871 | SystemMemoryTopologyInformation = 138, | |
872 | SystemMemoryChannelInformation = 139, | |
873 | SystemBootLogoInformation = 140, | |
874 | SystemProcessorPerformanceInformationEx = 141, | |
875 | SystemSpare0 = 142, | |
876 | SystemSecureBootPolicyInformation = 143, | |
877 | SystemPageFileInformationEx = 144, | |
878 | SystemSecureBootInformation = 145, | |
879 | SystemEntropyInterruptTimingRawInformation = 146, | |
880 | SystemPortableWorkspaceEfiLauncherInformation = 147, | |
881 | SystemFullProcessInformation = 148, | |
882 | SystemKernelDebuggerInformationEx = 149, | |
883 | SystemBootMetadataInformation = 150, | |
884 | SystemSoftRebootInformation = 151, | |
885 | SystemElamCertificateInformation = 152, | |
886 | SystemOfflineDumpConfigInformation = 153, | |
887 | SystemProcessorFeaturesInformation = 154, | |
888 | SystemRegistryReconciliationInformation = 155, | |
889 | SystemEdidInformation = 156, | |
890 | SystemManufacturingInformation = 157, | |
891 | SystemEnergyEstimationConfigInformation = 158, | |
892 | SystemHypervisorDetailInformation = 159, | |
893 | SystemProcessorCycleStatsInformation = 160, | |
894 | SystemVmGenerationCountInformation = 161, | |
895 | SystemTrustedPlatformModuleInformation = 162, | |
896 | SystemKernelDebuggerFlags = 163, | |
897 | SystemCodeIntegrityPolicyInformation = 164, | |
898 | SystemIsolatedUserModeInformation = 165, | |
899 | SystemHardwareSecurityTestInterfaceResultsInformation = 166, | |
900 | SystemSingleModuleInformation = 167, | |
901 | SystemAllowedCpuSetsInformation = 168, | |
902 | SystemVsmProtectionInformation = 169, | |
903 | SystemInterruptCpuSetsInformation = 170, | |
904 | SystemSecureBootPolicyFullInformation = 171, | |
905 | SystemCodeIntegrityPolicyFullInformation = 172, | |
906 | SystemAffinitizedInterruptProcessorInformation = 173, | |
907 | SystemRootSiloInformation = 174, | |
908 | SystemCpuSetInformation = 175, | |
909 | SystemCpuSetTagInformation = 176, | |
910 | SystemWin32WerStartCallout = 177, | |
911 | SystemSecureKernelProfileInformation = 178, | |
912 | SystemCodeIntegrityPlatformManifestInformation = 179, | |
913 | SystemInterruptSteeringInformation = 180, | |
914 | SystemSupportedProcessorArchitectures = 181, | |
915 | SystemMemoryUsageInformation = 182, | |
916 | SystemCodeIntegrityCertificateInformation = 183, | |
917 | SystemPhysicalMemoryInformation = 184, | |
918 | SystemControlFlowTransition = 185, | |
919 | SystemKernelDebuggingAllowed = 186, | |
920 | SystemActivityModerationExeState = 187, | |
921 | SystemActivityModerationUserSettings = 188, | |
922 | SystemCodeIntegrityPoliciesFullInformation = 189, | |
923 | SystemCodeIntegrityUnlockInformation = 190, | |
924 | SystemIntegrityQuotaInformation = 191, | |
925 | SystemFlushInformation = 192, | |
926 | SystemProcessorIdleMaskInformation = 193, | |
927 | SystemSecureDumpEncryptionInformation = 194, | |
928 | SystemWriteConstraintInformation = 195, | |
929 | SystemKernelVaShadowInformation = 196, | |
930 | SystemHypervisorSharedPageInformation = 197, | |
931 | SystemFirmwareBootPerformanceInformation = 198, | |
932 | SystemCodeIntegrityVerificationInformation = 199, | |
933 | SystemFirmwarePartitionInformation = 200, | |
934 | SystemSpeculationControlInformation = 201, | |
935 | SystemDmaGuardPolicyInformation = 202, | |
936 | SystemEnclaveLaunchControlInformation = 203, | |
937 | SystemWorkloadAllowedCpuSetsInformation = 204, | |
938 | SystemCodeIntegrityUnlockModeInformation = 205, | |
939 | SystemLeapSecondInformation = 206, | |
940 | SystemFlags2Information = 207, | |
941 | MaxSystemInfoClass = 208, | |
942 | }} | |
943 | STRUCT!{struct SYSTEM_BASIC_INFORMATION { | |
944 | Reserved: ULONG, | |
945 | TimerResolution: ULONG, | |
946 | PageSize: ULONG, | |
947 | NumberOfPhysicalPages: ULONG, | |
948 | LowestPhysicalPageNumber: ULONG, | |
949 | HighestPhysicalPageNumber: ULONG, | |
950 | AllocationGranularity: ULONG, | |
951 | MinimumUserModeAddress: ULONG_PTR, | |
952 | MaximumUserModeAddress: ULONG_PTR, | |
953 | ActiveProcessorsAffinityMask: ULONG_PTR, | |
954 | NumberOfProcessors: CCHAR, | |
955 | }} | |
956 | pub type PSYSTEM_BASIC_INFORMATION = *mut SYSTEM_BASIC_INFORMATION; | |
957 | STRUCT!{struct SYSTEM_PROCESSOR_INFORMATION { | |
958 | ProcessorArchitecture: USHORT, | |
959 | ProcessorLevel: USHORT, | |
960 | ProcessorRevision: USHORT, | |
961 | MaximumProcessors: USHORT, | |
962 | ProcessorFeatureBits: ULONG, | |
963 | }} | |
964 | pub type PSYSTEM_PROCESSOR_INFORMATION = *mut SYSTEM_PROCESSOR_INFORMATION; | |
965 | STRUCT!{struct SYSTEM_PERFORMANCE_INFORMATION { | |
966 | IdleProcessTime: LARGE_INTEGER, | |
967 | IoReadTransferCount: LARGE_INTEGER, | |
968 | IoWriteTransferCount: LARGE_INTEGER, | |
969 | IoOtherTransferCount: LARGE_INTEGER, | |
970 | IoReadOperationCount: ULONG, | |
971 | IoWriteOperationCount: ULONG, | |
972 | IoOtherOperationCount: ULONG, | |
973 | AvailablePages: ULONG, | |
974 | CommittedPages: ULONG, | |
975 | CommitLimit: ULONG, | |
976 | PeakCommitment: ULONG, | |
977 | PageFaultCount: ULONG, | |
978 | CopyOnWriteCount: ULONG, | |
979 | TransitionCount: ULONG, | |
980 | CacheTransitionCount: ULONG, | |
981 | DemandZeroCount: ULONG, | |
982 | PageReadCount: ULONG, | |
983 | PageReadIoCount: ULONG, | |
984 | CacheReadCount: ULONG, | |
985 | CacheIoCount: ULONG, | |
986 | DirtyPagesWriteCount: ULONG, | |
987 | DirtyWriteIoCount: ULONG, | |
988 | MappedPagesWriteCount: ULONG, | |
989 | MappedWriteIoCount: ULONG, | |
990 | PagedPoolPages: ULONG, | |
991 | NonPagedPoolPages: ULONG, | |
992 | PagedPoolAllocs: ULONG, | |
993 | PagedPoolFrees: ULONG, | |
994 | NonPagedPoolAllocs: ULONG, | |
995 | NonPagedPoolFrees: ULONG, | |
996 | FreeSystemPtes: ULONG, | |
997 | ResidentSystemCodePage: ULONG, | |
998 | TotalSystemDriverPages: ULONG, | |
999 | TotalSystemCodePages: ULONG, | |
1000 | NonPagedPoolLookasideHits: ULONG, | |
1001 | PagedPoolLookasideHits: ULONG, | |
1002 | AvailablePagedPoolPages: ULONG, | |
1003 | ResidentSystemCachePage: ULONG, | |
1004 | ResidentPagedPoolPage: ULONG, | |
1005 | ResidentSystemDriverPage: ULONG, | |
1006 | CcFastReadNoWait: ULONG, | |
1007 | CcFastReadWait: ULONG, | |
1008 | CcFastReadResourceMiss: ULONG, | |
1009 | CcFastReadNotPossible: ULONG, | |
1010 | CcFastMdlReadNoWait: ULONG, | |
1011 | CcFastMdlReadWait: ULONG, | |
1012 | CcFastMdlReadResourceMiss: ULONG, | |
1013 | CcFastMdlReadNotPossible: ULONG, | |
1014 | CcMapDataNoWait: ULONG, | |
1015 | CcMapDataWait: ULONG, | |
1016 | CcMapDataNoWaitMiss: ULONG, | |
1017 | CcMapDataWaitMiss: ULONG, | |
1018 | CcPinMappedDataCount: ULONG, | |
1019 | CcPinReadNoWait: ULONG, | |
1020 | CcPinReadWait: ULONG, | |
1021 | CcPinReadNoWaitMiss: ULONG, | |
1022 | CcPinReadWaitMiss: ULONG, | |
1023 | CcCopyReadNoWait: ULONG, | |
1024 | CcCopyReadWait: ULONG, | |
1025 | CcCopyReadNoWaitMiss: ULONG, | |
1026 | CcCopyReadWaitMiss: ULONG, | |
1027 | CcMdlReadNoWait: ULONG, | |
1028 | CcMdlReadWait: ULONG, | |
1029 | CcMdlReadNoWaitMiss: ULONG, | |
1030 | CcMdlReadWaitMiss: ULONG, | |
1031 | CcReadAheadIos: ULONG, | |
1032 | CcLazyWriteIos: ULONG, | |
1033 | CcLazyWritePages: ULONG, | |
1034 | CcDataFlushes: ULONG, | |
1035 | CcDataPages: ULONG, | |
1036 | ContextSwitches: ULONG, | |
1037 | FirstLevelTbFills: ULONG, | |
1038 | SecondLevelTbFills: ULONG, | |
1039 | SystemCalls: ULONG, | |
1040 | CcTotalDirtyPages: ULONGLONG, | |
1041 | CcDirtyPageThreshold: ULONGLONG, | |
1042 | ResidentAvailablePages: LONGLONG, | |
1043 | SharedCommittedPages: ULONGLONG, | |
1044 | }} | |
1045 | pub type PSYSTEM_PERFORMANCE_INFORMATION = *mut SYSTEM_PERFORMANCE_INFORMATION; | |
1046 | STRUCT!{struct SYSTEM_TIMEOFDAY_INFORMATION { | |
1047 | BootTime: LARGE_INTEGER, | |
1048 | CurrentTime: LARGE_INTEGER, | |
1049 | TimeZoneBias: LARGE_INTEGER, | |
1050 | TimeZoneId: ULONG, | |
1051 | Reserved: ULONG, | |
1052 | BootTimeBias: ULONGLONG, | |
1053 | SleepTimeBias: ULONGLONG, | |
1054 | }} | |
1055 | pub type PSYSTEM_TIMEOFDAY_INFORMATION = *mut SYSTEM_TIMEOFDAY_INFORMATION; | |
1056 | STRUCT!{struct SYSTEM_THREAD_INFORMATION { | |
1057 | KernelTime: LARGE_INTEGER, | |
1058 | UserTime: LARGE_INTEGER, | |
1059 | CreateTime: LARGE_INTEGER, | |
1060 | WaitTime: ULONG, | |
1061 | StartAddress: PVOID, | |
1062 | ClientId: CLIENT_ID, | |
1063 | Priority: KPRIORITY, | |
1064 | BasePriority: LONG, | |
1065 | ContextSwitches: ULONG, | |
1066 | ThreadState: KTHREAD_STATE, | |
1067 | WaitReason: KWAIT_REASON, | |
1068 | }} | |
1069 | pub type PSYSTEM_THREAD_INFORMATION = *mut SYSTEM_THREAD_INFORMATION; | |
1070 | STRUCT!{struct SYSTEM_EXTENDED_THREAD_INFORMATION { | |
1071 | ThreadInfo: SYSTEM_THREAD_INFORMATION, | |
1072 | StackBase: PVOID, | |
1073 | StackLimit: PVOID, | |
1074 | Win32StartAddress: PVOID, | |
1075 | TebBase: PTEB, | |
1076 | Reserved2: ULONG_PTR, | |
1077 | Reserved3: ULONG_PTR, | |
1078 | Reserved4: ULONG_PTR, | |
1079 | }} | |
1080 | pub type PSYSTEM_EXTENDED_THREAD_INFORMATION = *mut SYSTEM_EXTENDED_THREAD_INFORMATION; | |
1081 | STRUCT!{struct SYSTEM_PROCESS_INFORMATION { | |
1082 | NextEntryOffset: ULONG, | |
1083 | NumberOfThreads: ULONG, | |
1084 | WorkingSetPrivateSize: LARGE_INTEGER, | |
1085 | HardFaultCount: ULONG, | |
1086 | NumberOfThreadsHighWatermark: ULONG, | |
1087 | CycleTime: ULONGLONG, | |
1088 | CreateTime: LARGE_INTEGER, | |
1089 | UserTime: LARGE_INTEGER, | |
1090 | KernelTime: LARGE_INTEGER, | |
1091 | ImageName: UNICODE_STRING, | |
1092 | BasePriority: KPRIORITY, | |
1093 | UniqueProcessId: HANDLE, | |
1094 | InheritedFromUniqueProcessId: HANDLE, | |
1095 | HandleCount: ULONG, | |
1096 | SessionId: ULONG, | |
1097 | UniqueProcessKey: ULONG_PTR, | |
1098 | PeakVirtualSize: SIZE_T, | |
1099 | VirtualSize: SIZE_T, | |
1100 | PageFaultCount: ULONG, | |
1101 | PeakWorkingSetSize: SIZE_T, | |
1102 | WorkingSetSize: SIZE_T, | |
1103 | QuotaPeakPagedPoolUsage: SIZE_T, | |
1104 | QuotaPagedPoolUsage: SIZE_T, | |
1105 | QuotaPeakNonPagedPoolUsage: SIZE_T, | |
1106 | QuotaNonPagedPoolUsage: SIZE_T, | |
1107 | PagefileUsage: SIZE_T, | |
1108 | PeakPagefileUsage: SIZE_T, | |
1109 | PrivatePageCount: SIZE_T, | |
1110 | ReadOperationCount: LARGE_INTEGER, | |
1111 | WriteOperationCount: LARGE_INTEGER, | |
1112 | OtherOperationCount: LARGE_INTEGER, | |
1113 | ReadTransferCount: LARGE_INTEGER, | |
1114 | WriteTransferCount: LARGE_INTEGER, | |
1115 | OtherTransferCount: LARGE_INTEGER, | |
1116 | Threads: [SYSTEM_THREAD_INFORMATION; 1], | |
1117 | }} | |
1118 | pub type PSYSTEM_PROCESS_INFORMATION = *mut SYSTEM_PROCESS_INFORMATION; | |
1119 | STRUCT!{struct SYSTEM_CALL_COUNT_INFORMATION { | |
1120 | Length: ULONG, | |
1121 | NumberOfTables: ULONG, | |
1122 | }} | |
1123 | pub type PSYSTEM_CALL_COUNT_INFORMATION = *mut SYSTEM_CALL_COUNT_INFORMATION; | |
1124 | STRUCT!{struct SYSTEM_DEVICE_INFORMATION { | |
1125 | NumberOfDisks: ULONG, | |
1126 | NumberOfFloppies: ULONG, | |
1127 | NumberOfCdRoms: ULONG, | |
1128 | NumberOfTapes: ULONG, | |
1129 | NumberOfSerialPorts: ULONG, | |
1130 | NumberOfParallelPorts: ULONG, | |
1131 | }} | |
1132 | pub type PSYSTEM_DEVICE_INFORMATION = *mut SYSTEM_DEVICE_INFORMATION; | |
1133 | STRUCT!{struct SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION { | |
1134 | IdleTime: LARGE_INTEGER, | |
1135 | KernelTime: LARGE_INTEGER, | |
1136 | UserTime: LARGE_INTEGER, | |
1137 | DpcTime: LARGE_INTEGER, | |
1138 | InterruptTime: LARGE_INTEGER, | |
1139 | InterruptCount: ULONG, | |
1140 | }} | |
1141 | pub type PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION = *mut SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION; | |
1142 | STRUCT!{struct SYSTEM_FLAGS_INFORMATION { | |
1143 | Flags: ULONG, | |
1144 | }} | |
1145 | pub type PSYSTEM_FLAGS_INFORMATION = *mut SYSTEM_FLAGS_INFORMATION; | |
1146 | STRUCT!{struct SYSTEM_CALL_TIME_INFORMATION { | |
1147 | Length: ULONG, | |
1148 | TotalCalls: ULONG, | |
1149 | TimeOfCalls: [LARGE_INTEGER; 1], | |
1150 | }} | |
1151 | pub type PSYSTEM_CALL_TIME_INFORMATION = *mut SYSTEM_CALL_TIME_INFORMATION; | |
1152 | STRUCT!{struct RTL_PROCESS_LOCK_INFORMATION { | |
1153 | Address: PVOID, | |
1154 | Type: USHORT, | |
1155 | CreatorBackTraceIndex: USHORT, | |
1156 | OwningThread: HANDLE, | |
1157 | LockCount: LONG, | |
1158 | ContentionCount: ULONG, | |
1159 | EntryCount: ULONG, | |
1160 | RecursionCount: LONG, | |
1161 | NumberOfWaitingShared: ULONG, | |
1162 | NumberOfWaitingExclusive: ULONG, | |
1163 | }} | |
1164 | pub type PRTL_PROCESS_LOCK_INFORMATION = *mut RTL_PROCESS_LOCK_INFORMATION; | |
1165 | STRUCT!{struct RTL_PROCESS_LOCKS { | |
1166 | NumberOfLocks: ULONG, | |
1167 | Locks: [RTL_PROCESS_LOCK_INFORMATION; 1], | |
1168 | }} | |
1169 | pub type PRTL_PROCESS_LOCKS = *mut RTL_PROCESS_LOCKS; | |
1170 | STRUCT!{struct RTL_PROCESS_BACKTRACE_INFORMATION { | |
1171 | SymbolicBackTrace: PCHAR, | |
1172 | TraceCount: ULONG, | |
1173 | Index: USHORT, | |
1174 | Depth: USHORT, | |
1175 | BackTrace: [PVOID; 32], | |
1176 | }} | |
1177 | pub type PRTL_PROCESS_BACKTRACE_INFORMATION = *mut RTL_PROCESS_BACKTRACE_INFORMATION; | |
1178 | STRUCT!{struct RTL_PROCESS_BACKTRACES { | |
1179 | CommittedMemory: ULONG, | |
1180 | ReservedMemory: ULONG, | |
1181 | NumberOfBackTraceLookups: ULONG, | |
1182 | NumberOfBackTraces: ULONG, | |
1183 | BackTraces: [RTL_PROCESS_BACKTRACE_INFORMATION; 1], | |
1184 | }} | |
1185 | pub type PRTL_PROCESS_BACKTRACES = *mut RTL_PROCESS_BACKTRACES; | |
1186 | STRUCT!{struct SYSTEM_HANDLE_TABLE_ENTRY_INFO { | |
1187 | UniqueProcessId: USHORT, | |
1188 | CreatorBackTraceIndex: USHORT, | |
1189 | ObjectTypeIndex: UCHAR, | |
1190 | HandleAttributes: UCHAR, | |
1191 | HandleValue: USHORT, | |
1192 | Object: PVOID, | |
1193 | GrantedAccess: ULONG, | |
1194 | }} | |
1195 | pub type PSYSTEM_HANDLE_TABLE_ENTRY_INFO = *mut SYSTEM_HANDLE_TABLE_ENTRY_INFO; | |
1196 | STRUCT!{struct SYSTEM_HANDLE_INFORMATION { | |
1197 | NumberOfHandles: ULONG, | |
1198 | Handles: [SYSTEM_HANDLE_TABLE_ENTRY_INFO; 1], | |
1199 | }} | |
1200 | pub type PSYSTEM_HANDLE_INFORMATION = *mut SYSTEM_HANDLE_INFORMATION; | |
1201 | STRUCT!{struct SYSTEM_OBJECTTYPE_INFORMATION { | |
1202 | NextEntryOffset: ULONG, | |
1203 | NumberOfObjects: ULONG, | |
1204 | NumberOfHandles: ULONG, | |
1205 | TypeIndex: ULONG, | |
1206 | InvalidAttributes: ULONG, | |
1207 | GenericMapping: GENERIC_MAPPING, | |
1208 | ValidAccessMask: ULONG, | |
1209 | PoolType: ULONG, | |
1210 | SecurityRequired: BOOLEAN, | |
1211 | WaitableObject: BOOLEAN, | |
1212 | TypeName: UNICODE_STRING, | |
1213 | }} | |
1214 | pub type PSYSTEM_OBJECTTYPE_INFORMATION = *mut SYSTEM_OBJECTTYPE_INFORMATION; | |
1215 | STRUCT!{struct SYSTEM_OBJECT_INFORMATION { | |
1216 | NextEntryOffset: ULONG, | |
1217 | Object: PVOID, | |
1218 | CreatorUniqueProcess: HANDLE, | |
1219 | CreatorBackTraceIndex: USHORT, | |
1220 | Flags: USHORT, | |
1221 | PointerCount: LONG, | |
1222 | HandleCount: LONG, | |
1223 | PagedPoolCharge: ULONG, | |
1224 | NonPagedPoolCharge: ULONG, | |
1225 | ExclusiveProcessId: HANDLE, | |
1226 | SecurityDescriptor: PVOID, | |
1227 | NameInfo: UNICODE_STRING, | |
1228 | }} | |
1229 | pub type PSYSTEM_OBJECT_INFORMATION = *mut SYSTEM_OBJECT_INFORMATION; | |
1230 | STRUCT!{struct SYSTEM_PAGEFILE_INFORMATION { | |
1231 | NextEntryOffset: ULONG, | |
1232 | TotalSize: ULONG, | |
1233 | TotalInUse: ULONG, | |
1234 | PeakUsage: ULONG, | |
1235 | PageFileName: UNICODE_STRING, | |
1236 | }} | |
1237 | pub type PSYSTEM_PAGEFILE_INFORMATION = *mut SYSTEM_PAGEFILE_INFORMATION; | |
1238 | pub const MM_WORKING_SET_MAX_HARD_ENABLE: ULONG = 0x1; | |
1239 | pub const MM_WORKING_SET_MAX_HARD_DISABLE: ULONG = 0x2; | |
1240 | pub const MM_WORKING_SET_MIN_HARD_ENABLE: ULONG = 0x4; | |
1241 | pub const MM_WORKING_SET_MIN_HARD_DISABLE: ULONG = 0x8; | |
1242 | STRUCT!{struct SYSTEM_FILECACHE_INFORMATION { | |
1243 | CurrentSize: SIZE_T, | |
1244 | PeakSize: SIZE_T, | |
1245 | PageFaultCount: ULONG, | |
1246 | MinimumWorkingSet: SIZE_T, | |
1247 | MaximumWorkingSet: SIZE_T, | |
1248 | CurrentSizeIncludingTransitionInPages: SIZE_T, | |
1249 | PeakSizeIncludingTransitionInPages: SIZE_T, | |
1250 | TransitionRePurposeCount: ULONG, | |
1251 | Flags: ULONG, | |
1252 | }} | |
1253 | pub type PSYSTEM_FILECACHE_INFORMATION = *mut SYSTEM_FILECACHE_INFORMATION; | |
1254 | STRUCT!{struct SYSTEM_BASIC_WORKING_SET_INFORMATION { | |
1255 | CurrentSize: SIZE_T, | |
1256 | PeakSize: SIZE_T, | |
1257 | PageFaultCount: ULONG, | |
1258 | }} | |
1259 | pub type PSYSTEM_BASIC_WORKING_SET_INFORMATION = *mut SYSTEM_BASIC_WORKING_SET_INFORMATION; | |
1260 | UNION!{union SYSTEM_POOLTAG_u { | |
1261 | Tag: [UCHAR; 4], | |
1262 | TagUlong: ULONG, | |
1263 | }} | |
1264 | STRUCT!{struct SYSTEM_POOLTAG { | |
1265 | u: SYSTEM_POOLTAG_u, | |
1266 | PagedAllocs: ULONG, | |
1267 | PagedFrees: ULONG, | |
1268 | PagedUsed: SIZE_T, | |
1269 | NonPagedAllocs: ULONG, | |
1270 | NonPagedFrees: ULONG, | |
1271 | NonPagedUsed: SIZE_T, | |
1272 | }} | |
1273 | pub type PSYSTEM_POOLTAG = *mut SYSTEM_POOLTAG; | |
1274 | STRUCT!{struct SYSTEM_POOLTAG_INFORMATION { | |
1275 | Count: ULONG, | |
1276 | TagInfo: [SYSTEM_POOLTAG; 1], | |
1277 | }} | |
1278 | pub type PSYSTEM_POOLTAG_INFORMATION = *mut SYSTEM_POOLTAG_INFORMATION; | |
1279 | STRUCT!{struct SYSTEM_INTERRUPT_INFORMATION { | |
1280 | ContextSwitches: ULONG, | |
1281 | DpcCount: ULONG, | |
1282 | DpcRate: ULONG, | |
1283 | TimeIncrement: ULONG, | |
1284 | DpcBypassCount: ULONG, | |
1285 | ApcBypassCount: ULONG, | |
1286 | }} | |
1287 | pub type PSYSTEM_INTERRUPT_INFORMATION = *mut SYSTEM_INTERRUPT_INFORMATION; | |
1288 | STRUCT!{struct SYSTEM_DPC_BEHAVIOR_INFORMATION { | |
1289 | Spare: ULONG, | |
1290 | DpcQueueDepth: ULONG, | |
1291 | MinimumDpcRate: ULONG, | |
1292 | AdjustDpcThreshold: ULONG, | |
1293 | IdealDpcRate: ULONG, | |
1294 | }} | |
1295 | pub type PSYSTEM_DPC_BEHAVIOR_INFORMATION = *mut SYSTEM_DPC_BEHAVIOR_INFORMATION; | |
1296 | STRUCT!{struct SYSTEM_QUERY_TIME_ADJUST_INFORMATION { | |
1297 | TimeAdjustment: ULONG, | |
1298 | TimeIncrement: ULONG, | |
1299 | Enable: BOOLEAN, | |
1300 | }} | |
1301 | pub type PSYSTEM_QUERY_TIME_ADJUST_INFORMATION = *mut SYSTEM_QUERY_TIME_ADJUST_INFORMATION; | |
1302 | STRUCT!{struct SYSTEM_QUERY_TIME_ADJUST_INFORMATION_PRECISE { | |
1303 | TimeAdjustment: ULONGLONG, | |
1304 | TimeIncrement: ULONGLONG, | |
1305 | Enable: BOOLEAN, | |
1306 | }} | |
1307 | pub type PSYSTEM_QUERY_TIME_ADJUST_INFORMATION_PRECISE = | |
1308 | *mut SYSTEM_QUERY_TIME_ADJUST_INFORMATION_PRECISE; | |
1309 | STRUCT!{struct SYSTEM_SET_TIME_ADJUST_INFORMATION { | |
1310 | TimeAdjustment: ULONG, | |
1311 | Enable: BOOLEAN, | |
1312 | }} | |
1313 | pub type PSYSTEM_SET_TIME_ADJUST_INFORMATION = *mut SYSTEM_SET_TIME_ADJUST_INFORMATION; | |
1314 | STRUCT!{struct SYSTEM_SET_TIME_ADJUST_INFORMATION_PRECISE { | |
1315 | TimeAdjustment: ULONGLONG, | |
1316 | Enable: BOOLEAN, | |
1317 | }} | |
1318 | pub type PSYSTEM_SET_TIME_ADJUST_INFORMATION_PRECISE = | |
1319 | *mut SYSTEM_SET_TIME_ADJUST_INFORMATION_PRECISE; | |
1320 | ENUM!{enum EVENT_TRACE_INFORMATION_CLASS { | |
1321 | EventTraceKernelVersionInformation = 0, | |
1322 | EventTraceGroupMaskInformation = 1, | |
1323 | EventTracePerformanceInformation = 2, | |
1324 | EventTraceTimeProfileInformation = 3, | |
1325 | EventTraceSessionSecurityInformation = 4, | |
1326 | EventTraceSpinlockInformation = 5, | |
1327 | EventTraceStackTracingInformation = 6, | |
1328 | EventTraceExecutiveResourceInformation = 7, | |
1329 | EventTraceHeapTracingInformation = 8, | |
1330 | EventTraceHeapSummaryTracingInformation = 9, | |
1331 | EventTracePoolTagFilterInformation = 10, | |
1332 | EventTracePebsTracingInformation = 11, | |
1333 | EventTraceProfileConfigInformation = 12, | |
1334 | EventTraceProfileSourceListInformation = 13, | |
1335 | EventTraceProfileEventListInformation = 14, | |
1336 | EventTraceProfileCounterListInformation = 15, | |
1337 | EventTraceStackCachingInformation = 16, | |
1338 | EventTraceObjectTypeFilterInformation = 17, | |
1339 | EventTraceSoftRestartInformation = 18, | |
1340 | EventTraceLastBranchConfigurationInformation = 19, | |
1341 | EventTraceLastBranchEventListInformation = 20, | |
1342 | EventTraceProfileSourceAddInformation = 21, | |
1343 | EventTraceProfileSourceRemoveInformation = 22, | |
1344 | EventTraceProcessorTraceConfigurationInformation = 23, | |
1345 | EventTraceProcessorTraceEventListInformation = 24, | |
1346 | EventTraceCoverageSamplerInformation = 25, | |
1347 | MaxEventTraceInfoClass = 26, | |
1348 | }} | |
1349 | STRUCT!{struct EVENT_TRACE_VERSION_INFORMATION { | |
1350 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1351 | EventTraceKernelVersion: ULONG, | |
1352 | }} | |
1353 | pub type PEVENT_TRACE_VERSION_INFORMATION = *mut EVENT_TRACE_VERSION_INFORMATION; | |
1354 | STRUCT!{struct PERFINFO_GROUPMASK { | |
1355 | Masks: [ULONG; 8], | |
1356 | }} | |
1357 | pub type PPERFINFO_GROUPMASK = *mut PERFINFO_GROUPMASK; | |
1358 | STRUCT!{struct EVENT_TRACE_GROUPMASK_INFORMATION { | |
1359 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1360 | TraceHandle: HANDLE, | |
1361 | EventTraceGroupMasks: PERFINFO_GROUPMASK, | |
1362 | }} | |
1363 | pub type PEVENT_TRACE_GROUPMASK_INFORMATION = *mut EVENT_TRACE_GROUPMASK_INFORMATION; | |
1364 | STRUCT!{struct EVENT_TRACE_PERFORMANCE_INFORMATION { | |
1365 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1366 | LogfileBytesWritten: LARGE_INTEGER, | |
1367 | }} | |
1368 | pub type PEVENT_TRACE_PERFORMANCE_INFORMATION = *mut EVENT_TRACE_PERFORMANCE_INFORMATION; | |
1369 | STRUCT!{struct EVENT_TRACE_TIME_PROFILE_INFORMATION { | |
1370 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1371 | ProfileInterval: ULONG, | |
1372 | }} | |
1373 | pub type PEVENT_TRACE_TIME_PROFILE_INFORMATION = *mut EVENT_TRACE_TIME_PROFILE_INFORMATION; | |
1374 | STRUCT!{struct EVENT_TRACE_SESSION_SECURITY_INFORMATION { | |
1375 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1376 | SecurityInformation: ULONG, | |
1377 | TraceHandle: HANDLE, | |
1378 | SecurityDescriptor: [UCHAR; 1], | |
1379 | }} | |
1380 | pub type PEVENT_TRACE_SESSION_SECURITY_INFORMATION = *mut EVENT_TRACE_SESSION_SECURITY_INFORMATION; | |
1381 | STRUCT!{struct EVENT_TRACE_SPINLOCK_INFORMATION { | |
1382 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1383 | SpinLockSpinThreshold: ULONG, | |
1384 | SpinLockAcquireSampleRate: ULONG, | |
1385 | SpinLockContentionSampleRate: ULONG, | |
1386 | SpinLockHoldThreshold: ULONG, | |
1387 | }} | |
1388 | pub type PEVENT_TRACE_SPINLOCK_INFORMATION = *mut EVENT_TRACE_SPINLOCK_INFORMATION; | |
1389 | STRUCT!{struct EVENT_TRACE_SYSTEM_EVENT_INFORMATION { | |
1390 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1391 | TraceHandle: HANDLE, | |
1392 | HookId: [ULONG; 1], | |
1393 | }} | |
1394 | pub type PEVENT_TRACE_SYSTEM_EVENT_INFORMATION = *mut EVENT_TRACE_SYSTEM_EVENT_INFORMATION; | |
1395 | STRUCT!{struct EVENT_TRACE_EXECUTIVE_RESOURCE_INFORMATION { | |
1396 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1397 | ReleaseSamplingRate: ULONG, | |
1398 | ContentionSamplingRate: ULONG, | |
1399 | NumberOfExcessiveTimeouts: ULONG, | |
1400 | }} | |
1401 | pub type PEVENT_TRACE_EXECUTIVE_RESOURCE_INFORMATION = | |
1402 | *mut EVENT_TRACE_EXECUTIVE_RESOURCE_INFORMATION; | |
1403 | STRUCT!{struct EVENT_TRACE_HEAP_TRACING_INFORMATION { | |
1404 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1405 | ProcessId: ULONG, | |
1406 | }} | |
1407 | pub type PEVENT_TRACE_HEAP_TRACING_INFORMATION = *mut EVENT_TRACE_HEAP_TRACING_INFORMATION; | |
1408 | STRUCT!{struct EVENT_TRACE_TAG_FILTER_INFORMATION { | |
1409 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1410 | TraceHandle: HANDLE, | |
1411 | Filter: [ULONG; 1], | |
1412 | }} | |
1413 | pub type PEVENT_TRACE_TAG_FILTER_INFORMATION = *mut EVENT_TRACE_TAG_FILTER_INFORMATION; | |
1414 | STRUCT!{struct EVENT_TRACE_PROFILE_COUNTER_INFORMATION { | |
1415 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1416 | TraceHandle: HANDLE, | |
1417 | ProfileSource: [ULONG; 1], | |
1418 | }} | |
1419 | pub type PEVENT_TRACE_PROFILE_COUNTER_INFORMATION = *mut EVENT_TRACE_PROFILE_COUNTER_INFORMATION; | |
1420 | STRUCT!{struct EVENT_TRACE_PROFILE_LIST_INFORMATION { | |
1421 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1422 | Spare: ULONG, | |
1423 | Profile: [*mut PROFILE_SOURCE_INFO; 1], | |
1424 | }} | |
1425 | pub type PEVENT_TRACE_PROFILE_LIST_INFORMATION = *mut EVENT_TRACE_PROFILE_LIST_INFORMATION; | |
1426 | STRUCT!{struct EVENT_TRACE_STACK_CACHING_INFORMATION { | |
1427 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1428 | TraceHandle: HANDLE, | |
1429 | Enabled: BOOLEAN, | |
1430 | Reserved: [UCHAR; 3], | |
1431 | CacheSize: ULONG, | |
1432 | BucketCount: ULONG, | |
1433 | }} | |
1434 | pub type PEVENT_TRACE_STACK_CACHING_INFORMATION = *mut EVENT_TRACE_STACK_CACHING_INFORMATION; | |
1435 | STRUCT!{struct EVENT_TRACE_SOFT_RESTART_INFORMATION { | |
1436 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1437 | TraceHandle: HANDLE, | |
1438 | PersistTraceBuffers: BOOLEAN, | |
1439 | FileName: [WCHAR; 1], | |
1440 | }} | |
1441 | pub type PEVENT_TRACE_SOFT_RESTART_INFORMATION = *mut EVENT_TRACE_SOFT_RESTART_INFORMATION; | |
1442 | STRUCT!{struct EVENT_TRACE_PROFILE_ADD_INFORMATION { | |
1443 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1444 | PerfEvtEventSelect: BOOLEAN, | |
1445 | PerfEvtUnitSelect: BOOLEAN, | |
1446 | PerfEvtType: ULONG, | |
1447 | CpuInfoHierarchy: [ULONG; 3], | |
1448 | InitialInterval: ULONG, | |
1449 | AllowsHalt: BOOLEAN, | |
1450 | Persist: BOOLEAN, | |
1451 | ProfileSourceDescription: [WCHAR; 1], | |
1452 | }} | |
1453 | pub type PEVENT_TRACE_PROFILE_ADD_INFORMATION = *mut EVENT_TRACE_PROFILE_ADD_INFORMATION; | |
1454 | STRUCT!{struct EVENT_TRACE_PROFILE_REMOVE_INFORMATION { | |
1455 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1456 | ProfileSource: KPROFILE_SOURCE, | |
1457 | CpuInfoHierarchy: [ULONG; 3], | |
1458 | }} | |
1459 | pub type PEVENT_TRACE_PROFILE_REMOVE_INFORMATION = *mut EVENT_TRACE_PROFILE_REMOVE_INFORMATION; | |
1460 | STRUCT!{struct EVENT_TRACE_COVERAGE_SAMPLER_INFORMATION { | |
1461 | EventTraceInformationClass: EVENT_TRACE_INFORMATION_CLASS, | |
1462 | CoverageSamplerInformationClass: BOOLEAN, | |
1463 | MajorVersion: UCHAR, | |
1464 | MinorVersion: UCHAR, | |
1465 | Reserved: UCHAR, | |
1466 | SamplerHandle: HANDLE, | |
1467 | }} | |
1468 | pub type PEVENT_TRACE_COVERAGE_SAMPLER_INFORMATION = *mut EVENT_TRACE_COVERAGE_SAMPLER_INFORMATION; | |
1469 | STRUCT!{struct SYSTEM_EXCEPTION_INFORMATION { | |
1470 | AlignmentFixupCount: ULONG, | |
1471 | ExceptionDispatchCount: ULONG, | |
1472 | FloatingEmulationCount: ULONG, | |
1473 | ByteWordEmulationCount: ULONG, | |
1474 | }} | |
1475 | pub type PSYSTEM_EXCEPTION_INFORMATION = *mut SYSTEM_EXCEPTION_INFORMATION; | |
1476 | STRUCT!{struct SYSTEM_KERNEL_DEBUGGER_INFORMATION { | |
1477 | KernelDebuggerEnabled: BOOLEAN, | |
1478 | KernelDebuggerNotPresent: BOOLEAN, | |
1479 | }} | |
1480 | pub type PSYSTEM_KERNEL_DEBUGGER_INFORMATION = *mut SYSTEM_KERNEL_DEBUGGER_INFORMATION; | |
1481 | STRUCT!{struct SYSTEM_CONTEXT_SWITCH_INFORMATION { | |
1482 | ContextSwitches: ULONG, | |
1483 | FindAny: ULONG, | |
1484 | FindLast: ULONG, | |
1485 | FindIdeal: ULONG, | |
1486 | IdleAny: ULONG, | |
1487 | IdleCurrent: ULONG, | |
1488 | IdleLast: ULONG, | |
1489 | IdleIdeal: ULONG, | |
1490 | PreemptAny: ULONG, | |
1491 | PreemptCurrent: ULONG, | |
1492 | PreemptLast: ULONG, | |
1493 | SwitchToIdle: ULONG, | |
1494 | }} | |
1495 | pub type PSYSTEM_CONTEXT_SWITCH_INFORMATION = *mut SYSTEM_CONTEXT_SWITCH_INFORMATION; | |
1496 | STRUCT!{struct SYSTEM_REGISTRY_QUOTA_INFORMATION { | |
1497 | RegistryQuotaAllowed: ULONG, | |
1498 | RegistryQuotaUsed: ULONG, | |
1499 | PagedPoolSize: SIZE_T, | |
1500 | }} | |
1501 | pub type PSYSTEM_REGISTRY_QUOTA_INFORMATION = *mut SYSTEM_REGISTRY_QUOTA_INFORMATION; | |
1502 | STRUCT!{struct SYSTEM_PROCESSOR_IDLE_INFORMATION { | |
1503 | IdleTime: ULONGLONG, | |
1504 | C1Time: ULONGLONG, | |
1505 | C2Time: ULONGLONG, | |
1506 | C3Time: ULONGLONG, | |
1507 | C1Transitions: ULONG, | |
1508 | C2Transitions: ULONG, | |
1509 | C3Transitions: ULONG, | |
1510 | Padding: ULONG, | |
1511 | }} | |
1512 | pub type PSYSTEM_PROCESSOR_IDLE_INFORMATION = *mut SYSTEM_PROCESSOR_IDLE_INFORMATION; | |
1513 | STRUCT!{struct SYSTEM_LEGACY_DRIVER_INFORMATION { | |
1514 | VetoType: ULONG, | |
1515 | VetoList: UNICODE_STRING, | |
1516 | }} | |
1517 | pub type PSYSTEM_LEGACY_DRIVER_INFORMATION = *mut SYSTEM_LEGACY_DRIVER_INFORMATION; | |
1518 | STRUCT!{struct SYSTEM_LOOKASIDE_INFORMATION { | |
1519 | CurrentDepth: USHORT, | |
1520 | MaximumDepth: USHORT, | |
1521 | TotalAllocates: ULONG, | |
1522 | AllocateMisses: ULONG, | |
1523 | TotalFrees: ULONG, | |
1524 | FreeMisses: ULONG, | |
1525 | Type: ULONG, | |
1526 | Tag: ULONG, | |
1527 | Size: ULONG, | |
1528 | }} | |
1529 | pub type PSYSTEM_LOOKASIDE_INFORMATION = *mut SYSTEM_LOOKASIDE_INFORMATION; | |
1530 | STRUCT!{struct SYSTEM_RANGE_START_INFORMATION { | |
1531 | SystemRangeStart: PVOID, | |
1532 | }} | |
1533 | pub type PSYSTEM_RANGE_START_INFORMATION = *mut SYSTEM_RANGE_START_INFORMATION; | |
1534 | STRUCT!{struct SYSTEM_VERIFIER_INFORMATION { | |
1535 | NextEntryOffset: ULONG, | |
1536 | Level: ULONG, | |
1537 | DriverName: UNICODE_STRING, | |
1538 | RaiseIrqls: ULONG, | |
1539 | AcquireSpinLocks: ULONG, | |
1540 | SynchronizeExecutions: ULONG, | |
1541 | AllocationsAttempted: ULONG, | |
1542 | AllocationsSucceeded: ULONG, | |
1543 | AllocationsSucceededSpecialPool: ULONG, | |
1544 | AllocationsWithNoTag: ULONG, | |
1545 | TrimRequests: ULONG, | |
1546 | Trims: ULONG, | |
1547 | AllocationsFailed: ULONG, | |
1548 | AllocationsFailedDeliberately: ULONG, | |
1549 | Loads: ULONG, | |
1550 | Unloads: ULONG, | |
1551 | UnTrackedPool: ULONG, | |
1552 | CurrentPagedPoolAllocations: ULONG, | |
1553 | CurrentNonPagedPoolAllocations: ULONG, | |
1554 | PeakPagedPoolAllocations: ULONG, | |
1555 | PeakNonPagedPoolAllocations: ULONG, | |
1556 | PagedPoolUsageInBytes: SIZE_T, | |
1557 | NonPagedPoolUsageInBytes: SIZE_T, | |
1558 | PeakPagedPoolUsageInBytes: SIZE_T, | |
1559 | PeakNonPagedPoolUsageInBytes: SIZE_T, | |
1560 | }} | |
1561 | pub type PSYSTEM_VERIFIER_INFORMATION = *mut SYSTEM_VERIFIER_INFORMATION; | |
1562 | STRUCT!{struct SYSTEM_SESSION_PROCESS_INFORMATION { | |
1563 | SessionId: ULONG, | |
1564 | SizeOfBuf: ULONG, | |
1565 | Buffer: PVOID, | |
1566 | }} | |
1567 | pub type PSYSTEM_SESSION_PROCESS_INFORMATION = *mut SYSTEM_SESSION_PROCESS_INFORMATION; | |
1568 | STRUCT!{struct SYSTEM_PROCESSOR_POWER_INFORMATION { | |
1569 | CurrentFrequency: UCHAR, | |
1570 | ThermalLimitFrequency: UCHAR, | |
1571 | ConstantThrottleFrequency: UCHAR, | |
1572 | DegradedThrottleFrequency: UCHAR, | |
1573 | LastBusyFrequency: UCHAR, | |
1574 | LastC3Frequency: UCHAR, | |
1575 | LastAdjustedBusyFrequency: UCHAR, | |
1576 | ProcessorMinThrottle: UCHAR, | |
1577 | ProcessorMaxThrottle: UCHAR, | |
1578 | NumberOfFrequencies: ULONG, | |
1579 | PromotionCount: ULONG, | |
1580 | DemotionCount: ULONG, | |
1581 | ErrorCount: ULONG, | |
1582 | RetryCount: ULONG, | |
1583 | CurrentFrequencyTime: ULONGLONG, | |
1584 | CurrentProcessorTime: ULONGLONG, | |
1585 | CurrentProcessorIdleTime: ULONGLONG, | |
1586 | LastProcessorTime: ULONGLONG, | |
1587 | LastProcessorIdleTime: ULONGLONG, | |
1588 | Energy: ULONGLONG, | |
1589 | }} | |
1590 | pub type PSYSTEM_PROCESSOR_POWER_INFORMATION = *mut SYSTEM_PROCESSOR_POWER_INFORMATION; | |
1591 | STRUCT!{struct SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX { | |
1592 | Object: PVOID, | |
1593 | UniqueProcessId: ULONG_PTR, | |
1594 | HandleValue: ULONG_PTR, | |
1595 | GrantedAccess: ULONG, | |
1596 | CreatorBackTraceIndex: USHORT, | |
1597 | ObjectTypeIndex: USHORT, | |
1598 | HandleAttributes: ULONG, | |
1599 | Reserved: ULONG, | |
1600 | }} | |
1601 | pub type PSYSTEM_HANDLE_TABLE_ENTRY_INFO_EX = *mut SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX; | |
1602 | STRUCT!{struct SYSTEM_HANDLE_INFORMATION_EX { | |
1603 | NumberOfHandles: ULONG_PTR, | |
1604 | Reserved: ULONG_PTR, | |
1605 | Handles: [SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX; 1], | |
1606 | }} | |
1607 | pub type PSYSTEM_HANDLE_INFORMATION_EX = *mut SYSTEM_HANDLE_INFORMATION_EX; | |
1608 | UNION!{union SYSTEM_BIGPOOL_ENTRY_u1 { | |
1609 | VirtualAddress: PVOID, | |
1610 | Bitfields: ULONG_PTR, | |
1611 | }} | |
1612 | UNION!{union SYSTEM_BIGPOOL_ENTRY_u2 { | |
1613 | Tag: [UCHAR; 4], | |
1614 | TagUlong: ULONG, | |
1615 | }} | |
1616 | BITFIELD!{unsafe SYSTEM_BIGPOOL_ENTRY_u1 Bitfields: ULONG_PTR [ | |
1617 | NonPaged set_NonPaged[0..1], | |
1618 | ]} | |
1619 | STRUCT!{struct SYSTEM_BIGPOOL_ENTRY { | |
1620 | u1: SYSTEM_BIGPOOL_ENTRY_u1, | |
1621 | SizeInBytes: SIZE_T, | |
1622 | u2: SYSTEM_BIGPOOL_ENTRY_u2, | |
1623 | }} | |
1624 | pub type PSYSTEM_BIGPOOL_ENTRY = *mut SYSTEM_BIGPOOL_ENTRY; | |
1625 | STRUCT!{struct SYSTEM_BIGPOOL_INFORMATION { | |
1626 | Count: ULONG, | |
1627 | AllocatedInfo: [SYSTEM_BIGPOOL_ENTRY; 1], | |
1628 | }} | |
1629 | pub type PSYSTEM_BIGPOOL_INFORMATION = *mut SYSTEM_BIGPOOL_INFORMATION; | |
1630 | UNION!{union SYSTEM_POOL_ENTRY_u { | |
1631 | Tag: [UCHAR; 4], | |
1632 | TagUlong: ULONG, | |
1633 | ProcessChargedQuota: PVOID, | |
1634 | }} | |
1635 | STRUCT!{struct SYSTEM_POOL_ENTRY { | |
1636 | Allocated: BOOLEAN, | |
1637 | Spare0: BOOLEAN, | |
1638 | AllocatorBackTraceIndex: USHORT, | |
1639 | Size: ULONG, | |
1640 | u: SYSTEM_POOL_ENTRY_u, | |
1641 | }} | |
1642 | pub type PSYSTEM_POOL_ENTRY = *mut SYSTEM_POOL_ENTRY; | |
1643 | STRUCT!{struct SYSTEM_POOL_INFORMATION { | |
1644 | TotalSize: SIZE_T, | |
1645 | FirstEntry: PVOID, | |
1646 | EntryOverhead: USHORT, | |
1647 | PoolTagPresent: BOOLEAN, | |
1648 | Spare0: BOOLEAN, | |
1649 | NumberOfEntries: ULONG, | |
1650 | Entries: [SYSTEM_POOL_ENTRY; 1], | |
1651 | }} | |
1652 | pub type PSYSTEM_POOL_INFORMATION = *mut SYSTEM_POOL_INFORMATION; | |
1653 | STRUCT!{struct SYSTEM_SESSION_POOLTAG_INFORMATION { | |
1654 | NextEntryOffset: SIZE_T, | |
1655 | SessionId: ULONG, | |
1656 | Count: ULONG, | |
1657 | TagInfo: [SYSTEM_POOLTAG; 1], | |
1658 | }} | |
1659 | pub type PSYSTEM_SESSION_POOLTAG_INFORMATION = *mut SYSTEM_SESSION_POOLTAG_INFORMATION; | |
1660 | STRUCT!{struct SYSTEM_SESSION_MAPPED_VIEW_INFORMATION { | |
1661 | NextEntryOffset: SIZE_T, | |
1662 | SessionId: ULONG, | |
1663 | ViewFailures: ULONG, | |
1664 | NumberOfBytesAvailable: SIZE_T, | |
1665 | NumberOfBytesAvailableContiguous: SIZE_T, | |
1666 | }} | |
1667 | pub type PSYSTEM_SESSION_MAPPED_VIEW_INFORMATION = *mut SYSTEM_SESSION_MAPPED_VIEW_INFORMATION; | |
1668 | ENUM!{enum SYSTEM_FIRMWARE_TABLE_ACTION { | |
1669 | SystemFirmwareTableEnumerate = 0, | |
1670 | SystemFirmwareTableGet = 1, | |
1671 | SystemFirmwareTableMax = 2, | |
1672 | }} | |
1673 | STRUCT!{struct SYSTEM_FIRMWARE_TABLE_INFORMATION { | |
1674 | ProviderSignature: ULONG, | |
1675 | Action: SYSTEM_FIRMWARE_TABLE_ACTION, | |
1676 | TableID: ULONG, | |
1677 | TableBufferLength: ULONG, | |
1678 | TableBuffer: [UCHAR; 1], | |
1679 | }} | |
1680 | pub type PSYSTEM_FIRMWARE_TABLE_INFORMATION = *mut SYSTEM_FIRMWARE_TABLE_INFORMATION; | |
1681 | STRUCT!{struct SYSTEM_MEMORY_LIST_INFORMATION { | |
1682 | ZeroPageCount: ULONG_PTR, | |
1683 | FreePageCount: ULONG_PTR, | |
1684 | ModifiedPageCount: ULONG_PTR, | |
1685 | ModifiedNoWritePageCount: ULONG_PTR, | |
1686 | BadPageCount: ULONG_PTR, | |
1687 | PageCountByPriority: [ULONG_PTR; 8], | |
1688 | RepurposedPagesByPriority: [ULONG_PTR; 8], | |
1689 | ModifiedPageCountPageFile: ULONG_PTR, | |
1690 | }} | |
1691 | pub type PSYSTEM_MEMORY_LIST_INFORMATION = *mut SYSTEM_MEMORY_LIST_INFORMATION; | |
1692 | ENUM!{enum SYSTEM_MEMORY_LIST_COMMAND { | |
1693 | MemoryCaptureAccessedBits = 0, | |
1694 | MemoryCaptureAndResetAccessedBits = 1, | |
1695 | MemoryEmptyWorkingSets = 2, | |
1696 | MemoryFlushModifiedList = 3, | |
1697 | MemoryPurgeStandbyList = 4, | |
1698 | MemoryPurgeLowPriorityStandbyList = 5, | |
1699 | MemoryCommandMax = 6, | |
1700 | }} | |
1701 | STRUCT!{struct SYSTEM_THREAD_CID_PRIORITY_INFORMATION { | |
1702 | ClientId: CLIENT_ID, | |
1703 | Priority: KPRIORITY, | |
1704 | }} | |
1705 | pub type PSYSTEM_THREAD_CID_PRIORITY_INFORMATION = *mut SYSTEM_THREAD_CID_PRIORITY_INFORMATION; | |
1706 | STRUCT!{struct SYSTEM_PROCESSOR_IDLE_CYCLE_TIME_INFORMATION { | |
1707 | CycleTime: ULONGLONG, | |
1708 | }} | |
1709 | pub type PSYSTEM_PROCESSOR_IDLE_CYCLE_TIME_INFORMATION = | |
1710 | *mut SYSTEM_PROCESSOR_IDLE_CYCLE_TIME_INFORMATION; | |
1711 | STRUCT!{struct SYSTEM_REF_TRACE_INFORMATION { | |
1712 | TraceEnable: BOOLEAN, | |
1713 | TracePermanent: BOOLEAN, | |
1714 | TraceProcessName: UNICODE_STRING, | |
1715 | TracePoolTags: UNICODE_STRING, | |
1716 | }} | |
1717 | pub type PSYSTEM_REF_TRACE_INFORMATION = *mut SYSTEM_REF_TRACE_INFORMATION; | |
1718 | STRUCT!{struct SYSTEM_PROCESS_ID_INFORMATION { | |
1719 | ProcessId: HANDLE, | |
1720 | ImageName: UNICODE_STRING, | |
1721 | }} | |
1722 | pub type PSYSTEM_PROCESS_ID_INFORMATION = *mut SYSTEM_PROCESS_ID_INFORMATION; | |
1723 | STRUCT!{struct SYSTEM_BOOT_ENVIRONMENT_INFORMATION { | |
1724 | BootIdentifier: GUID, | |
1725 | FirmwareType: FIRMWARE_TYPE, | |
1726 | BootFlags: ULONGLONG, | |
1727 | }} | |
1728 | BITFIELD!{SYSTEM_BOOT_ENVIRONMENT_INFORMATION BootFlags: ULONGLONG [ | |
1729 | DbgMenuOsSelection set_DbgMenuOsSelection[0..1], | |
1730 | DbgHiberBoot set_DbgHiberBoot[1..2], | |
1731 | DbgSoftBoot set_DbgSoftBoot[2..3], | |
1732 | DbgMeasuredLaunch set_DbgMeasuredLaunch[3..4], | |
1733 | ]} | |
1734 | pub type PSYSTEM_BOOT_ENVIRONMENT_INFORMATION = *mut SYSTEM_BOOT_ENVIRONMENT_INFORMATION; | |
1735 | STRUCT!{struct SYSTEM_IMAGE_FILE_EXECUTION_OPTIONS_INFORMATION { | |
1736 | FlagsToEnable: ULONG, | |
1737 | FlagsToDisable: ULONG, | |
1738 | }} | |
1739 | pub type PSYSTEM_IMAGE_FILE_EXECUTION_OPTIONS_INFORMATION = | |
1740 | *mut SYSTEM_IMAGE_FILE_EXECUTION_OPTIONS_INFORMATION; | |
1741 | #[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))] | |
1742 | STRUCT!{struct SYSTEM_VERIFIER_INFORMATION_EX { | |
1743 | VerifyMode: ULONG, | |
1744 | OptionChanges: ULONG, | |
1745 | PreviousBucketName: UNICODE_STRING, | |
1746 | IrpCancelTimeoutMsec: ULONG, | |
1747 | VerifierExtensionEnabled: ULONG, | |
1748 | Reserved: [ULONG; 1], | |
1749 | }} | |
1750 | #[cfg(target_arch = "x86")] | |
1751 | STRUCT!{struct SYSTEM_VERIFIER_INFORMATION_EX { | |
1752 | VerifyMode: ULONG, | |
1753 | OptionChanges: ULONG, | |
1754 | PreviousBucketName: UNICODE_STRING, | |
1755 | IrpCancelTimeoutMsec: ULONG, | |
1756 | VerifierExtensionEnabled: ULONG, | |
1757 | Reserved: [ULONG; 3], | |
1758 | }} | |
1759 | pub type PSYSTEM_VERIFIER_INFORMATION_EX = *mut SYSTEM_VERIFIER_INFORMATION_EX; | |
1760 | STRUCT!{struct SYSTEM_SYSTEM_PARTITION_INFORMATION { | |
1761 | SystemPartition: UNICODE_STRING, | |
1762 | }} | |
1763 | pub type PSYSTEM_SYSTEM_PARTITION_INFORMATION = *mut SYSTEM_SYSTEM_PARTITION_INFORMATION; | |
1764 | STRUCT!{struct SYSTEM_SYSTEM_DISK_INFORMATION { | |
1765 | SystemDisk: UNICODE_STRING, | |
1766 | }} | |
1767 | pub type PSYSTEM_SYSTEM_DISK_INFORMATION = *mut SYSTEM_SYSTEM_DISK_INFORMATION; | |
1768 | STRUCT!{struct SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT { | |
1769 | Hits: ULONGLONG, | |
1770 | PercentFrequency: UCHAR, | |
1771 | }} | |
1772 | pub type PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT = *mut SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT; | |
1773 | STRUCT!{struct SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT_WIN8 { | |
1774 | Hits: ULONG, | |
1775 | PercentFrequency: UCHAR, | |
1776 | }} | |
1777 | pub type PSYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT_WIN8 = | |
1778 | *mut SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT_WIN8; | |
1779 | STRUCT!{struct SYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION { | |
1780 | ProcessorNumber: ULONG, | |
1781 | StateCount: ULONG, | |
1782 | States: [SYSTEM_PROCESSOR_PERFORMANCE_HITCOUNT; 1], | |
1783 | }} | |
1784 | pub type PSYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION = | |
1785 | *mut SYSTEM_PROCESSOR_PERFORMANCE_STATE_DISTRIBUTION; | |
1786 | STRUCT!{struct SYSTEM_PROCESSOR_PERFORMANCE_DISTRIBUTION { | |
1787 | ProcessorCount: ULONG, | |
1788 | Offsets: [ULONG; 1], | |
1789 | }} | |
1790 | pub type PSYSTEM_PROCESSOR_PERFORMANCE_DISTRIBUTION = | |
1791 | *mut SYSTEM_PROCESSOR_PERFORMANCE_DISTRIBUTION; | |
1792 | STRUCT!{struct SYSTEM_CODEINTEGRITY_INFORMATION { | |
1793 | Length: ULONG, | |
1794 | CodeIntegrityOptions: ULONG, | |
1795 | }} | |
1796 | pub type PSYSTEM_CODEINTEGRITY_INFORMATION = *mut SYSTEM_CODEINTEGRITY_INFORMATION; | |
1797 | ENUM!{enum SYSTEM_VA_TYPE { | |
1798 | SystemVaTypeAll = 0, | |
1799 | SystemVaTypeNonPagedPool = 1, | |
1800 | SystemVaTypePagedPool = 2, | |
1801 | SystemVaTypeSystemCache = 3, | |
1802 | SystemVaTypeSystemPtes = 4, | |
1803 | SystemVaTypeSessionSpace = 5, | |
1804 | SystemVaTypeMax = 6, | |
1805 | }} | |
1806 | pub type PSYSTEM_VA_TYPE = *mut SYSTEM_VA_TYPE; | |
1807 | STRUCT!{struct SYSTEM_VA_LIST_INFORMATION { | |
1808 | VirtualSize: SIZE_T, | |
1809 | VirtualPeak: SIZE_T, | |
1810 | VirtualLimit: SIZE_T, | |
1811 | AllocationFailures: SIZE_T, | |
1812 | }} | |
1813 | pub type PSYSTEM_VA_LIST_INFORMATION = *mut SYSTEM_VA_LIST_INFORMATION; | |
1814 | STRUCT!{struct SYSTEM_REGISTRY_APPEND_STRING_PARAMETERS { | |
1815 | KeyHandle: HANDLE, | |
1816 | ValueNamePointer: PUNICODE_STRING, | |
1817 | RequiredLengthPointer: PULONG, | |
1818 | Buffer: PUCHAR, | |
1819 | BufferLength: ULONG, | |
1820 | Type: ULONG, | |
1821 | AppendBuffer: PUCHAR, | |
1822 | AppendBufferLength: ULONG, | |
1823 | CreateIfDoesntExist: BOOLEAN, | |
1824 | TruncateExistingValue: BOOLEAN, | |
1825 | }} | |
1826 | pub type PSYSTEM_REGISTRY_APPEND_STRING_PARAMETERS = *mut SYSTEM_REGISTRY_APPEND_STRING_PARAMETERS; | |
1827 | STRUCT!{struct SYSTEM_VHD_BOOT_INFORMATION { | |
1828 | OsDiskIsVhd: BOOLEAN, | |
1829 | OsVhdFilePathOffset: ULONG, | |
1830 | OsVhdParentVolume: [WCHAR; ANYSIZE_ARRAY], | |
1831 | }} | |
1832 | pub type PSYSTEM_VHD_BOOT_INFORMATION = *mut SYSTEM_VHD_BOOT_INFORMATION; | |
1833 | STRUCT!{struct SYSTEM_LOW_PRIORITY_IO_INFORMATION { | |
1834 | LowPriReadOperations: ULONG, | |
1835 | LowPriWriteOperations: ULONG, | |
1836 | KernelBumpedToNormalOperations: ULONG, | |
1837 | LowPriPagingReadOperations: ULONG, | |
1838 | KernelPagingReadsBumpedToNormal: ULONG, | |
1839 | LowPriPagingWriteOperations: ULONG, | |
1840 | KernelPagingWritesBumpedToNormal: ULONG, | |
1841 | BoostedIrpCount: ULONG, | |
1842 | BoostedPagingIrpCount: ULONG, | |
1843 | BlanketBoostCount: ULONG, | |
1844 | }} | |
1845 | pub type PSYSTEM_LOW_PRIORITY_IO_INFORMATION = *mut SYSTEM_LOW_PRIORITY_IO_INFORMATION; | |
1846 | ENUM!{enum TPM_BOOT_ENTROPY_RESULT_CODE { | |
1847 | TpmBootEntropyStructureUninitialized = 0, | |
1848 | TpmBootEntropyDisabledByPolicy = 1, | |
1849 | TpmBootEntropyNoTpmFound = 2, | |
1850 | TpmBootEntropyTpmError = 3, | |
1851 | TpmBootEntropySuccess = 4, | |
1852 | }} | |
1853 | STRUCT!{struct TPM_BOOT_ENTROPY_NT_RESULT { | |
1854 | Policy: ULONGLONG, | |
1855 | ResultCode: TPM_BOOT_ENTROPY_RESULT_CODE, | |
1856 | ResultStatus: NTSTATUS, | |
1857 | Time: ULONGLONG, | |
1858 | EntropyLength: ULONG, | |
1859 | EntropyData: [UCHAR; 40], | |
1860 | }} | |
1861 | pub type PTPM_BOOT_ENTROPY_NT_RESULT = *mut TPM_BOOT_ENTROPY_NT_RESULT; | |
1862 | STRUCT!{struct SYSTEM_VERIFIER_COUNTERS_INFORMATION { | |
1863 | Legacy: SYSTEM_VERIFIER_INFORMATION, | |
1864 | RaiseIrqls: ULONG, | |
1865 | AcquireSpinLocks: ULONG, | |
1866 | SynchronizeExecutions: ULONG, | |
1867 | AllocationsWithNoTag: ULONG, | |
1868 | AllocationsFailed: ULONG, | |
1869 | AllocationsFailedDeliberately: ULONG, | |
1870 | LockedBytes: SIZE_T, | |
1871 | PeakLockedBytes: SIZE_T, | |
1872 | MappedLockedBytes: SIZE_T, | |
1873 | PeakMappedLockedBytes: SIZE_T, | |
1874 | MappedIoSpaceBytes: SIZE_T, | |
1875 | PeakMappedIoSpaceBytes: SIZE_T, | |
1876 | PagesForMdlBytes: SIZE_T, | |
1877 | PeakPagesForMdlBytes: SIZE_T, | |
1878 | ContiguousMemoryBytes: SIZE_T, | |
1879 | PeakContiguousMemoryBytes: SIZE_T, | |
1880 | ExecutePoolTypes: ULONG, | |
1881 | ExecutePageProtections: ULONG, | |
1882 | ExecutePageMappings: ULONG, | |
1883 | ExecuteWriteSections: ULONG, | |
1884 | SectionAlignmentFailures: ULONG, | |
1885 | UnsupportedRelocs: ULONG, | |
1886 | IATInExecutableSection: ULONG, | |
1887 | }} | |
1888 | pub type PSYSTEM_VERIFIER_COUNTERS_INFORMATION = *mut SYSTEM_VERIFIER_COUNTERS_INFORMATION; | |
1889 | STRUCT!{struct SYSTEM_ACPI_AUDIT_INFORMATION { | |
1890 | RsdpCount: ULONG, | |
1891 | Bitfields: ULONG, | |
1892 | }} | |
1893 | BITFIELD!{SYSTEM_ACPI_AUDIT_INFORMATION Bitfields: ULONG [ | |
1894 | SameRsdt set_SameRsdt[0..1], | |
1895 | SlicPresent set_SlicPresent[1..2], | |
1896 | SlicDifferent set_SlicDifferent[2..3], | |
1897 | ]} | |
1898 | pub type PSYSTEM_ACPI_AUDIT_INFORMATION = *mut SYSTEM_ACPI_AUDIT_INFORMATION; | |
1899 | STRUCT!{struct SYSTEM_BASIC_PERFORMANCE_INFORMATION { | |
1900 | AvailablePages: SIZE_T, | |
1901 | CommittedPages: SIZE_T, | |
1902 | CommitLimit: SIZE_T, | |
1903 | PeakCommitment: SIZE_T, | |
1904 | }} | |
1905 | pub type PSYSTEM_BASIC_PERFORMANCE_INFORMATION = *mut SYSTEM_BASIC_PERFORMANCE_INFORMATION; | |
1906 | STRUCT!{struct QUERY_PERFORMANCE_COUNTER_FLAGS { | |
1907 | ul: ULONG, | |
1908 | }} | |
1909 | BITFIELD!{QUERY_PERFORMANCE_COUNTER_FLAGS ul: ULONG [ | |
1910 | KernelTransition set_KernelTransition[0..1], | |
1911 | Reserved set_Reserved[1..32], | |
1912 | ]} | |
1913 | STRUCT!{struct SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION { | |
1914 | Version: ULONG, | |
1915 | Flags: QUERY_PERFORMANCE_COUNTER_FLAGS, | |
1916 | ValidFlags: QUERY_PERFORMANCE_COUNTER_FLAGS, | |
1917 | }} | |
1918 | pub type PSYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION = | |
1919 | *mut SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION; | |
1920 | ENUM!{enum SYSTEM_PIXEL_FORMAT { | |
1921 | SystemPixelFormatUnknown = 0, | |
1922 | SystemPixelFormatR8G8B8 = 1, | |
1923 | SystemPixelFormatR8G8B8X8 = 2, | |
1924 | SystemPixelFormatB8G8R8 = 3, | |
1925 | SystemPixelFormatB8G8R8X8 = 4, | |
1926 | }} | |
1927 | STRUCT!{struct SYSTEM_BOOT_GRAPHICS_INFORMATION { | |
1928 | FrameBuffer: LARGE_INTEGER, | |
1929 | Width: ULONG, | |
1930 | Height: ULONG, | |
1931 | PixelStride: ULONG, | |
1932 | Flags: ULONG, | |
1933 | Format: SYSTEM_PIXEL_FORMAT, | |
1934 | DisplayRotation: ULONG, | |
1935 | }} | |
1936 | pub type PSYSTEM_BOOT_GRAPHICS_INFORMATION = *mut SYSTEM_BOOT_GRAPHICS_INFORMATION; | |
1937 | STRUCT!{struct MEMORY_SCRUB_INFORMATION { | |
1938 | Handle: HANDLE, | |
1939 | PagesScrubbed: ULONG, | |
1940 | }} | |
1941 | pub type PMEMORY_SCRUB_INFORMATION = *mut MEMORY_SCRUB_INFORMATION; | |
1942 | STRUCT!{struct PEBS_DS_SAVE_AREA { | |
1943 | BtsBufferBase: ULONGLONG, | |
1944 | BtsIndex: ULONGLONG, | |
1945 | BtsAbsoluteMaximum: ULONGLONG, | |
1946 | BtsInterruptThreshold: ULONGLONG, | |
1947 | PebsBufferBase: ULONGLONG, | |
1948 | PebsIndex: ULONGLONG, | |
1949 | PebsAbsoluteMaximum: ULONGLONG, | |
1950 | PebsInterruptThreshold: ULONGLONG, | |
1951 | PebsCounterReset0: ULONGLONG, | |
1952 | PebsCounterReset1: ULONGLONG, | |
1953 | PebsCounterReset2: ULONGLONG, | |
1954 | PebsCounterReset3: ULONGLONG, | |
1955 | }} | |
1956 | pub type PPEBS_DS_SAVE_AREA = *mut PEBS_DS_SAVE_AREA; | |
1957 | STRUCT!{struct PROCESSOR_PROFILE_CONTROL_AREA { | |
1958 | PebsDsSaveArea: PEBS_DS_SAVE_AREA, | |
1959 | }} | |
1960 | pub type PPROCESSOR_PROFILE_CONTROL_AREA = *mut PROCESSOR_PROFILE_CONTROL_AREA; | |
1961 | STRUCT!{struct SYSTEM_PROCESSOR_PROFILE_CONTROL_AREA { | |
1962 | ProcessorProfileControlArea: PROCESSOR_PROFILE_CONTROL_AREA, | |
1963 | Allocate: BOOLEAN, | |
1964 | }} | |
1965 | pub type PSYSTEM_PROCESSOR_PROFILE_CONTROL_AREA = *mut SYSTEM_PROCESSOR_PROFILE_CONTROL_AREA; | |
1966 | STRUCT!{struct MEMORY_COMBINE_INFORMATION { | |
1967 | Handle: HANDLE, | |
1968 | PagesCombined: ULONG_PTR, | |
1969 | }} | |
1970 | pub type PMEMORY_COMBINE_INFORMATION = *mut MEMORY_COMBINE_INFORMATION; | |
1971 | pub const MEMORY_COMBINE_FLAGS_COMMON_PAGES_ONLY: ULONG = 0x4; | |
1972 | STRUCT!{struct MEMORY_COMBINE_INFORMATION_EX { | |
1973 | Handle: HANDLE, | |
1974 | PagesCombined: ULONG_PTR, | |
1975 | Flags: ULONG, | |
1976 | }} | |
1977 | pub type PMEMORY_COMBINE_INFORMATION_EX = *mut MEMORY_COMBINE_INFORMATION_EX; | |
1978 | STRUCT!{struct MEMORY_COMBINE_INFORMATION_EX2 { | |
1979 | Handle: HANDLE, | |
1980 | PagesCombined: ULONG_PTR, | |
1981 | Flags: ULONG, | |
1982 | ProcessHandle: HANDLE, | |
1983 | }} | |
1984 | pub type PMEMORY_COMBINE_INFORMATION_EX2 = *mut MEMORY_COMBINE_INFORMATION_EX2; | |
1985 | STRUCT!{struct SYSTEM_CONSOLE_INFORMATION { | |
1986 | Bitfields: ULONG, | |
1987 | }} | |
1988 | BITFIELD!{SYSTEM_CONSOLE_INFORMATION Bitfields: ULONG [ | |
1989 | DriverLoaded set_DriverLoaded[0..1], | |
1990 | Spare set_Spare[1..32], | |
1991 | ]} | |
1992 | pub type PSYSTEM_CONSOLE_INFORMATION = *mut SYSTEM_CONSOLE_INFORMATION; | |
1993 | STRUCT!{struct SYSTEM_PLATFORM_BINARY_INFORMATION { | |
1994 | PhysicalAddress: ULONG64, | |
1995 | HandoffBuffer: PVOID, | |
1996 | CommandLineBuffer: PVOID, | |
1997 | HandoffBufferSize: ULONG, | |
1998 | CommandLineBufferSize: ULONG, | |
1999 | }} | |
2000 | pub type PSYSTEM_PLATFORM_BINARY_INFORMATION = *mut SYSTEM_PLATFORM_BINARY_INFORMATION; | |
2001 | STRUCT!{struct SYSTEM_HYPERVISOR_PROCESSOR_COUNT_INFORMATION { | |
2002 | NumberOfLogicalProcessors: ULONG, | |
2003 | NumberOfCores: ULONG, | |
2004 | }} | |
2005 | pub type PSYSTEM_HYPERVISOR_PROCESSOR_COUNT_INFORMATION = | |
2006 | *mut SYSTEM_HYPERVISOR_PROCESSOR_COUNT_INFORMATION; | |
2007 | STRUCT!{struct SYSTEM_DEVICE_DATA_INFORMATION { | |
2008 | DeviceId: UNICODE_STRING, | |
2009 | DataName: UNICODE_STRING, | |
2010 | DataType: ULONG, | |
2011 | DataBufferLength: ULONG, | |
2012 | DataBuffer: PVOID, | |
2013 | }} | |
2014 | pub type PSYSTEM_DEVICE_DATA_INFORMATION = *mut SYSTEM_DEVICE_DATA_INFORMATION; | |
2015 | STRUCT!{struct PHYSICAL_CHANNEL_RUN { | |
2016 | NodeNumber: ULONG, | |
2017 | ChannelNumber: ULONG, | |
2018 | BasePage: ULONGLONG, | |
2019 | PageCount: ULONGLONG, | |
2020 | Flags: ULONG, | |
2021 | }} | |
2022 | pub type PPHYSICAL_CHANNEL_RUN = *mut PHYSICAL_CHANNEL_RUN; | |
2023 | STRUCT!{struct SYSTEM_MEMORY_TOPOLOGY_INFORMATION { | |
2024 | NumberOfRuns: ULONGLONG, | |
2025 | NumberOfNodes: ULONG, | |
2026 | NumberOfChannels: ULONG, | |
2027 | Run: [PHYSICAL_CHANNEL_RUN; 1], | |
2028 | }} | |
2029 | pub type PSYSTEM_MEMORY_TOPOLOGY_INFORMATION = *mut SYSTEM_MEMORY_TOPOLOGY_INFORMATION; | |
2030 | STRUCT!{struct SYSTEM_MEMORY_CHANNEL_INFORMATION { | |
2031 | ChannelNumber: ULONG, | |
2032 | ChannelHeatIndex: ULONG, | |
2033 | TotalPageCount: ULONGLONG, | |
2034 | ZeroPageCount: ULONGLONG, | |
2035 | FreePageCount: ULONGLONG, | |
2036 | StandbyPageCount: ULONGLONG, | |
2037 | }} | |
2038 | pub type PSYSTEM_MEMORY_CHANNEL_INFORMATION = *mut SYSTEM_MEMORY_CHANNEL_INFORMATION; | |
2039 | STRUCT!{struct SYSTEM_BOOT_LOGO_INFORMATION { | |
2040 | Flags: ULONG, | |
2041 | BitmapOffset: ULONG, | |
2042 | }} | |
2043 | pub type PSYSTEM_BOOT_LOGO_INFORMATION = *mut SYSTEM_BOOT_LOGO_INFORMATION; | |
2044 | STRUCT!{struct SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION_EX { | |
2045 | IdleTime: LARGE_INTEGER, | |
2046 | KernelTime: LARGE_INTEGER, | |
2047 | UserTime: LARGE_INTEGER, | |
2048 | DpcTime: LARGE_INTEGER, | |
2049 | InterruptTime: LARGE_INTEGER, | |
2050 | InterruptCount: ULONG, | |
2051 | Spare0: ULONG, | |
2052 | AvailableTime: LARGE_INTEGER, | |
2053 | Spare1: LARGE_INTEGER, | |
2054 | Spare2: LARGE_INTEGER, | |
2055 | }} | |
2056 | pub type PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION_EX = | |
2057 | *mut SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION_EX; | |
2058 | STRUCT!{struct SYSTEM_SECUREBOOT_POLICY_INFORMATION { | |
2059 | PolicyPublisher: GUID, | |
2060 | PolicyVersion: ULONG, | |
2061 | PolicyOptions: ULONG, | |
2062 | }} | |
2063 | pub type PSYSTEM_SECUREBOOT_POLICY_INFORMATION = *mut SYSTEM_SECUREBOOT_POLICY_INFORMATION; | |
2064 | STRUCT!{struct SYSTEM_PAGEFILE_INFORMATION_EX { | |
2065 | Info: SYSTEM_PAGEFILE_INFORMATION, | |
2066 | MinimumSize: ULONG, | |
2067 | MaximumSize: ULONG, | |
2068 | }} | |
2069 | pub type PSYSTEM_PAGEFILE_INFORMATION_EX = *mut SYSTEM_PAGEFILE_INFORMATION_EX; | |
2070 | STRUCT!{struct SYSTEM_SECUREBOOT_INFORMATION { | |
2071 | SecureBootEnabled: BOOLEAN, | |
2072 | SecureBootCapable: BOOLEAN, | |
2073 | }} | |
2074 | pub type PSYSTEM_SECUREBOOT_INFORMATION = *mut SYSTEM_SECUREBOOT_INFORMATION; | |
2075 | STRUCT!{struct PROCESS_DISK_COUNTERS { | |
2076 | BytesRead: ULONGLONG, | |
2077 | BytesWritten: ULONGLONG, | |
2078 | ReadOperationCount: ULONGLONG, | |
2079 | WriteOperationCount: ULONGLONG, | |
2080 | FlushOperationCount: ULONGLONG, | |
2081 | }} | |
2082 | pub type PPROCESS_DISK_COUNTERS = *mut PROCESS_DISK_COUNTERS; | |
2083 | UNION!{union ENERGY_STATE_DURATION_u { | |
2084 | Value: ULONGLONG, | |
2085 | LastChangeTime: ULONG, | |
2086 | }} | |
2087 | UNION!{union ENERGY_STATE_DURATION { | |
2088 | u: ENERGY_STATE_DURATION_u, | |
2089 | BitFields: ULONG, | |
2090 | }} | |
2091 | pub type PENERGY_STATE_DURATION = *mut ENERGY_STATE_DURATION; | |
2092 | BITFIELD!{unsafe ENERGY_STATE_DURATION BitFields: ULONG [ | |
2093 | Duration set_Duration[0..31], | |
2094 | IsInState set_IsInState[31..32], | |
2095 | ]} | |
2096 | STRUCT!{struct PROCESS_ENERGY_VALUES { | |
2097 | Cycles: [[ULONGLONG; 4]; 2], | |
2098 | DiskEnergy: ULONGLONG, | |
2099 | NetworkTailEnergy: ULONGLONG, | |
2100 | MBBTailEnergy: ULONGLONG, | |
2101 | NetworkTxRxBytes: ULONGLONG, | |
2102 | MBBTxRxBytes: ULONGLONG, | |
2103 | ForegroundDuration: ENERGY_STATE_DURATION, | |
2104 | DesktopVisibleDuration: ENERGY_STATE_DURATION, | |
2105 | PSMForegroundDuration: ENERGY_STATE_DURATION, | |
2106 | CompositionRendered: ULONG, | |
2107 | CompositionDirtyGenerated: ULONG, | |
2108 | CompositionDirtyPropagated: ULONG, | |
2109 | Reserved1: ULONG, | |
2110 | AttributedCycles: [[ULONGLONG; 2]; 4], | |
2111 | WorkOnBehalfCycles: [[ULONGLONG; 2]; 4], | |
2112 | }} | |
2113 | pub type PPROCESS_ENERGY_VALUES = *mut PROCESS_ENERGY_VALUES; | |
2114 | STRUCT!{struct TIMELINE_BITMAP { | |
2115 | Value: ULONGLONG, | |
2116 | EndTime: ULONG, | |
2117 | Bitmap: ULONG, | |
2118 | }} | |
2119 | pub type PTIMELINE_BITMAP = *mut TIMELINE_BITMAP; | |
2120 | STRUCT!{struct PROCESS_ENERGY_VALUES_EXTENSION_Timelines { | |
2121 | CpuTimeline: TIMELINE_BITMAP, | |
2122 | DiskTimeline: TIMELINE_BITMAP, | |
2123 | NetworkTimeline: TIMELINE_BITMAP, | |
2124 | MBBTimeline: TIMELINE_BITMAP, | |
2125 | ForegroundTimeline: TIMELINE_BITMAP, | |
2126 | DesktopVisibleTimeline: TIMELINE_BITMAP, | |
2127 | CompositionRenderedTimeline: TIMELINE_BITMAP, | |
2128 | CompositionDirtyGeneratedTimeline: TIMELINE_BITMAP, | |
2129 | CompositionDirtyPropagatedTimeline: TIMELINE_BITMAP, | |
2130 | InputTimeline: TIMELINE_BITMAP, | |
2131 | AudioInTimeline: TIMELINE_BITMAP, | |
2132 | AudioOutTimeline: TIMELINE_BITMAP, | |
2133 | DisplayRequiredTimeline: TIMELINE_BITMAP, | |
2134 | KeyboardInputTimeline: TIMELINE_BITMAP, | |
2135 | }} | |
2136 | STRUCT!{struct PROCESS_ENERGY_VALUES_EXTENSION_Durations { | |
2137 | InputDuration: ENERGY_STATE_DURATION, | |
2138 | AudioInDuration: ENERGY_STATE_DURATION, | |
2139 | AudioOutDuration: ENERGY_STATE_DURATION, | |
2140 | DisplayRequiredDuration: ENERGY_STATE_DURATION, | |
2141 | PSMBackgroundDuration: ENERGY_STATE_DURATION, | |
2142 | }} | |
2143 | STRUCT!{struct PROCESS_ENERGY_VALUES_EXTENSION { | |
2144 | Timelines: PROCESS_ENERGY_VALUES_EXTENSION_Timelines, | |
2145 | Durations: PROCESS_ENERGY_VALUES_EXTENSION_Durations, | |
2146 | KeyboardInput: ULONG, | |
2147 | MouseInput: ULONG, | |
2148 | }} | |
2149 | pub type PPROCESS_ENERGY_VALUES_EXTENSION = *mut PROCESS_ENERGY_VALUES_EXTENSION; | |
2150 | STRUCT!{struct PROCESS_EXTENDED_ENERGY_VALUES { | |
2151 | Base: PROCESS_ENERGY_VALUES, | |
2152 | Extension: PROCESS_ENERGY_VALUES_EXTENSION, | |
2153 | }} | |
2154 | pub type PPROCESS_EXTENDED_ENERGY_VALUES = *mut PROCESS_EXTENDED_ENERGY_VALUES; | |
2155 | ENUM!{enum SYSTEM_PROCESS_CLASSIFICATION { | |
2156 | SystemProcessClassificationNormal = 0, | |
2157 | SystemProcessClassificationSystem = 1, | |
2158 | SystemProcessClassificationSecureSystem = 2, | |
2159 | SystemProcessClassificationMemCompression = 3, | |
2160 | SystemProcessClassificationRegistry = 4, | |
2161 | SystemProcessClassificationMaximum = 5, | |
2162 | }} | |
2163 | STRUCT!{struct SYSTEM_PROCESS_INFORMATION_EXTENSION { | |
2164 | DiskCounters: PROCESS_DISK_COUNTERS, | |
2165 | ContextSwitches: ULONGLONG, | |
2166 | Flags: ULONG, | |
2167 | UserSidOffset: ULONG, | |
2168 | PackageFullNameOffset: ULONG, | |
2169 | EnergyValues: PROCESS_ENERGY_VALUES, | |
2170 | AppIdOffset: ULONG, | |
2171 | SharedCommitCharge: SIZE_T, | |
2172 | JobObjectId: ULONG, | |
2173 | SpareUlong: ULONG, | |
2174 | ProcessSequenceNumber: ULONGLONG, | |
2175 | }} | |
2176 | BITFIELD!{SYSTEM_PROCESS_INFORMATION_EXTENSION Flags: ULONG [ | |
2177 | HasStrongId set_HasStrongId[0..1], | |
2178 | Classification set_Classification[1..5], | |
2179 | BackgroundActivityModerated set_BackgroundActivityModerated[5..6], | |
2180 | Spare set_Spare[6..32], | |
2181 | ]} | |
2182 | pub type PSYSTEM_PROCESS_INFORMATION_EXTENSION = *mut SYSTEM_PROCESS_INFORMATION_EXTENSION; | |
2183 | STRUCT!{struct SYSTEM_PORTABLE_WORKSPACE_EFI_LAUNCHER_INFORMATION { | |
2184 | EfiLauncherEnabled: BOOLEAN, | |
2185 | }} | |
2186 | pub type PSYSTEM_PORTABLE_WORKSPACE_EFI_LAUNCHER_INFORMATION = | |
2187 | *mut SYSTEM_PORTABLE_WORKSPACE_EFI_LAUNCHER_INFORMATION; | |
2188 | STRUCT!{struct SYSTEM_KERNEL_DEBUGGER_INFORMATION_EX { | |
2189 | DebuggerAllowed: BOOLEAN, | |
2190 | DebuggerEnabled: BOOLEAN, | |
2191 | DebuggerPresent: BOOLEAN, | |
2192 | }} | |
2193 | pub type PSYSTEM_KERNEL_DEBUGGER_INFORMATION_EX = *mut SYSTEM_KERNEL_DEBUGGER_INFORMATION_EX; | |
2194 | STRUCT!{struct SYSTEM_ELAM_CERTIFICATE_INFORMATION { | |
2195 | ElamDriverFile: HANDLE, | |
2196 | }} | |
2197 | pub type PSYSTEM_ELAM_CERTIFICATE_INFORMATION = *mut SYSTEM_ELAM_CERTIFICATE_INFORMATION; | |
2198 | STRUCT!{struct SYSTEM_PROCESSOR_FEATURES_INFORMATION { | |
2199 | ProcessorFeatureBits: ULONGLONG, | |
2200 | Reserved: [ULONGLONG; 3], | |
2201 | }} | |
2202 | pub type PSYSTEM_PROCESSOR_FEATURES_INFORMATION = *mut SYSTEM_PROCESSOR_FEATURES_INFORMATION; | |
2203 | STRUCT!{struct SYSTEM_MANUFACTURING_INFORMATION { | |
2204 | Options: ULONG, | |
2205 | ProfileName: UNICODE_STRING, | |
2206 | }} | |
2207 | pub type PSYSTEM_MANUFACTURING_INFORMATION = *mut SYSTEM_MANUFACTURING_INFORMATION; | |
2208 | STRUCT!{struct SYSTEM_ENERGY_ESTIMATION_CONFIG_INFORMATION { | |
2209 | Enabled: BOOLEAN, | |
2210 | }} | |
2211 | pub type PSYSTEM_ENERGY_ESTIMATION_CONFIG_INFORMATION = | |
2212 | *mut SYSTEM_ENERGY_ESTIMATION_CONFIG_INFORMATION; | |
2213 | STRUCT!{struct HV_DETAILS { | |
2214 | Data: [ULONG; 4], | |
2215 | }} | |
2216 | pub type PHV_DETAILS = *mut HV_DETAILS; | |
2217 | STRUCT!{struct SYSTEM_HYPERVISOR_DETAIL_INFORMATION { | |
2218 | HvVendorAndMaxFunction: HV_DETAILS, | |
2219 | HypervisorInterface: HV_DETAILS, | |
2220 | HypervisorVersion: HV_DETAILS, | |
2221 | HvFeatures: HV_DETAILS, | |
2222 | HwFeatures: HV_DETAILS, | |
2223 | EnlightenmentInfo: HV_DETAILS, | |
2224 | ImplementationLimits: HV_DETAILS, | |
2225 | }} | |
2226 | pub type PSYSTEM_HYPERVISOR_DETAIL_INFORMATION = *mut SYSTEM_HYPERVISOR_DETAIL_INFORMATION; | |
2227 | STRUCT!{struct SYSTEM_PROCESSOR_CYCLE_STATS_INFORMATION { | |
2228 | Cycles: [[ULONGLONG; 4]; 2], | |
2229 | }} | |
2230 | pub type PSYSTEM_PROCESSOR_CYCLE_STATS_INFORMATION = *mut SYSTEM_PROCESSOR_CYCLE_STATS_INFORMATION; | |
2231 | STRUCT!{struct SYSTEM_TPM_INFORMATION { | |
2232 | Flags: ULONG, | |
2233 | }} | |
2234 | pub type PSYSTEM_TPM_INFORMATION = *mut SYSTEM_TPM_INFORMATION; | |
2235 | STRUCT!{struct SYSTEM_VSM_PROTECTION_INFORMATION { | |
2236 | DmaProtectionsAvailable: BOOLEAN, | |
2237 | DmaProtectionsInUse: BOOLEAN, | |
2238 | HardwareMbecAvailable: BOOLEAN, | |
2239 | }} | |
2240 | pub type PSYSTEM_VSM_PROTECTION_INFORMATION = *mut SYSTEM_VSM_PROTECTION_INFORMATION; | |
2241 | STRUCT!{struct SYSTEM_CODEINTEGRITYPOLICY_INFORMATION { | |
2242 | Options: ULONG, | |
2243 | HVCIOptions: ULONG, | |
2244 | Version: ULONGLONG, | |
2245 | PolicyGuid: GUID, | |
2246 | }} | |
2247 | pub type PSYSTEM_CODEINTEGRITYPOLICY_INFORMATION = *mut SYSTEM_CODEINTEGRITYPOLICY_INFORMATION; | |
2248 | STRUCT!{struct SYSTEM_ISOLATED_USER_MODE_INFORMATION { | |
2249 | Bitfields1: BOOLEAN, | |
2250 | Bitfields2: BOOLEAN, | |
2251 | Spare0: [BOOLEAN; 6], | |
2252 | Spare1: ULONGLONG, | |
2253 | }} | |
2254 | BITFIELD!{SYSTEM_ISOLATED_USER_MODE_INFORMATION Bitfields1: BOOLEAN [ | |
2255 | SecureKernelRunning set_SecureKernelRunning[0..1], | |
2256 | HvciEnabled set_HvciEnabled[1..2], | |
2257 | HvciStrictMode set_HvciStrictMode[2..3], | |
2258 | DebugEnabled set_DebugEnabled[3..4], | |
2259 | FirmwarePageProtection set_FirmwarePageProtection[4..5], | |
2260 | EncryptionKeyAvailable set_EncryptionKeyAvailable[5..6], | |
2261 | SpareFlags set_SpareFlags[6..7], | |
2262 | TrustletRunning set_TrustletRunning[7..8], | |
2263 | ]} | |
2264 | BITFIELD!{SYSTEM_ISOLATED_USER_MODE_INFORMATION Bitfields2: BOOLEAN [ | |
2265 | SpareFlags2 set_SpareFlags2[0..1], | |
2266 | ]} | |
2267 | pub type PSYSTEM_ISOLATED_USER_MODE_INFORMATION = *mut SYSTEM_ISOLATED_USER_MODE_INFORMATION; | |
2268 | STRUCT!{struct SYSTEM_SINGLE_MODULE_INFORMATION { | |
2269 | TargetModuleAddress: PVOID, | |
2270 | ExInfo: RTL_PROCESS_MODULE_INFORMATION_EX, | |
2271 | }} | |
2272 | pub type PSYSTEM_SINGLE_MODULE_INFORMATION = *mut SYSTEM_SINGLE_MODULE_INFORMATION; | |
2273 | STRUCT!{struct SYSTEM_INTERRUPT_CPU_SET_INFORMATION { | |
2274 | Gsiv: ULONG, | |
2275 | Group: USHORT, | |
2276 | CpuSets: ULONGLONG, | |
2277 | }} | |
2278 | pub type PSYSTEM_INTERRUPT_CPU_SET_INFORMATION = *mut SYSTEM_INTERRUPT_CPU_SET_INFORMATION; | |
2279 | STRUCT!{struct SYSTEM_SECUREBOOT_POLICY_FULL_INFORMATION { | |
2280 | PolicyInformation: SYSTEM_SECUREBOOT_POLICY_INFORMATION, | |
2281 | PolicySize: ULONG, | |
2282 | Policy: [UCHAR; 1], | |
2283 | }} | |
2284 | pub type PSYSTEM_SECUREBOOT_POLICY_FULL_INFORMATION = | |
2285 | *mut SYSTEM_SECUREBOOT_POLICY_FULL_INFORMATION; | |
2286 | STRUCT!{struct SYSTEM_ROOT_SILO_INFORMATION { | |
2287 | NumberOfSilos: ULONG, | |
2288 | SiloIdList: [ULONG; 1], | |
2289 | }} | |
2290 | pub type PSYSTEM_ROOT_SILO_INFORMATION = *mut SYSTEM_ROOT_SILO_INFORMATION; | |
2291 | STRUCT!{struct SYSTEM_CPU_SET_TAG_INFORMATION { | |
2292 | Tag: ULONGLONG, | |
2293 | CpuSets: [ULONGLONG; 1], | |
2294 | }} | |
2295 | pub type PSYSTEM_CPU_SET_TAG_INFORMATION = *mut SYSTEM_CPU_SET_TAG_INFORMATION; | |
2296 | STRUCT!{struct SYSTEM_SECURE_KERNEL_HYPERGUARD_PROFILE_INFORMATION { | |
2297 | ExtentCount: ULONG, | |
2298 | ValidStructureSize: ULONG, | |
2299 | NextExtentIndex: ULONG, | |
2300 | ExtentRestart: ULONG, | |
2301 | CycleCount: ULONG, | |
2302 | TimeoutCount: ULONG, | |
2303 | CycleTime: ULONGLONG, | |
2304 | CycleTimeMax: ULONGLONG, | |
2305 | ExtentTime: ULONGLONG, | |
2306 | ExtentTimeIndex: ULONG, | |
2307 | ExtentTimeMaxIndex: ULONG, | |
2308 | ExtentTimeMax: ULONGLONG, | |
2309 | HyperFlushTimeMax: ULONGLONG, | |
2310 | TranslateVaTimeMax: ULONGLONG, | |
2311 | DebugExemptionCount: ULONGLONG, | |
2312 | TbHitCount: ULONGLONG, | |
2313 | TbMissCount: ULONGLONG, | |
2314 | VinaPendingYield: ULONGLONG, | |
2315 | HashCycles: ULONGLONG, | |
2316 | HistogramOffset: ULONG, | |
2317 | HistogramBuckets: ULONG, | |
2318 | HistogramShift: ULONG, | |
2319 | Reserved1: ULONG, | |
2320 | PageNotPresentCount: ULONGLONG, | |
2321 | }} | |
2322 | pub type PSYSTEM_SECURE_KERNEL_HYPERGUARD_PROFILE_INFORMATION = | |
2323 | *mut SYSTEM_SECURE_KERNEL_HYPERGUARD_PROFILE_INFORMATION; | |
2324 | STRUCT!{struct SYSTEM_SECUREBOOT_PLATFORM_MANIFEST_INFORMATION { | |
2325 | PlatformManifestSize: ULONG, | |
2326 | PlatformManifest: [UCHAR; 1], | |
2327 | }} | |
2328 | pub type PSYSTEM_SECUREBOOT_PLATFORM_MANIFEST_INFORMATION = | |
2329 | *mut SYSTEM_SECUREBOOT_PLATFORM_MANIFEST_INFORMATION; | |
2330 | STRUCT!{struct SYSTEM_MEMORY_USAGE_INFORMATION { | |
2331 | TotalPhysicalBytes: ULONGLONG, | |
2332 | AvailableBytes: ULONGLONG, | |
2333 | ResidentAvailableBytes: LONGLONG, | |
2334 | CommittedBytes: ULONGLONG, | |
2335 | SharedCommittedBytes: ULONGLONG, | |
2336 | CommitLimitBytes: ULONGLONG, | |
2337 | PeakCommitmentBytes: ULONGLONG, | |
2338 | }} | |
2339 | pub type PSYSTEM_MEMORY_USAGE_INFORMATION = *mut SYSTEM_MEMORY_USAGE_INFORMATION; | |
2340 | STRUCT!{struct SYSTEM_CODEINTEGRITY_CERTIFICATE_INFORMATION { | |
2341 | ImageFile: HANDLE, | |
2342 | Type: ULONG, | |
2343 | }} | |
2344 | pub type PSYSTEM_CODEINTEGRITY_CERTIFICATE_INFORMATION = | |
2345 | *mut SYSTEM_CODEINTEGRITY_CERTIFICATE_INFORMATION; | |
2346 | STRUCT!{struct SYSTEM_PHYSICAL_MEMORY_INFORMATION { | |
2347 | TotalPhysicalBytes: ULONGLONG, | |
2348 | LowestPhysicalAddress: ULONGLONG, | |
2349 | HighestPhysicalAddress: ULONGLONG, | |
2350 | }} | |
2351 | pub type PSYSTEM_PHYSICAL_MEMORY_INFORMATION = *mut SYSTEM_PHYSICAL_MEMORY_INFORMATION; | |
2352 | ENUM!{enum SYSTEM_ACTIVITY_MODERATION_STATE { | |
2353 | SystemActivityModerationStateSystemManaged = 0, | |
2354 | SystemActivityModerationStateUserManagedAllowThrottling = 1, | |
2355 | SystemActivityModerationStateUserManagedDisableThrottling = 2, | |
2356 | MaxSystemActivityModerationState = 3, | |
2357 | }} | |
2358 | ENUM!{enum SYSTEM_ACTIVITY_MODERATION_APP_TYPE { | |
2359 | SystemActivityModerationAppTypeClassic = 0, | |
2360 | SystemActivityModerationAppTypePackaged = 1, | |
2361 | MaxSystemActivityModerationAppType = 2, | |
2362 | }} | |
2363 | STRUCT!{struct SYSTEM_ACTIVITY_MODERATION_INFO { | |
2364 | Identifier: UNICODE_STRING, | |
2365 | ModerationState: SYSTEM_ACTIVITY_MODERATION_STATE, | |
2366 | AppType: SYSTEM_ACTIVITY_MODERATION_APP_TYPE, | |
2367 | }} | |
2368 | pub type PSYSTEM_ACTIVITY_MODERATION_INFO = *mut SYSTEM_ACTIVITY_MODERATION_INFO; | |
2369 | STRUCT!{struct SYSTEM_ACTIVITY_MODERATION_USER_SETTINGS { | |
2370 | UserKeyHandle: HANDLE, | |
2371 | }} | |
2372 | pub type PSYSTEM_ACTIVITY_MODERATION_USER_SETTINGS = *mut SYSTEM_ACTIVITY_MODERATION_USER_SETTINGS; | |
2373 | STRUCT!{struct SYSTEM_CODEINTEGRITY_UNLOCK_INFORMATION { | |
2374 | Flags: ULONG, | |
2375 | UnlockId: [UCHAR; 32], | |
2376 | }} | |
2377 | BITFIELD!{SYSTEM_CODEINTEGRITY_UNLOCK_INFORMATION Flags: ULONG [ | |
2378 | Locked set_Locked[0..1], | |
2379 | Unlockable set_Unlockable[1..2], | |
2380 | UnlockApplied set_UnlockApplied[2..3], | |
2381 | UnlockIdValid set_UnlockIdValid[3..4], | |
2382 | Reserved set_Reserved[4..32], | |
2383 | ]} | |
2384 | pub type PSYSTEM_CODEINTEGRITY_UNLOCK_INFORMATION = *mut SYSTEM_CODEINTEGRITY_UNLOCK_INFORMATION; | |
2385 | STRUCT!{struct SYSTEM_FLUSH_INFORMATION { | |
2386 | SupportedFlushMethods: ULONG, | |
2387 | ProcessorCacheFlushSize: ULONG, | |
2388 | SystemFlushCapabilities: ULONGLONG, | |
2389 | Reserved: [ULONGLONG; 2], | |
2390 | }} | |
2391 | pub type PSYSTEM_FLUSH_INFORMATION = *mut SYSTEM_FLUSH_INFORMATION; | |
2392 | STRUCT!{struct SYSTEM_WRITE_CONSTRAINT_INFORMATION { | |
2393 | WriteConstraintPolicy: ULONG, | |
2394 | Reserved: ULONG, | |
2395 | }} | |
2396 | pub type PSYSTEM_WRITE_CONSTRAINT_INFORMATION = *mut SYSTEM_WRITE_CONSTRAINT_INFORMATION; | |
2397 | STRUCT!{struct SYSTEM_KERNEL_VA_SHADOW_INFORMATION { | |
2398 | Flags: ULONG, | |
2399 | }} | |
2400 | BITFIELD!{SYSTEM_KERNEL_VA_SHADOW_INFORMATION Flags: ULONG [ | |
2401 | KvaShadowEnabled set_KvaShadowEnabled[0..1], | |
2402 | KvaShadowUserGlobal set_KvaShadowUserGlobal[1..2], | |
2403 | KvaShadowPcid set_KvaShadowPcid[2..3], | |
2404 | KvaShadowInvpcid set_KvaShadowInvpcid[3..4], | |
2405 | KvaShadowRequired set_KvaShadowRequired[4..5], | |
2406 | KvaShadowRequiredAvailable set_KvaShadowRequiredAvailable[5..6], | |
2407 | InvalidPteBit set_InvalidPteBit[6..12], | |
2408 | L1DataCacheFlushSupported set_L1DataCacheFlushSupported[12..13], | |
2409 | L1TerminalFaultMitigationPresent set_L1TerminalFaultMitigationPresent[13..14], | |
2410 | Reserved set_Reserved[14..32], | |
2411 | ]} | |
2412 | pub type PSYSTEM_KERNEL_VA_SHADOW_INFORMATION = *mut SYSTEM_KERNEL_VA_SHADOW_INFORMATION; | |
2413 | STRUCT!{struct SYSTEM_CODEINTEGRITYVERIFICATION_INFORMATION { | |
2414 | FileHandle: HANDLE, | |
2415 | ImageSize: ULONG, | |
2416 | Image: PVOID, | |
2417 | }} | |
2418 | pub type PSYSTEM_CODEINTEGRITYVERIFICATION_INFORMATION = | |
2419 | *mut SYSTEM_CODEINTEGRITYVERIFICATION_INFORMATION; | |
2420 | STRUCT!{struct SYSTEM_HYPERVISOR_SHARED_PAGE_INFORMATION { | |
2421 | HypervisorSharedUserVa: PVOID, | |
2422 | }} | |
2423 | pub type PSYSTEM_HYPERVISOR_SHARED_PAGE_INFORMATION = | |
2424 | *mut SYSTEM_HYPERVISOR_SHARED_PAGE_INFORMATION; | |
2425 | STRUCT!{struct SYSTEM_SPECULATION_CONTROL_INFORMATION { | |
2426 | Flags: ULONG, | |
2427 | }} | |
2428 | BITFIELD!{SYSTEM_SPECULATION_CONTROL_INFORMATION Flags: ULONG [ | |
2429 | BpbEnabled set_BpbEnabled[0..1], | |
2430 | BpbDisabledSystemPolicy set_BpbDisabledSystemPolicy[1..2], | |
2431 | BpbDisabledNoHardwareSupport set_BpbDisabledNoHardwareSupport[2..3], | |
2432 | SpecCtrlEnumerated set_SpecCtrlEnumerated[3..4], | |
2433 | SpecCmdEnumerated set_SpecCmdEnumerated[4..5], | |
2434 | IbrsPresent set_IbrsPresent[5..6], | |
2435 | StibpPresent set_StibpPresent[6..7], | |
2436 | SmepPresent set_SmepPresent[7..8], | |
2437 | SpeculativeStoreBypassDisableAvailable set_SpeculativeStoreBypassDisableAvailable[8..9], | |
2438 | SpeculativeStoreBypassDisableSupported set_SpeculativeStoreBypassDisableSupported[9..10], | |
2439 | SpeculativeStoreBypassDisabledSystemWide set_SpeculativeStoreBypassDisabledSystemWide[10..11], | |
2440 | SpeculativeStoreBypassDisabledKernel set_SpeculativeStoreBypassDisabledKernel[11..12], | |
2441 | SpeculativeStoreBypassDisableRequired set_SpeculativeStoreBypassDisableRequired[12..13], | |
2442 | BpbDisabledKernelToUser set_BpbDisabledKernelToUser[13..14], | |
2443 | SpecCtrlRetpolineEnabled set_SpecCtrlRetpolineEnabled[14..15], | |
2444 | SpecCtrlImportOptimizationEnabled set_SpecCtrlImportOptimizationEnabled[15..16], | |
2445 | Reserved set_Reserved[16..32], | |
2446 | ]} | |
2447 | pub type PSYSTEM_SPECULATION_CONTROL_INFORMATION = *mut SYSTEM_SPECULATION_CONTROL_INFORMATION; | |
2448 | STRUCT!{struct SYSTEM_DMA_GUARD_POLICY_INFORMATION { | |
2449 | DmaGuardPolicyEnabled: BOOLEAN, | |
2450 | }} | |
2451 | pub type PSYSTEM_DMA_GUARD_POLICY_INFORMATION = *mut SYSTEM_DMA_GUARD_POLICY_INFORMATION; | |
2452 | STRUCT!{struct SYSTEM_ENCLAVE_LAUNCH_CONTROL_INFORMATION { | |
2453 | EnclaveLaunchSigner: [UCHAR; 32], | |
2454 | }} | |
2455 | pub type PSYSTEM_ENCLAVE_LAUNCH_CONTROL_INFORMATION = | |
2456 | *mut SYSTEM_ENCLAVE_LAUNCH_CONTROL_INFORMATION; | |
2457 | STRUCT!{struct SYSTEM_WORKLOAD_ALLOWED_CPU_SET_INFORMATION { | |
2458 | WorkloadClass: ULONGLONG, | |
2459 | CpuSets: [ULONGLONG; 1], | |
2460 | }} | |
2461 | pub type PSYSTEM_WORKLOAD_ALLOWED_CPU_SET_INFORMATION = | |
2462 | *mut SYSTEM_WORKLOAD_ALLOWED_CPU_SET_INFORMATION; | |
2463 | EXTERN!{extern "system" { | |
2464 | fn NtQuerySystemInformation( | |
2465 | SystemInformationClass: SYSTEM_INFORMATION_CLASS, | |
2466 | SystemInformation: PVOID, | |
2467 | SystemInformationLength: ULONG, | |
2468 | ReturnLength: PULONG, | |
2469 | ) -> NTSTATUS; | |
2470 | fn NtQuerySystemInformationEx( | |
2471 | SystemInformationClass: SYSTEM_INFORMATION_CLASS, | |
2472 | InputBuffer: PVOID, | |
2473 | InputBufferLength: ULONG, | |
2474 | SystemInformation: PVOID, | |
2475 | SystemInformationLength: ULONG, | |
2476 | ReturnLength: PULONG, | |
2477 | ) -> NTSTATUS; | |
2478 | fn NtSetSystemInformation( | |
2479 | SystemInformationClass: SYSTEM_INFORMATION_CLASS, | |
2480 | SystemInformation: PVOID, | |
2481 | SystemInformationLength: ULONG, | |
2482 | ) -> NTSTATUS; | |
2483 | }} | |
2484 | ENUM!{enum SYSDBG_COMMAND { | |
2485 | SysDbgQueryModuleInformation = 0, | |
2486 | SysDbgQueryTraceInformation = 1, | |
2487 | SysDbgSetTracepoint = 2, | |
2488 | SysDbgSetSpecialCall = 3, | |
2489 | SysDbgClearSpecialCalls = 4, | |
2490 | SysDbgQuerySpecialCalls = 5, | |
2491 | SysDbgBreakPoint = 6, | |
2492 | SysDbgQueryVersion = 7, | |
2493 | SysDbgReadVirtual = 8, | |
2494 | SysDbgWriteVirtual = 9, | |
2495 | SysDbgReadPhysical = 10, | |
2496 | SysDbgWritePhysical = 11, | |
2497 | SysDbgReadControlSpace = 12, | |
2498 | SysDbgWriteControlSpace = 13, | |
2499 | SysDbgReadIoSpace = 14, | |
2500 | SysDbgWriteIoSpace = 15, | |
2501 | SysDbgReadMsr = 16, | |
2502 | SysDbgWriteMsr = 17, | |
2503 | SysDbgReadBusData = 18, | |
2504 | SysDbgWriteBusData = 19, | |
2505 | SysDbgCheckLowMemory = 20, | |
2506 | SysDbgEnableKernelDebugger = 21, | |
2507 | SysDbgDisableKernelDebugger = 22, | |
2508 | SysDbgGetAutoKdEnable = 23, | |
2509 | SysDbgSetAutoKdEnable = 24, | |
2510 | SysDbgGetPrintBufferSize = 25, | |
2511 | SysDbgSetPrintBufferSize = 26, | |
2512 | SysDbgGetKdUmExceptionEnable = 27, | |
2513 | SysDbgSetKdUmExceptionEnable = 28, | |
2514 | SysDbgGetTriageDump = 29, | |
2515 | SysDbgGetKdBlockEnable = 30, | |
2516 | SysDbgSetKdBlockEnable = 31, | |
2517 | SysDbgRegisterForUmBreakInfo = 32, | |
2518 | SysDbgGetUmBreakPid = 33, | |
2519 | SysDbgClearUmBreakPid = 34, | |
2520 | SysDbgGetUmAttachPid = 35, | |
2521 | SysDbgClearUmAttachPid = 36, | |
2522 | SysDbgGetLiveKernelDump = 37, | |
2523 | }} | |
2524 | pub type PSYSDBG_COMMAND = *mut SYSDBG_COMMAND; | |
2525 | STRUCT!{struct SYSDBG_VIRTUAL { | |
2526 | Address: PVOID, | |
2527 | Buffer: PVOID, | |
2528 | Request: ULONG, | |
2529 | }} | |
2530 | pub type PSYSDBG_VIRTUAL = *mut SYSDBG_VIRTUAL; | |
2531 | STRUCT!{struct SYSDBG_PHYSICAL { | |
2532 | Address: PHYSICAL_ADDRESS, | |
2533 | Buffer: PVOID, | |
2534 | Request: ULONG, | |
2535 | }} | |
2536 | pub type PSYSDBG_PHYSICAL = *mut SYSDBG_PHYSICAL; | |
2537 | STRUCT!{struct SYSDBG_CONTROL_SPACE { | |
2538 | Address: ULONG64, | |
2539 | Buffer: PVOID, | |
2540 | Request: ULONG, | |
2541 | Processor: ULONG, | |
2542 | }} | |
2543 | pub type PSYSDBG_CONTROL_SPACE = *mut SYSDBG_CONTROL_SPACE; | |
2544 | STRUCT!{struct SYSDBG_IO_SPACE { | |
2545 | Address: ULONG64, | |
2546 | Buffer: PVOID, | |
2547 | Request: ULONG, | |
2548 | InterfaceType: INTERFACE_TYPE, | |
2549 | BusNumber: ULONG, | |
2550 | AddressSpace: ULONG, | |
2551 | }} | |
2552 | pub type PSYSDBG_IO_SPACE = *mut SYSDBG_IO_SPACE; | |
2553 | STRUCT!{struct SYSDBG_MSR { | |
2554 | Msr: ULONG, | |
2555 | Data: ULONG64, | |
2556 | }} | |
2557 | pub type PSYSDBG_MSR = *mut SYSDBG_MSR; | |
2558 | STRUCT!{struct SYSDBG_BUS_DATA { | |
2559 | Address: ULONG, | |
2560 | Buffer: PVOID, | |
2561 | Request: ULONG, | |
2562 | BusDataType: BUS_DATA_TYPE, | |
2563 | BusNumber: ULONG, | |
2564 | SlotNumber: ULONG, | |
2565 | }} | |
2566 | pub type PSYSDBG_BUS_DATA = *mut SYSDBG_BUS_DATA; | |
2567 | STRUCT!{struct SYSDBG_TRIAGE_DUMP { | |
2568 | Flags: ULONG, | |
2569 | BugCheckCode: ULONG, | |
2570 | BugCheckParam1: ULONG_PTR, | |
2571 | BugCheckParam2: ULONG_PTR, | |
2572 | BugCheckParam3: ULONG_PTR, | |
2573 | BugCheckParam4: ULONG_PTR, | |
2574 | ProcessHandles: ULONG, | |
2575 | ThreadHandles: ULONG, | |
2576 | Handles: PHANDLE, | |
2577 | }} | |
2578 | pub type PSYSDBG_TRIAGE_DUMP = *mut SYSDBG_TRIAGE_DUMP; | |
2579 | STRUCT!{struct SYSDBG_LIVEDUMP_CONTROL_FLAGS { | |
2580 | AsUlong: ULONG, | |
2581 | }} | |
2582 | BITFIELD!{SYSDBG_LIVEDUMP_CONTROL_FLAGS AsUlong: ULONG [ | |
2583 | UseDumpStorageStack set_UseDumpStorageStack[0..1], | |
2584 | CompressMemoryPagesData set_CompressMemoryPagesData[1..2], | |
2585 | IncludeUserSpaceMemoryPages set_IncludeUserSpaceMemoryPages[2..3], | |
2586 | AbortIfMemoryPressure set_AbortIfMemoryPressure[3..4], | |
2587 | Reserved set_Reserved[4..32], | |
2588 | ]} | |
2589 | pub type PSYSDBG_LIVEDUMP_CONTROL_FLAGS = *mut SYSDBG_LIVEDUMP_CONTROL_FLAGS; | |
2590 | STRUCT!{struct SYSDBG_LIVEDUMP_CONTROL_ADDPAGES { | |
2591 | AsUlong: ULONG, | |
2592 | }} | |
2593 | BITFIELD!{SYSDBG_LIVEDUMP_CONTROL_ADDPAGES AsUlong: ULONG [ | |
2594 | HypervisorPages set_HypervisorPages[0..1], | |
2595 | Reserved set_Reserved[1..32], | |
2596 | ]} | |
2597 | pub type PSYSDBG_LIVEDUMP_CONTROL_ADDPAGES = *mut SYSDBG_LIVEDUMP_CONTROL_ADDPAGES; | |
2598 | pub const SYSDBG_LIVEDUMP_CONTROL_VERSION: ULONG = 1; | |
2599 | STRUCT!{struct SYSDBG_LIVEDUMP_CONTROL { | |
2600 | Version: ULONG, | |
2601 | BugCheckCode: ULONG, | |
2602 | BugCheckParam1: ULONG_PTR, | |
2603 | BugCheckParam2: ULONG_PTR, | |
2604 | BugCheckParam3: ULONG_PTR, | |
2605 | BugCheckParam4: ULONG_PTR, | |
2606 | DumpFileHandle: HANDLE, | |
2607 | CancelEventHandle: HANDLE, | |
2608 | Flags: SYSDBG_LIVEDUMP_CONTROL_FLAGS, | |
2609 | AddPagesControl: SYSDBG_LIVEDUMP_CONTROL_ADDPAGES, | |
2610 | }} | |
2611 | pub type PSYSDBG_LIVEDUMP_CONTROL = *mut SYSDBG_LIVEDUMP_CONTROL; | |
2612 | EXTERN!{extern "system" { | |
2613 | fn NtSystemDebugControl( | |
2614 | Command: SYSDBG_COMMAND, | |
2615 | InputBuffer: PVOID, | |
2616 | InputBufferLength: ULONG, | |
2617 | OutputBuffer: PVOID, | |
2618 | OutputBufferLength: ULONG, | |
2619 | ReturnLength: PULONG, | |
2620 | ) -> NTSTATUS; | |
2621 | }} | |
2622 | ENUM!{enum HARDERROR_RESPONSE_OPTION { | |
2623 | OptionAbortRetryIgnore = 0, | |
2624 | OptionOk = 1, | |
2625 | OptionOkCancel = 2, | |
2626 | OptionRetryCancel = 3, | |
2627 | OptionYesNo = 4, | |
2628 | OptionYesNoCancel = 5, | |
2629 | OptionShutdownSystem = 6, | |
2630 | OptionOkNoWait = 7, | |
2631 | OptionCancelTryContinue = 8, | |
2632 | }} | |
2633 | ENUM!{enum HARDERROR_RESPONSE { | |
2634 | ResponseReturnToCaller = 0, | |
2635 | ResponseNotHandled = 1, | |
2636 | ResponseAbort = 2, | |
2637 | ResponseCancel = 3, | |
2638 | ResponseIgnore = 4, | |
2639 | ResponseNo = 5, | |
2640 | ResponseOk = 6, | |
2641 | ResponseRetry = 7, | |
2642 | ResponseYes = 8, | |
2643 | ResponseTryAgain = 9, | |
2644 | ResponseContinue = 10, | |
2645 | }} | |
2646 | pub const HARDERROR_OVERRIDE_ERRORMODE: ULONG = 0x10000000; | |
2647 | EXTERN!{extern "system" { | |
2648 | fn NtRaiseHardError( | |
2649 | ErrorStatus: NTSTATUS, | |
2650 | NumberOfParameters: ULONG, | |
2651 | UnicodeStringParameterMask: ULONG, | |
2652 | Parameters: PULONG_PTR, | |
2653 | ValidResponseOptions: ULONG, | |
2654 | Response: PULONG, | |
2655 | ) -> NTSTATUS; | |
2656 | }} | |
2657 | ENUM!{enum ALTERNATIVE_ARCHITECTURE_TYPE { | |
2658 | StandardDesign = 0, | |
2659 | NEC98x86 = 1, | |
2660 | EndAlternatives = 2, | |
2661 | }} | |
2662 | pub const PROCESSOR_FEATURE_MAX: usize = 64; | |
2663 | pub const MAX_WOW64_SHARED_ENTRIES: u32 = 16; | |
2664 | pub const NX_SUPPORT_POLICY_ALWAYSOFF: u32 = 0; | |
2665 | pub const NX_SUPPORT_POLICY_ALWAYSON: u32 = 1; | |
2666 | pub const NX_SUPPORT_POLICY_OPTIN: u32 = 2; | |
2667 | pub const NX_SUPPORT_POLICY_OPTOUT: u32 = 3; | |
2668 | UNION!{union KUSER_SHARED_DATA_u { | |
2669 | TickCount: KSYSTEM_TIME, | |
2670 | TickCountQuad: ULONG64, | |
2671 | ReservedTickCountOverlay: [ULONG; 3], | |
2672 | }} | |
2673 | STRUCT!{#[repr(packed(4))] struct KUSER_SHARED_DATA { | |
2674 | TickCountLowDeprecated: ULONG, | |
2675 | TickCountMultiplier: ULONG, | |
2676 | InterruptTime: KSYSTEM_TIME, | |
2677 | SystemTime: KSYSTEM_TIME, | |
2678 | TimeZoneBias: KSYSTEM_TIME, | |
2679 | ImageNumberLow: USHORT, | |
2680 | ImageNumberHigh: USHORT, | |
2681 | NtSystemRoot: [WCHAR; 260], | |
2682 | MaxStackTraceDepth: ULONG, | |
2683 | CryptoExponent: ULONG, | |
2684 | TimeZoneId: ULONG, | |
2685 | LargePageMinimum: ULONG, | |
2686 | AitSamplingValue: ULONG, | |
2687 | AppCompatFlag: ULONG, | |
2688 | RNGSeedVersion: ULONGLONG, | |
2689 | GlobalValidationRunlevel: ULONG, | |
2690 | TimeZoneBiasStamp: LONG, | |
2691 | NtBuildNumber: ULONG, | |
2692 | NtProductType: NT_PRODUCT_TYPE, | |
2693 | ProductTypeIsValid: BOOLEAN, | |
2694 | Reserved0: [UCHAR; 1], | |
2695 | NativeProcessorArchitecture: USHORT, | |
2696 | NtMajorVersion: ULONG, | |
2697 | NtMinorVersion: ULONG, | |
2698 | ProcessorFeatures: [BOOLEAN; PROCESSOR_FEATURE_MAX], | |
2699 | Reserved1: ULONG, | |
2700 | Reserved3: ULONG, | |
2701 | TimeSlip: ULONG, | |
2702 | AlternativeArchitecture: ALTERNATIVE_ARCHITECTURE_TYPE, | |
2703 | BootId: ULONG, | |
2704 | SystemExpirationDate: LARGE_INTEGER, | |
2705 | SuiteMask: ULONG, | |
2706 | KdDebuggerEnabled: BOOLEAN, | |
2707 | MitigationPolicies: UCHAR, | |
2708 | Reserved6: [UCHAR; 2], | |
2709 | ActiveConsoleId: ULONG, | |
2710 | DismountCount: ULONG, | |
2711 | ComPlusPackage: ULONG, | |
2712 | LastSystemRITEventTickCount: ULONG, | |
2713 | NumberOfPhysicalPages: ULONG, | |
2714 | SafeBootMode: BOOLEAN, | |
2715 | VirtualizationFlags: UCHAR, | |
2716 | Reserved12: [UCHAR; 2], | |
2717 | SharedDataFlags: ULONG, | |
2718 | DataFlagsPad: [ULONG; 1], | |
2719 | TestRetInstruction: ULONGLONG, | |
2720 | QpcFrequency: LONGLONG, | |
2721 | SystemCall: ULONG, | |
2722 | SystemCallPad0: ULONG, | |
2723 | SystemCallPad: [ULONGLONG; 2], | |
2724 | u: KUSER_SHARED_DATA_u, | |
2725 | //TickCountPad: [ULONG; 1], | |
2726 | Cookie: ULONG, | |
2727 | CookiePad: [ULONG; 1], | |
2728 | ConsoleSessionForegroundProcessId: LONGLONG, | |
2729 | TimeUpdateLock: ULONGLONG, | |
2730 | BaselineSystemTimeQpc: ULONGLONG, | |
2731 | BaselineInterruptTimeQpc: ULONGLONG, | |
2732 | QpcSystemTimeIncrement: ULONGLONG, | |
2733 | QpcInterruptTimeIncrement: ULONGLONG, | |
2734 | QpcSystemTimeIncrementShift: UCHAR, | |
2735 | QpcInterruptTimeIncrementShift: UCHAR, | |
2736 | UnparkedProcessorCount: USHORT, | |
2737 | EnclaveFeatureMask: [ULONG; 4], | |
2738 | TelemetryCoverageRound: ULONG, | |
2739 | UserModeGlobalLogger: [USHORT; 16], | |
2740 | ImageFileExecutionOptions: ULONG, | |
2741 | LangGenerationCount: ULONG, | |
2742 | Reserved4: ULONGLONG, | |
2743 | InterruptTimeBias: ULONG64, | |
2744 | QpcBias: ULONG64, | |
2745 | ActiveProcessorCount: ULONG, | |
2746 | ActiveGroupCount: UCHAR, | |
2747 | Reserved9: UCHAR, | |
2748 | QpcData: UCHAR, | |
2749 | TimeZoneBiasEffectiveStart: LARGE_INTEGER, | |
2750 | TimeZoneBiasEffectiveEnd: LARGE_INTEGER, | |
2751 | XState: XSTATE_CONFIGURATION, | |
2752 | }} | |
2753 | BITFIELD!{KUSER_SHARED_DATA MitigationPolicies: UCHAR [ | |
2754 | NXSupportPolicy set_NXSupportPolicy[0..2], | |
2755 | SEHValidationPolicy set_SEHValidationPolicy[2..4], | |
2756 | CurDirDevicesSkippedForDlls set_CurDirDevicesSkippedForDlls[4..6], | |
2757 | Reserved set_Reserved[6..8], | |
2758 | ]} | |
2759 | BITFIELD!{KUSER_SHARED_DATA SharedDataFlags: ULONG [ | |
2760 | DbgErrorPortPresent set_DbgErrorPortPresent[0..1], | |
2761 | DbgElevationEnabled set_DbgElevationEnabled[1..2], | |
2762 | DbgVirtEnabled set_DbgVirtEnabled[2..3], | |
2763 | DbgInstallerDetectEnabled set_DbgInstallerDetectEnabled[3..4], | |
2764 | DbgLkgEnabled set_DbgLkgEnabled[4..5], | |
2765 | DbgDynProcessorEnabled set_DbgDynProcessorEnabled[5..6], | |
2766 | DbgConsoleBrokerEnabled set_DbgConsoleBrokerEnabled[6..7], | |
2767 | DbgSecureBootEnabled set_DbgSecureBootEnabled[7..8], | |
2768 | DbgMultiSessionSku set_DbgMultiSessionSku[8..9], | |
2769 | DbgMultiUsersInSessionSku set_DbgMultiUsersInSessionSku[9..10], | |
2770 | DbgStateSeparationEnabled set_DbgStateSeparationEnabled[10..11], | |
2771 | SpareBits set_SpareBits[11..32], | |
2772 | ]} | |
2773 | BITFIELD!{KUSER_SHARED_DATA QpcData: UCHAR [ | |
2774 | QpcBypassEnabled set_QpcBypassEnabled[0..1], | |
2775 | QpcShift set_QpcShift[1..2], | |
2776 | ]} | |
2777 | pub type PKUSER_SHARED_DATA = *mut KUSER_SHARED_DATA; | |
2778 | pub const USER_SHARED_DATA: *const KUSER_SHARED_DATA = 0x7ffe0000 as *const _; | |
2779 | #[inline] | |
2780 | pub unsafe fn NtGetTickCount64() -> ULONGLONG { | |
923072b8 FG |
2781 | let mut tick_count: ULARGE_INTEGER = uninitialized(); |
2782 | #[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))] { | |
2783 | *tick_count.QuadPart_mut() = read_volatile(&(*USER_SHARED_DATA).u.TickCountQuad); | |
2784 | } | |
2785 | #[cfg(target_arch = "x86")] { | |
2786 | loop { | |
2787 | tick_count.s_mut().HighPart = | |
2788 | read_volatile(&(*USER_SHARED_DATA).u.TickCount.High1Time) as u32; | |
2789 | tick_count.s_mut().LowPart = read_volatile(&(*USER_SHARED_DATA).u.TickCount.LowPart); | |
2790 | if tick_count.s().HighPart == read_volatile(&(*USER_SHARED_DATA).u.TickCount.High2Time) | |
2791 | as u32 | |
2792 | { | |
2793 | break; | |
2794 | } | |
2795 | spin_loop_hint(); | |
2796 | } | |
2797 | } | |
2798 | (UInt32x32To64(tick_count.s().LowPart, (*USER_SHARED_DATA).TickCountMultiplier) >> 24) | |
2799 | + (UInt32x32To64( | |
2800 | tick_count.s().HighPart as u32, | |
2801 | (*USER_SHARED_DATA).TickCountMultiplier, | |
2802 | ) << 8) | |
2803 | } | |
2804 | #[inline] | |
2805 | pub unsafe fn NtGetTickCount() -> ULONG { | |
2806 | #[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))] { | |
2807 | ((read_volatile(&(*USER_SHARED_DATA).u.TickCountQuad) | |
2808 | * (*USER_SHARED_DATA).TickCountMultiplier as u64) >> 24) as u32 | |
2809 | } | |
2810 | #[cfg(target_arch = "x86")] { | |
923072b8 FG |
2811 | let mut tick_count: ULARGE_INTEGER = uninitialized(); |
2812 | loop { | |
2813 | tick_count.s_mut().HighPart = read_volatile(&(*USER_SHARED_DATA).u.TickCount.High1Time) | |
2814 | as u32; | |
2815 | tick_count.s_mut().LowPart = read_volatile(&(*USER_SHARED_DATA).u.TickCount.LowPart); | |
2816 | if tick_count.s().HighPart == read_volatile(&(*USER_SHARED_DATA).u.TickCount.High2Time) | |
2817 | as u32 | |
2818 | { | |
2819 | break; | |
2820 | } | |
2821 | spin_loop_hint(); | |
2822 | } | |
2823 | ((UInt32x32To64(tick_count.s().LowPart, (*USER_SHARED_DATA).TickCountMultiplier) >> 24) | |
2824 | + UInt32x32To64( | |
2825 | (tick_count.s().HighPart as u32) << 8, | |
2826 | (*USER_SHARED_DATA).TickCountMultiplier, | |
2827 | )) as u32 | |
2828 | } | |
2829 | } | |
2830 | EXTERN!{extern "system" { | |
2831 | fn NtQueryDefaultLocale( | |
2832 | UserProfile: BOOLEAN, | |
2833 | DefaultLocaleId: PLCID, | |
2834 | ) -> NTSTATUS; | |
2835 | fn NtSetDefaultLocale( | |
2836 | UserProfile: BOOLEAN, | |
2837 | DefaultLocaleId: LCID, | |
2838 | ) -> NTSTATUS; | |
2839 | fn NtQueryInstallUILanguage( | |
2840 | InstallUILanguageId: *mut LANGID, | |
2841 | ) -> NTSTATUS; | |
2842 | fn NtFlushInstallUILanguage( | |
2843 | InstallUILanguage: LANGID, | |
2844 | SetComittedFlag: ULONG, | |
2845 | ) -> NTSTATUS; | |
2846 | fn NtQueryDefaultUILanguage( | |
2847 | DefaultUILanguageId: *mut LANGID, | |
2848 | ) -> NTSTATUS; | |
2849 | fn NtSetDefaultUILanguage( | |
2850 | DefaultUILanguageId: LANGID, | |
2851 | ) -> NTSTATUS; | |
2852 | fn NtIsUILanguageComitted() -> NTSTATUS; | |
2853 | fn NtInitializeNlsFiles( | |
2854 | BaseAddress: *mut PVOID, | |
2855 | DefaultLocaleId: PLCID, | |
2856 | DefaultCasingTableSize: PLARGE_INTEGER, | |
2857 | ) -> NTSTATUS; | |
2858 | fn NtGetNlsSectionPtr( | |
2859 | SectionType: ULONG, | |
2860 | SectionData: ULONG, | |
2861 | ContextData: PVOID, | |
2862 | SectionPointer: *mut PVOID, | |
2863 | SectionSize: PULONG, | |
2864 | ) -> NTSTATUS; | |
2865 | fn NtMapCMFModule( | |
2866 | What: ULONG, | |
2867 | Index: ULONG, | |
2868 | CacheIndexOut: PULONG, | |
2869 | CacheFlagsOut: PULONG, | |
2870 | ViewSizeOut: PULONG, | |
2871 | BaseAddress: *mut PVOID, | |
2872 | ) -> NTSTATUS; | |
2873 | fn NtGetMUIRegistryInfo( | |
2874 | Flags: ULONG, | |
2875 | DataSize: PULONG, | |
2876 | Data: PVOID, | |
2877 | ) -> NTSTATUS; | |
2878 | fn NtAddAtom( | |
2879 | AtomName: PWSTR, | |
2880 | Length: ULONG, | |
2881 | Atom: PRTL_ATOM, | |
2882 | ) -> NTSTATUS; | |
2883 | }} | |
2884 | pub const ATOM_FLAG_GLOBAL: ULONG = 0x2; | |
2885 | EXTERN!{extern "system" { | |
2886 | fn NtAddAtomEx( | |
2887 | AtomName: PWSTR, | |
2888 | Length: ULONG, | |
2889 | Atom: PRTL_ATOM, | |
2890 | Flags: ULONG, | |
2891 | ) -> NTSTATUS; | |
2892 | fn NtFindAtom( | |
2893 | AtomName: PWSTR, | |
2894 | Length: ULONG, | |
2895 | Atom: PRTL_ATOM, | |
2896 | ) -> NTSTATUS; | |
2897 | fn NtDeleteAtom( | |
2898 | Atom: RTL_ATOM, | |
2899 | ) -> NTSTATUS; | |
2900 | }} | |
2901 | ENUM!{enum ATOM_INFORMATION_CLASS { | |
2902 | AtomBasicInformation = 0, | |
2903 | AtomTableInformation = 1, | |
2904 | }} | |
2905 | STRUCT!{struct ATOM_BASIC_INFORMATION { | |
2906 | UsageCount: USHORT, | |
2907 | Flags: USHORT, | |
2908 | NameLength: USHORT, | |
2909 | Name: [WCHAR; 1], | |
2910 | }} | |
2911 | pub type PATOM_BASIC_INFORMATION = *mut ATOM_BASIC_INFORMATION; | |
2912 | STRUCT!{struct ATOM_TABLE_INFORMATION { | |
2913 | NumberOfAtoms: ULONG, | |
2914 | Atoms: [RTL_ATOM; 1], | |
2915 | }} | |
2916 | pub type PATOM_TABLE_INFORMATION = *mut ATOM_TABLE_INFORMATION; | |
2917 | EXTERN!{extern "system" { | |
2918 | fn NtQueryInformationAtom( | |
2919 | Atom: RTL_ATOM, | |
2920 | AtomInformationClass: ATOM_INFORMATION_CLASS, | |
2921 | AtomInformation: PVOID, | |
2922 | AtomInformationLength: ULONG, | |
2923 | ReturnLength: PULONG, | |
2924 | ) -> NTSTATUS; | |
2925 | }} | |
2926 | pub const FLG_STOP_ON_EXCEPTION: u32 = 0x00000001; | |
2927 | pub const FLG_SHOW_LDR_SNAPS: u32 = 0x00000002; | |
2928 | pub const FLG_DEBUG_INITIAL_COMMAND: u32 = 0x00000004; | |
2929 | pub const FLG_STOP_ON_HUNG_GUI: u32 = 0x00000008; | |
2930 | pub const FLG_HEAP_ENABLE_TAIL_CHECK: u32 = 0x00000010; | |
2931 | pub const FLG_HEAP_ENABLE_FREE_CHECK: u32 = 0x00000020; | |
2932 | pub const FLG_HEAP_VALIDATE_PARAMETERS: u32 = 0x00000040; | |
2933 | pub const FLG_HEAP_VALIDATE_ALL: u32 = 0x00000080; | |
2934 | pub const FLG_APPLICATION_VERIFIER: u32 = 0x00000100; | |
2935 | pub const FLG_POOL_ENABLE_TAGGING: u32 = 0x00000400; | |
2936 | pub const FLG_HEAP_ENABLE_TAGGING: u32 = 0x00000800; | |
2937 | pub const FLG_USER_STACK_TRACE_DB: u32 = 0x00001000; | |
2938 | pub const FLG_KERNEL_STACK_TRACE_DB: u32 = 0x00002000; | |
2939 | pub const FLG_MAINTAIN_OBJECT_TYPELIST: u32 = 0x00004000; | |
2940 | pub const FLG_HEAP_ENABLE_TAG_BY_DLL: u32 = 0x00008000; | |
2941 | pub const FLG_DISABLE_STACK_EXTENSION: u32 = 0x00010000; | |
2942 | pub const FLG_ENABLE_CSRDEBUG: u32 = 0x00020000; | |
2943 | pub const FLG_ENABLE_KDEBUG_SYMBOL_LOAD: u32 = 0x00040000; | |
2944 | pub const FLG_DISABLE_PAGE_KERNEL_STACKS: u32 = 0x00080000; | |
2945 | pub const FLG_ENABLE_SYSTEM_CRIT_BREAKS: u32 = 0x00100000; | |
2946 | pub const FLG_HEAP_DISABLE_COALESCING: u32 = 0x00200000; | |
2947 | pub const FLG_ENABLE_CLOSE_EXCEPTIONS: u32 = 0x00400000; | |
2948 | pub const FLG_ENABLE_EXCEPTION_LOGGING: u32 = 0x00800000; | |
2949 | pub const FLG_ENABLE_HANDLE_TYPE_TAGGING: u32 = 0x01000000; | |
2950 | pub const FLG_HEAP_PAGE_ALLOCS: u32 = 0x02000000; | |
2951 | pub const FLG_DEBUG_INITIAL_COMMAND_EX: u32 = 0x04000000; | |
2952 | pub const FLG_DISABLE_DBGPRINT: u32 = 0x08000000; | |
2953 | pub const FLG_CRITSEC_EVENT_CREATION: u32 = 0x10000000; | |
2954 | pub const FLG_LDR_TOP_DOWN: u32 = 0x20000000; | |
2955 | pub const FLG_ENABLE_HANDLE_EXCEPTIONS: u32 = 0x40000000; | |
2956 | pub const FLG_DISABLE_PROTDLLS: u32 = 0x80000000; | |
2957 | pub const FLG_VALID_BITS: u32 = 0xfffffdff; | |
2958 | pub const FLG_USERMODE_VALID_BITS: u32 = FLG_STOP_ON_EXCEPTION | FLG_SHOW_LDR_SNAPS | |
2959 | | FLG_HEAP_ENABLE_TAIL_CHECK | FLG_HEAP_ENABLE_FREE_CHECK | FLG_HEAP_VALIDATE_PARAMETERS | |
2960 | | FLG_HEAP_VALIDATE_ALL | FLG_APPLICATION_VERIFIER | FLG_HEAP_ENABLE_TAGGING | |
2961 | | FLG_USER_STACK_TRACE_DB | FLG_HEAP_ENABLE_TAG_BY_DLL | FLG_DISABLE_STACK_EXTENSION | |
2962 | | FLG_ENABLE_SYSTEM_CRIT_BREAKS | FLG_HEAP_DISABLE_COALESCING | FLG_DISABLE_PROTDLLS | |
2963 | | FLG_HEAP_PAGE_ALLOCS | FLG_CRITSEC_EVENT_CREATION | FLG_LDR_TOP_DOWN; | |
2964 | pub const FLG_BOOTONLY_VALID_BITS: u32 = FLG_KERNEL_STACK_TRACE_DB | FLG_MAINTAIN_OBJECT_TYPELIST | |
2965 | | FLG_ENABLE_CSRDEBUG | FLG_DEBUG_INITIAL_COMMAND | FLG_DEBUG_INITIAL_COMMAND_EX | |
2966 | | FLG_DISABLE_PAGE_KERNEL_STACKS; | |
2967 | pub const FLG_KERNELMODE_VALID_BITS: u32 = FLG_STOP_ON_EXCEPTION | FLG_SHOW_LDR_SNAPS | |
2968 | | FLG_STOP_ON_HUNG_GUI | FLG_POOL_ENABLE_TAGGING | FLG_ENABLE_KDEBUG_SYMBOL_LOAD | |
2969 | | FLG_ENABLE_CLOSE_EXCEPTIONS | FLG_ENABLE_EXCEPTION_LOGGING | FLG_ENABLE_HANDLE_TYPE_TAGGING | |
2970 | | FLG_DISABLE_DBGPRINT | FLG_ENABLE_HANDLE_EXCEPTIONS; | |
2971 | EXTERN!{extern "system" { | |
2972 | fn NtQueryLicenseValue( | |
2973 | ValueName: PUNICODE_STRING, | |
2974 | Type: PULONG, | |
2975 | Data: PVOID, | |
2976 | DataSize: ULONG, | |
2977 | ResultDataSize: PULONG, | |
2978 | ) -> NTSTATUS; | |
2979 | fn NtSetDefaultHardErrorPort( | |
2980 | DefaultHardErrorPort: HANDLE, | |
2981 | ) -> NTSTATUS; | |
2982 | }} | |
2983 | ENUM!{enum SHUTDOWN_ACTION { | |
2984 | ShutdownNoReboot = 0, | |
2985 | ShutdownReboot = 1, | |
2986 | ShutdownPowerOff = 2, | |
2987 | }} | |
2988 | EXTERN!{extern "system" { | |
2989 | fn NtShutdownSystem( | |
2990 | Action: SHUTDOWN_ACTION, | |
2991 | ) -> NTSTATUS; | |
2992 | fn NtDisplayString( | |
2993 | String: PUNICODE_STRING, | |
2994 | ) -> NTSTATUS; | |
2995 | fn NtDrawText( | |
2996 | Text: PUNICODE_STRING, | |
2997 | ) -> NTSTATUS; | |
2998 | }} |