Sync with trunk revision r58045 to bring the corrections on configure.cmd and on...
[reactos.git] / include / ndk / extypes.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 extypes.h
8
9 Abstract:
10
11 Type definitions for the Executive.
12
13 Author:
14
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16
17 --*/
18
19 #ifndef _EXTYPES_H
20 #define _EXTYPES_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26 #include <cfg.h>
27 #if !defined(NTOS_MODE_USER)
28 #include <ntimage.h>
29 #endif
30 #include <cmtypes.h>
31 #include <ketypes.h>
32 #include <potypes.h>
33 #include <lpctypes.h>
34 #ifdef NTOS_MODE_USER
35 #include <obtypes.h>
36 #endif
37
38 //
39 // GCC compatibility
40 //
41 #if defined(__GNUC__)
42 #define __ALIGNED(n) __attribute__((aligned (n)))
43 #elif defined(_MSC_VER)
44 #define __ALIGNED(n) __declspec(align(n))
45 #else
46 #error __ALIGNED not defined for your compiler!
47 #endif
48
49 //
50 // Rtl Atom
51 //
52 typedef USHORT RTL_ATOM, *PRTL_ATOM;
53
54 #ifndef NTOS_MODE_USER
55
56 //
57 // Kernel Exported Object Types
58 //
59 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType;
60 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType;
61 extern POBJECT_TYPE NTSYSAPI ExIoCompletionType;
62 extern POBJECT_TYPE NTSYSAPI ExMutantObjectType;
63 extern POBJECT_TYPE NTSYSAPI ExTimerType;
64
65 //
66 // Exported NT Build Number
67 //
68 extern ULONG NTSYSAPI NtBuildNumber;
69
70 //
71 // Invalid Handle Value Constant
72 //
73 #define INVALID_HANDLE_VALUE (HANDLE)-1
74
75 #endif
76
77 //
78 // Increments
79 //
80 #define MUTANT_INCREMENT 1
81
82 //
83 // Callback Object Access Mask
84 //
85 #define CALLBACK_MODIFY_STATE 0x0001
86 #define CALLBACK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
87 SYNCHRONIZE | \
88 CALLBACK_MODIFY_STATE)
89
90 //
91 // Event Object Access Masks
92 //
93 #ifdef NTOS_MODE_USER
94 #define EVENT_QUERY_STATE 0x0001
95
96 //
97 // Semaphore Object Access Masks
98 //
99 #define SEMAPHORE_QUERY_STATE 0x0001
100 #else
101
102 //
103 // Mutant Object Access Masks
104 //
105 #define MUTANT_QUERY_STATE 0x0001
106 #define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
107 SYNCHRONIZE | \
108 MUTANT_QUERY_STATE)
109
110 #define TIMER_QUERY_STATE 0x0001
111 #define TIMER_MODIFY_STATE 0x0002
112 #define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
113 SYNCHRONIZE | \
114 TIMER_QUERY_STATE | \
115 TIMER_MODIFY_STATE)
116 #endif
117
118 //
119 // Event Pair Access Masks
120 //
121 #define EVENT_PAIR_ALL_ACCESS 0x1F0000L
122
123 //
124 // Profile Object Access Masks
125 //
126 #define PROFILE_CONTROL 0x0001
127 #define PROFILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | PROFILE_CONTROL)
128
129 //
130 // NtRaiseHardError-related parameters
131 //
132 #define MAXIMUM_HARDERROR_PARAMETERS 4
133 #define HARDERROR_OVERRIDE_ERRORMODE 0x10000000
134
135 //
136 // Pushlock bits
137 //
138 #define EX_PUSH_LOCK_LOCK_V ((ULONG_PTR)0x0)
139 #define EX_PUSH_LOCK_LOCK ((ULONG_PTR)0x1)
140 #define EX_PUSH_LOCK_WAITING ((ULONG_PTR)0x2)
141 #define EX_PUSH_LOCK_WAKING ((ULONG_PTR)0x4)
142 #define EX_PUSH_LOCK_MULTIPLE_SHARED ((ULONG_PTR)0x8)
143 #define EX_PUSH_LOCK_SHARE_INC ((ULONG_PTR)0x10)
144 #define EX_PUSH_LOCK_PTR_BITS ((ULONG_PTR)0xf)
145
146 //
147 // Pushlock Wait Block Flags
148 //
149 #define EX_PUSH_LOCK_FLAGS_EXCLUSIVE 1
150 #define EX_PUSH_LOCK_FLAGS_WAIT_V 1
151 #define EX_PUSH_LOCK_FLAGS_WAIT 2
152
153 //
154 // Resource (ERESOURCE) Flags
155 //
156 #define ResourceHasDisabledPriorityBoost 0x08
157
158 //
159 // Shutdown types for NtShutdownSystem
160 //
161 typedef enum _SHUTDOWN_ACTION
162 {
163 ShutdownNoReboot,
164 ShutdownReboot,
165 ShutdownPowerOff
166 } SHUTDOWN_ACTION;
167
168 //
169 // Responses for NtRaiseHardError
170 //
171 typedef enum _HARDERROR_RESPONSE_OPTION
172 {
173 OptionAbortRetryIgnore,
174 OptionOk,
175 OptionOkCancel,
176 OptionRetryCancel,
177 OptionYesNo,
178 OptionYesNoCancel,
179 OptionShutdownSystem,
180 OptionOkNoWait,
181 OptionCancelTryContinue
182 } HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;
183
184 typedef enum _HARDERROR_RESPONSE
185 {
186 ResponseReturnToCaller,
187 ResponseNotHandled,
188 ResponseAbort,
189 ResponseCancel,
190 ResponseIgnore,
191 ResponseNo,
192 ResponseOk,
193 ResponseRetry,
194 ResponseYes,
195 ResponseTryAgain,
196 ResponseContinue
197 } HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
198
199 //
200 // System Information Classes for NtQuerySystemInformation
201 //
202 typedef enum _SYSTEM_INFORMATION_CLASS
203 {
204 SystemBasicInformation,
205 SystemProcessorInformation,
206 SystemPerformanceInformation,
207 SystemTimeOfDayInformation,
208 SystemPathInformation, /// Obsolete: Use KUSER_SHARED_DATA
209 SystemProcessInformation,
210 SystemCallCountInformation,
211 SystemDeviceInformation,
212 SystemProcessorPerformanceInformation,
213 SystemFlagsInformation,
214 SystemCallTimeInformation,
215 SystemModuleInformation,
216 SystemLocksInformation,
217 SystemStackTraceInformation,
218 SystemPagedPoolInformation,
219 SystemNonPagedPoolInformation,
220 SystemHandleInformation,
221 SystemObjectInformation,
222 SystemPageFileInformation,
223 SystemVdmInstemulInformation,
224 SystemVdmBopInformation,
225 SystemFileCacheInformation,
226 SystemPoolTagInformation,
227 SystemInterruptInformation,
228 SystemDpcBehaviorInformation,
229 SystemFullMemoryInformation,
230 SystemLoadGdiDriverInformation,
231 SystemUnloadGdiDriverInformation,
232 SystemTimeAdjustmentInformation,
233 SystemSummaryMemoryInformation,
234 SystemMirrorMemoryInformation,
235 SystemPerformanceTraceInformation,
236 SystemObsolete0,
237 SystemExceptionInformation,
238 SystemCrashDumpStateInformation,
239 SystemKernelDebuggerInformation,
240 SystemContextSwitchInformation,
241 SystemRegistryQuotaInformation,
242 SystemExtendServiceTableInformation,
243 SystemPrioritySeperation,
244 SystemPlugPlayBusInformation,
245 SystemDockInformation,
246 SystemPowerInformationNative,
247 SystemProcessorSpeedInformation,
248 SystemCurrentTimeZoneInformation,
249 SystemLookasideInformation,
250 SystemTimeSlipNotification,
251 SystemSessionCreate,
252 SystemSessionDetach,
253 SystemSessionInformation,
254 SystemRangeStartInformation,
255 SystemVerifierInformation,
256 SystemAddVerifier,
257 SystemSessionProcessesInformation,
258 SystemLoadGdiDriverInSystemSpaceInformation,
259 SystemNumaProcessorMap,
260 SystemPrefetcherInformation,
261 SystemExtendedProcessInformation,
262 SystemRecommendedSharedDataAlignment,
263 SystemComPlusPackage,
264 SystemNumaAvailableMemory,
265 SystemProcessorPowerInformation,
266 SystemEmulationBasicInformation,
267 SystemEmulationProcessorInformation,
268 SystemExtendedHanfleInformation,
269 SystemLostDelayedWriteInformation,
270 SystemBigPoolInformation,
271 SystemSessionPoolTagInformation,
272 SystemSessionMappedViewInformation,
273 SystemHotpatchInformation,
274 SystemObjectSecurityMode,
275 SystemWatchDogTimerHandler,
276 SystemWatchDogTimerInformation,
277 SystemLogicalProcessorInformation,
278 SystemWow64SharedInformationObsolete,
279 SystemRegisterFirmwareTableInformationHandler,
280 SystemFirmwareTableInformation,
281 SystemModuleInformationEx,
282 SystemVerifierTriageInformation,
283 SystemSuperfetchInformation,
284 SystemMemoryListInformation,
285 SystemFileCacheInformationEx,
286 SystemThreadPriorityClientIdInformation,
287 SystemProcessorIdleCycleTimeInformation,
288 SystemVerifierCancellationInformation,
289 SystemProcessorPowerInformationEx,
290 SystemRefTraceInformation,
291 SystemSpecialPoolInformation,
292 SystemProcessIdInformation,
293 SystemErrorPortInformation,
294 SystemBootEnvironmentInformation,
295 SystemHypervisorInformation,
296 SystemVerifierInformationEx,
297 SystemTimeZoneInformation,
298 SystemImageFileExecutionOptionsInformation,
299 SystemCoverageInformation,
300 SystemPrefetchPathInformation,
301 SystemVerifierFaultsInformation,
302 MaxSystemInfoClass,
303 } SYSTEM_INFORMATION_CLASS;
304
305 //
306 // System Information Classes for NtQueryMutant
307 //
308 typedef enum _MUTANT_INFORMATION_CLASS
309 {
310 MutantBasicInformation,
311 MutantOwnerInformation
312 } MUTANT_INFORMATION_CLASS;
313
314 //
315 // System Information Classes for NtQueryAtom
316 //
317 typedef enum _ATOM_INFORMATION_CLASS
318 {
319 AtomBasicInformation,
320 AtomTableInformation,
321 } ATOM_INFORMATION_CLASS;
322
323 //
324 // System Information Classes for NtQueryTimer
325 //
326 typedef enum _TIMER_INFORMATION_CLASS
327 {
328 TimerBasicInformation
329 } TIMER_INFORMATION_CLASS;
330
331 //
332 // System Information Classes for NtQuerySemaphore
333 //
334 typedef enum _SEMAPHORE_INFORMATION_CLASS
335 {
336 SemaphoreBasicInformation
337 } SEMAPHORE_INFORMATION_CLASS;
338
339 //
340 // System Information Classes for NtQueryEvent
341 //
342 typedef enum _EVENT_INFORMATION_CLASS
343 {
344 EventBasicInformation
345 } EVENT_INFORMATION_CLASS;
346
347 #ifdef NTOS_MODE_USER
348
349 //
350 // Firmware Table Actions for SystemFirmwareTableInformation
351 //
352 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
353 {
354 SystemFirmwareTable_Enumerate = 0,
355 SystemFirmwareTable_Get = 1,
356 } SYSTEM_FIRMWARE_TABLE_ACTION, *PSYSTEM_FIRMWARE_TABLE_ACTION;
357
358 //
359 // Firmware Handler Callback
360 //
361 struct _SYSTEM_FIRMWARE_TABLE_INFORMATION;
362 typedef
363 NTSTATUS
364 (__cdecl *PFNFTH)(
365 IN struct _SYSTEM_FIRMWARE_TABLE_INFORMATION *FirmwareTableInformation
366 );
367
368 #else
369
370 //
371 // Handle Enumeration Callback
372 //
373 struct _HANDLE_TABLE_ENTRY;
374 typedef BOOLEAN
375 (NTAPI *PEX_ENUM_HANDLE_CALLBACK)(
376 IN struct _HANDLE_TABLE_ENTRY *HandleTableEntry,
377 IN HANDLE Handle,
378 IN PVOID Context
379 );
380
381 //
382 // Executive Work Queue Structures
383 //
384 typedef struct _EX_QUEUE_WORKER_INFO
385 {
386 ULONG QueueDisabled:1;
387 ULONG MakeThreadsAsNecessary:1;
388 ULONG WaitMode:1;
389 ULONG WorkerCount:29;
390 } EX_QUEUE_WORKER_INFO, *PEX_QUEUE_WORKER_INFO;
391
392 typedef struct _EX_WORK_QUEUE
393 {
394 KQUEUE WorkerQueue;
395 LONG DynamicThreadCount;
396 ULONG WorkItemsProcessed;
397 ULONG WorkItemsProcessedLastPass;
398 ULONG QueueDepthLastPass;
399 EX_QUEUE_WORKER_INFO Info;
400 } EX_WORK_QUEUE, *PEX_WORK_QUEUE;
401
402 //
403 // Executive Fast Reference Structure
404 //
405 typedef struct _EX_FAST_REF
406 {
407 union
408 {
409 PVOID Object;
410 ULONG_PTR RefCnt:3;
411 ULONG_PTR Value;
412 };
413 } EX_FAST_REF, *PEX_FAST_REF;
414
415 //
416 // Executive Cache-Aware Rundown Reference Descriptor
417 //
418 typedef struct _EX_RUNDOWN_REF_CACHE_AWARE
419 {
420 PEX_RUNDOWN_REF RunRefs;
421 PVOID PoolToFree;
422 ULONG RunRefSize;
423 ULONG Number;
424 } EX_RUNDOWN_REF_CACHE_AWARE;
425
426 //
427 // Executive Rundown Wait Block
428 //
429 typedef struct _EX_RUNDOWN_WAIT_BLOCK
430 {
431 ULONG_PTR Count;
432 KEVENT WakeEvent;
433 } EX_RUNDOWN_WAIT_BLOCK, *PEX_RUNDOWN_WAIT_BLOCK;
434
435 //
436 // Executive Pushlock
437 //
438 #undef EX_PUSH_LOCK
439 #undef PEX_PUSH_LOCK
440 typedef struct _EX_PUSH_LOCK
441 {
442 union
443 {
444 struct
445 {
446 ULONG_PTR Locked:1;
447 ULONG_PTR Waiting:1;
448 ULONG_PTR Waking:1;
449 ULONG_PTR MultipleShared:1;
450 ULONG_PTR Shared:sizeof (ULONG_PTR) * 8 - 4;
451 };
452 ULONG_PTR Value;
453 PVOID Ptr;
454 };
455 } EX_PUSH_LOCK, *PEX_PUSH_LOCK;
456
457 //
458 // Executive Pushlock Wait Block
459 //
460 typedef __ALIGNED(16) struct _EX_PUSH_LOCK_WAIT_BLOCK
461 {
462 union
463 {
464 KGATE WakeGate;
465 KEVENT WakeEvent;
466 };
467 struct _EX_PUSH_LOCK_WAIT_BLOCK *Next;
468 struct _EX_PUSH_LOCK_WAIT_BLOCK *Last;
469 struct _EX_PUSH_LOCK_WAIT_BLOCK *Previous;
470 LONG ShareCount;
471 LONG Flags;
472 #if DBG
473 BOOLEAN Signaled;
474 EX_PUSH_LOCK NewValue;
475 EX_PUSH_LOCK OldValue;
476 PEX_PUSH_LOCK PushLock;
477 #endif
478 } EX_PUSH_LOCK_WAIT_BLOCK, *PEX_PUSH_LOCK_WAIT_BLOCK;
479
480 //
481 // Callback Object
482 //
483 typedef struct _CALLBACK_OBJECT
484 {
485 ULONG Signature;
486 KSPIN_LOCK Lock;
487 LIST_ENTRY RegisteredCallbacks;
488 BOOLEAN AllowMultipleCallbacks;
489 UCHAR reserved[3];
490 } CALLBACK_OBJECT;
491
492 //
493 // Callback Handle
494 //
495 typedef struct _CALLBACK_REGISTRATION
496 {
497 LIST_ENTRY Link;
498 PCALLBACK_OBJECT CallbackObject;
499 PCALLBACK_FUNCTION CallbackFunction;
500 PVOID CallbackContext;
501 ULONG Busy;
502 BOOLEAN UnregisterWaiting;
503 } CALLBACK_REGISTRATION, *PCALLBACK_REGISTRATION;
504
505 //
506 // Internal Callback Object
507 //
508 typedef struct _EX_CALLBACK_ROUTINE_BLOCK
509 {
510 EX_RUNDOWN_REF RundownProtect;
511 PEX_CALLBACK_FUNCTION Function;
512 PVOID Context;
513 } EX_CALLBACK_ROUTINE_BLOCK, *PEX_CALLBACK_ROUTINE_BLOCK;
514
515 //
516 // Internal Callback Handle
517 //
518 typedef struct _EX_CALLBACK
519 {
520 EX_FAST_REF RoutineBlock;
521 } EX_CALLBACK, *PEX_CALLBACK;
522
523 //
524 // Profile Object
525 //
526 typedef struct _EPROFILE
527 {
528 PEPROCESS Process;
529 PVOID RangeBase;
530 SIZE_T RangeSize;
531 PVOID Buffer;
532 ULONG BufferSize;
533 ULONG BucketSize;
534 PKPROFILE ProfileObject;
535 PVOID LockedBufferAddress;
536 PMDL Mdl;
537 ULONG_PTR Segment;
538 KPROFILE_SOURCE ProfileSource;
539 KAFFINITY Affinity;
540 } EPROFILE, *PEPROFILE;
541
542 //
543 // Handle Table Structures
544 //
545 typedef struct _HANDLE_TRACE_DB_ENTRY
546 {
547 CLIENT_ID ClientId;
548 HANDLE Handle;
549 ULONG Type;
550 PVOID StackTrace[16];
551 } HANDLE_TRACE_DB_ENTRY, *PHANDLE_TRACE_DB_ENTRY;
552
553 typedef struct _HANDLE_TRACE_DEBUG_INFO
554 {
555 LONG RefCount;
556 ULONG TableSize;
557 ULONG BitMaskFlags;
558 FAST_MUTEX CloseCompatcionLock;
559 ULONG CurrentStackIndex;
560 HANDLE_TRACE_DB_ENTRY TraceDb[1];
561 } HANDLE_TRACE_DEBUG_INFO, *PHANDLE_TRACE_DEBUG_INFO;
562
563 typedef struct _HANDLE_TABLE_ENTRY_INFO
564 {
565 ULONG AuditMask;
566 } HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO;
567
568 typedef struct _HANDLE_TABLE_ENTRY
569 {
570 union
571 {
572 PVOID Object;
573 ULONG_PTR ObAttributes;
574 PHANDLE_TABLE_ENTRY_INFO InfoTable;
575 ULONG_PTR Value;
576 };
577 union
578 {
579 ULONG GrantedAccess;
580 struct
581 {
582 USHORT GrantedAccessIndex;
583 USHORT CreatorBackTraceIndex;
584 };
585 LONG NextFreeTableEntry;
586 };
587 } HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY;
588
589 typedef struct _HANDLE_TABLE
590 {
591 #if (NTDDI_VERSION >= NTDDI_WINXP)
592 ULONG_PTR TableCode;
593 #else
594 PHANDLE_TABLE_ENTRY **Table;
595 #endif
596 PEPROCESS QuotaProcess;
597 PVOID UniqueProcessId;
598 #if (NTDDI_VERSION >= NTDDI_WINXP)
599 EX_PUSH_LOCK HandleTableLock[4];
600 LIST_ENTRY HandleTableList;
601 EX_PUSH_LOCK HandleContentionEvent;
602 #else
603 ERESOURCE HandleLock;
604 LIST_ENTRY HandleTableList;
605 KEVENT HandleContentionEvent;
606 #endif
607 PHANDLE_TRACE_DEBUG_INFO DebugInfo;
608 LONG ExtraInfoPages;
609 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
610 union
611 {
612 ULONG Flags;
613 UCHAR StrictFIFO:1;
614 };
615 LONG FirstFreeHandle;
616 PHANDLE_TABLE_ENTRY LastFreeHandleEntry;
617 LONG HandleCount;
618 ULONG NextHandleNeedingPool;
619 #else
620 ULONG FirstFree;
621 ULONG LastFree;
622 ULONG NextHandleNeedingPool;
623 LONG HandleCount;
624 union
625 {
626 ULONG Flags;
627 UCHAR StrictFIFO:1;
628 };
629 #endif
630 } HANDLE_TABLE, *PHANDLE_TABLE;
631
632 #endif
633
634 //
635 // Hard Error LPC Message
636 //
637 typedef struct _HARDERROR_MSG
638 {
639 PORT_MESSAGE h;
640 NTSTATUS Status;
641 LARGE_INTEGER ErrorTime;
642 ULONG ValidResponseOptions;
643 ULONG Response;
644 ULONG NumberOfParameters;
645 ULONG UnicodeStringParameterMask;
646 ULONG_PTR Parameters[MAXIMUM_HARDERROR_PARAMETERS];
647 } HARDERROR_MSG, *PHARDERROR_MSG;
648
649 //
650 // Information Structures for NtQueryMutant
651 //
652 typedef struct _MUTANT_BASIC_INFORMATION
653 {
654 LONG CurrentCount;
655 BOOLEAN OwnedByCaller;
656 BOOLEAN AbandonedState;
657 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
658
659 typedef struct _MUTANT_OWNER_INFORMATION
660 {
661 CLIENT_ID ClientId;
662 } MUTANT_OWNER_INFORMATION, *PMUTANT_OWNER_INFORMATION;
663
664 //
665 // Information Structures for NtQueryAtom
666 //
667 typedef struct _ATOM_BASIC_INFORMATION
668 {
669 USHORT UsageCount;
670 USHORT Flags;
671 USHORT NameLength;
672 WCHAR Name[1];
673 } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
674
675 typedef struct _ATOM_TABLE_INFORMATION
676 {
677 ULONG NumberOfAtoms;
678 USHORT Atoms[1];
679 } ATOM_TABLE_INFORMATION, *PATOM_TABLE_INFORMATION;
680
681 //
682 // Information Structures for NtQueryTimer
683 //
684 typedef struct _TIMER_BASIC_INFORMATION
685 {
686 LARGE_INTEGER TimeRemaining;
687 BOOLEAN SignalState;
688 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
689
690 //
691 // Information Structures for NtQuerySemaphore
692 //
693 typedef struct _SEMAPHORE_BASIC_INFORMATION
694 {
695 LONG CurrentCount;
696 LONG MaximumCount;
697 } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
698
699 //
700 // Information Structures for NtQueryEvent
701 //
702 typedef struct _EVENT_BASIC_INFORMATION
703 {
704 EVENT_TYPE EventType;
705 LONG EventState;
706 } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
707
708 //
709 // Information Structures for NtQuerySystemInformation
710 //
711 typedef struct _SYSTEM_BASIC_INFORMATION
712 {
713 ULONG Reserved;
714 ULONG TimerResolution;
715 ULONG PageSize;
716 ULONG NumberOfPhysicalPages;
717 ULONG LowestPhysicalPageNumber;
718 ULONG HighestPhysicalPageNumber;
719 ULONG AllocationGranularity;
720 ULONG_PTR MinimumUserModeAddress;
721 ULONG_PTR MaximumUserModeAddress;
722 ULONG_PTR ActiveProcessorsAffinityMask;
723 CCHAR NumberOfProcessors;
724 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
725
726 // Class 1
727 typedef struct _SYSTEM_PROCESSOR_INFORMATION
728 {
729 USHORT ProcessorArchitecture;
730 USHORT ProcessorLevel;
731 USHORT ProcessorRevision;
732 USHORT Reserved;
733 ULONG ProcessorFeatureBits;
734 } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
735
736 // Class 2
737 typedef struct _SYSTEM_PERFORMANCE_INFORMATION
738 {
739 LARGE_INTEGER IdleProcessTime;
740 LARGE_INTEGER IoReadTransferCount;
741 LARGE_INTEGER IoWriteTransferCount;
742 LARGE_INTEGER IoOtherTransferCount;
743 ULONG IoReadOperationCount;
744 ULONG IoWriteOperationCount;
745 ULONG IoOtherOperationCount;
746 ULONG AvailablePages;
747 ULONG CommittedPages;
748 ULONG CommitLimit;
749 ULONG PeakCommitment;
750 ULONG PageFaultCount;
751 ULONG CopyOnWriteCount;
752 ULONG TransitionCount;
753 ULONG CacheTransitionCount;
754 ULONG DemandZeroCount;
755 ULONG PageReadCount;
756 ULONG PageReadIoCount;
757 ULONG CacheReadCount;
758 ULONG CacheIoCount;
759 ULONG DirtyPagesWriteCount;
760 ULONG DirtyWriteIoCount;
761 ULONG MappedPagesWriteCount;
762 ULONG MappedWriteIoCount;
763 ULONG PagedPoolPages;
764 ULONG NonPagedPoolPages;
765 ULONG PagedPoolAllocs;
766 ULONG PagedPoolFrees;
767 ULONG NonPagedPoolAllocs;
768 ULONG NonPagedPoolFrees;
769 ULONG FreeSystemPtes;
770 ULONG ResidentSystemCodePage;
771 ULONG TotalSystemDriverPages;
772 ULONG TotalSystemCodePages;
773 ULONG NonPagedPoolLookasideHits;
774 ULONG PagedPoolLookasideHits;
775 ULONG Spare3Count;
776 ULONG ResidentSystemCachePage;
777 ULONG ResidentPagedPoolPage;
778 ULONG ResidentSystemDriverPage;
779 ULONG CcFastReadNoWait;
780 ULONG CcFastReadWait;
781 ULONG CcFastReadResourceMiss;
782 ULONG CcFastReadNotPossible;
783 ULONG CcFastMdlReadNoWait;
784 ULONG CcFastMdlReadWait;
785 ULONG CcFastMdlReadResourceMiss;
786 ULONG CcFastMdlReadNotPossible;
787 ULONG CcMapDataNoWait;
788 ULONG CcMapDataWait;
789 ULONG CcMapDataNoWaitMiss;
790 ULONG CcMapDataWaitMiss;
791 ULONG CcPinMappedDataCount;
792 ULONG CcPinReadNoWait;
793 ULONG CcPinReadWait;
794 ULONG CcPinReadNoWaitMiss;
795 ULONG CcPinReadWaitMiss;
796 ULONG CcCopyReadNoWait;
797 ULONG CcCopyReadWait;
798 ULONG CcCopyReadNoWaitMiss;
799 ULONG CcCopyReadWaitMiss;
800 ULONG CcMdlReadNoWait;
801 ULONG CcMdlReadWait;
802 ULONG CcMdlReadNoWaitMiss;
803 ULONG CcMdlReadWaitMiss;
804 ULONG CcReadAheadIos;
805 ULONG CcLazyWriteIos;
806 ULONG CcLazyWritePages;
807 ULONG CcDataFlushes;
808 ULONG CcDataPages;
809 ULONG ContextSwitches;
810 ULONG FirstLevelTbFills;
811 ULONG SecondLevelTbFills;
812 ULONG SystemCalls;
813 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
814
815 // Class 3
816 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION
817 {
818 LARGE_INTEGER BootTime;
819 LARGE_INTEGER CurrentTime;
820 LARGE_INTEGER TimeZoneBias;
821 ULONG TimeZoneId;
822 ULONG Reserved;
823 #if (NTDDI_VERSION >= NTDDI_WIN2K)
824 ULONGLONG BootTimeBias;
825 ULONGLONG SleepTimeBias;
826 #endif
827 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION;
828
829 // Class 4
830 // This class is obsolete, please use KUSER_SHARED_DATA instead
831
832 // Class 5
833 typedef struct _SYSTEM_THREAD_INFORMATION
834 {
835 LARGE_INTEGER KernelTime;
836 LARGE_INTEGER UserTime;
837 LARGE_INTEGER CreateTime;
838 ULONG WaitTime;
839 PVOID StartAddress;
840 CLIENT_ID ClientId;
841 KPRIORITY Priority;
842 LONG BasePriority;
843 ULONG ContextSwitches;
844 ULONG ThreadState;
845 ULONG WaitReason;
846 ULONG PadPadAlignment;
847 } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
848 #ifndef _WIN64
849 C_ASSERT(sizeof(SYSTEM_THREAD_INFORMATION) == 0x40); // Must be 8-byte aligned
850 #endif
851
852 typedef struct _SYSTEM_PROCESS_INFORMATION
853 {
854 ULONG NextEntryOffset;
855 ULONG NumberOfThreads;
856 LARGE_INTEGER WorkingSetPrivateSize; //VISTA
857 ULONG HardFaultCount; //WIN7
858 ULONG NumberOfThreadsHighWatermark; //WIN7
859 ULONGLONG CycleTime; //WIN7
860 LARGE_INTEGER CreateTime;
861 LARGE_INTEGER UserTime;
862 LARGE_INTEGER KernelTime;
863 UNICODE_STRING ImageName;
864 KPRIORITY BasePriority;
865 HANDLE UniqueProcessId;
866 HANDLE InheritedFromUniqueProcessId;
867 ULONG HandleCount;
868 ULONG SessionId;
869 ULONG_PTR PageDirectoryBase;
870
871 //
872 // This part corresponds to VM_COUNTERS_EX.
873 // NOTE: *NOT* THE SAME AS VM_COUNTERS!
874 //
875 SIZE_T PeakVirtualSize;
876 SIZE_T VirtualSize;
877 ULONG PageFaultCount;
878 SIZE_T PeakWorkingSetSize;
879 SIZE_T WorkingSetSize;
880 SIZE_T QuotaPeakPagedPoolUsage;
881 SIZE_T QuotaPagedPoolUsage;
882 SIZE_T QuotaPeakNonPagedPoolUsage;
883 SIZE_T QuotaNonPagedPoolUsage;
884 SIZE_T PagefileUsage;
885 SIZE_T PeakPagefileUsage;
886 SIZE_T PrivatePageCount;
887
888 //
889 // This part corresponds to IO_COUNTERS
890 //
891 LARGE_INTEGER ReadOperationCount;
892 LARGE_INTEGER WriteOperationCount;
893 LARGE_INTEGER OtherOperationCount;
894 LARGE_INTEGER ReadTransferCount;
895 LARGE_INTEGER WriteTransferCount;
896 LARGE_INTEGER OtherTransferCount;
897 // SYSTEM_THREAD_INFORMATION TH[1];
898 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
899 #ifndef _WIN64
900 C_ASSERT(sizeof(SYSTEM_PROCESS_INFORMATION) == 0xB8); // Must be 8-byte aligned
901 #endif
902
903 //
904 // Class 6
905 typedef struct _SYSTEM_CALL_COUNT_INFORMATION
906 {
907 ULONG Length;
908 ULONG NumberOfTables;
909 } SYSTEM_CALL_COUNT_INFORMATION, *PSYSTEM_CALL_COUNT_INFORMATION;
910
911 // Class 7
912 typedef struct _SYSTEM_DEVICE_INFORMATION
913 {
914 ULONG NumberOfDisks;
915 ULONG NumberOfFloppies;
916 ULONG NumberOfCdRoms;
917 ULONG NumberOfTapes;
918 ULONG NumberOfSerialPorts;
919 ULONG NumberOfParallelPorts;
920 } SYSTEM_DEVICE_INFORMATION, *PSYSTEM_DEVICE_INFORMATION;
921
922 // Class 8
923 typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
924 {
925 LARGE_INTEGER IdleTime;
926 LARGE_INTEGER KernelTime;
927 LARGE_INTEGER UserTime;
928 LARGE_INTEGER DpcTime;
929 LARGE_INTEGER InterruptTime;
930 ULONG InterruptCount;
931 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
932
933 // Class 9
934 typedef struct _SYSTEM_FLAGS_INFORMATION
935 {
936 ULONG Flags;
937 } SYSTEM_FLAGS_INFORMATION, *PSYSTEM_FLAGS_INFORMATION;
938
939 // Class 10
940 typedef struct _SYSTEM_CALL_TIME_INFORMATION
941 {
942 ULONG Length;
943 ULONG TotalCalls;
944 LARGE_INTEGER TimeOfCalls[1];
945 } SYSTEM_CALL_TIME_INFORMATION, *PSYSTEM_CALL_TIME_INFORMATION;
946
947 // Class 11 - See RTL_PROCESS_MODULES
948
949 // Class 12 - See RTL_PROCESS_LOCKS
950
951 // Class 13 - See RTL_PROCESS_BACKTRACES
952
953 // Class 14 - 15
954 typedef struct _SYSTEM_POOL_ENTRY
955 {
956 BOOLEAN Allocated;
957 BOOLEAN Spare0;
958 USHORT AllocatorBackTraceIndex;
959 ULONG Size;
960 union
961 {
962 UCHAR Tag[4];
963 ULONG TagUlong;
964 PVOID ProcessChargedQuota;
965 };
966 } SYSTEM_POOL_ENTRY, *PSYSTEM_POOL_ENTRY;
967
968 typedef struct _SYSTEM_POOL_INFORMATION
969 {
970 SIZE_T TotalSize;
971 PVOID FirstEntry;
972 USHORT EntryOverhead;
973 BOOLEAN PoolTagPresent;
974 BOOLEAN Spare0;
975 ULONG NumberOfEntries;
976 SYSTEM_POOL_ENTRY Entries[1];
977 } SYSTEM_POOL_INFORMATION, *PSYSTEM_POOL_INFORMATION;
978
979 // Class 16
980 typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO
981 {
982 USHORT UniqueProcessId;
983 USHORT CreatorBackTraceIndex;
984 UCHAR ObjectTypeIndex;
985 UCHAR HandleAttributes;
986 USHORT HandleValue;
987 PVOID Object;
988 ULONG GrantedAccess;
989 } SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO;
990
991 typedef struct _SYSTEM_HANDLE_INFORMATION
992 {
993 ULONG NumberOfHandles;
994 SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[1];
995 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
996
997 // Class 17
998 typedef struct _SYSTEM_OBJECTTYPE_INFORMATION
999 {
1000 ULONG NextEntryOffset;
1001 ULONG NumberOfObjects;
1002 ULONG NumberOfHandles;
1003 ULONG TypeIndex;
1004 ULONG InvalidAttributes;
1005 GENERIC_MAPPING GenericMapping;
1006 ULONG ValidAccessMask;
1007 ULONG PoolType;
1008 BOOLEAN SecurityRequired;
1009 BOOLEAN WaitableObject;
1010 UNICODE_STRING TypeName;
1011 } SYSTEM_OBJECTTYPE_INFORMATION, *PSYSTEM_OBJECTTYPE_INFORMATION;
1012
1013 typedef struct _SYSTEM_OBJECT_INFORMATION
1014 {
1015 ULONG NextEntryOffset;
1016 PVOID Object;
1017 HANDLE CreatorUniqueProcess;
1018 USHORT CreatorBackTraceIndex;
1019 USHORT Flags;
1020 LONG PointerCount;
1021 LONG HandleCount;
1022 ULONG PagedPoolCharge;
1023 ULONG NonPagedPoolCharge;
1024 HANDLE ExclusiveProcessId;
1025 PVOID SecurityDescriptor;
1026 OBJECT_NAME_INFORMATION NameInfo;
1027 } SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION;
1028
1029 // Class 18
1030 typedef struct _SYSTEM_PAGEFILE_INFORMATION
1031 {
1032 ULONG NextEntryOffset;
1033 ULONG TotalSize;
1034 ULONG TotalInUse;
1035 ULONG PeakUsage;
1036 UNICODE_STRING PageFileName;
1037 } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
1038
1039 // Class 19
1040 typedef struct _SYSTEM_VDM_INSTEMUL_INFO
1041 {
1042 ULONG SegmentNotPresent;
1043 ULONG VdmOpcode0F;
1044 ULONG OpcodeESPrefix;
1045 ULONG OpcodeCSPrefix;
1046 ULONG OpcodeSSPrefix;
1047 ULONG OpcodeDSPrefix;
1048 ULONG OpcodeFSPrefix;
1049 ULONG OpcodeGSPrefix;
1050 ULONG OpcodeOPER32Prefix;
1051 ULONG OpcodeADDR32Prefix;
1052 ULONG OpcodeINSB;
1053 ULONG OpcodeINSW;
1054 ULONG OpcodeOUTSB;
1055 ULONG OpcodeOUTSW;
1056 ULONG OpcodePUSHF;
1057 ULONG OpcodePOPF;
1058 ULONG OpcodeINTnn;
1059 ULONG OpcodeINTO;
1060 ULONG OpcodeIRET;
1061 ULONG OpcodeINBimm;
1062 ULONG OpcodeINWimm;
1063 ULONG OpcodeOUTBimm;
1064 ULONG OpcodeOUTWimm ;
1065 ULONG OpcodeINB;
1066 ULONG OpcodeINW;
1067 ULONG OpcodeOUTB;
1068 ULONG OpcodeOUTW;
1069 ULONG OpcodeLOCKPrefix;
1070 ULONG OpcodeREPNEPrefix;
1071 ULONG OpcodeREPPrefix;
1072 ULONG OpcodeHLT;
1073 ULONG OpcodeCLI;
1074 ULONG OpcodeSTI;
1075 ULONG BopCount;
1076 } SYSTEM_VDM_INSTEMUL_INFO, *PSYSTEM_VDM_INSTEMUL_INFO;
1077
1078 // Class 20 - ULONG VDMBOPINFO
1079
1080 // Class 21
1081 typedef struct _SYSTEM_FILECACHE_INFORMATION
1082 {
1083 SIZE_T CurrentSize;
1084 SIZE_T PeakSize;
1085 ULONG PageFaultCount;
1086 SIZE_T MinimumWorkingSet;
1087 SIZE_T MaximumWorkingSet;
1088 SIZE_T CurrentSizeIncludingTransitionInPages;
1089 SIZE_T PeakSizeIncludingTransitionInPages;
1090 ULONG TransitionRePurposeCount;
1091 ULONG Flags;
1092 } SYSTEM_FILECACHE_INFORMATION, *PSYSTEM_FILECACHE_INFORMATION;
1093
1094 // Class 22
1095 typedef struct _SYSTEM_POOLTAG
1096 {
1097 union
1098 {
1099 UCHAR Tag[4];
1100 ULONG TagUlong;
1101 };
1102 ULONG PagedAllocs;
1103 ULONG PagedFrees;
1104 SIZE_T PagedUsed;
1105 ULONG NonPagedAllocs;
1106 ULONG NonPagedFrees;
1107 SIZE_T NonPagedUsed;
1108 } SYSTEM_POOLTAG, *PSYSTEM_POOLTAG;
1109
1110 typedef struct _SYSTEM_POOLTAG_INFORMATION
1111 {
1112 ULONG Count;
1113 SYSTEM_POOLTAG TagInfo[1];
1114 } SYSTEM_POOLTAG_INFORMATION, *PSYSTEM_POOLTAG_INFORMATION;
1115
1116 // Class 23
1117 typedef struct _SYSTEM_INTERRUPT_INFORMATION
1118 {
1119 ULONG ContextSwitches;
1120 ULONG DpcCount;
1121 ULONG DpcRate;
1122 ULONG TimeIncrement;
1123 ULONG DpcBypassCount;
1124 ULONG ApcBypassCount;
1125 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
1126
1127 // Class 24
1128 typedef struct _SYSTEM_DPC_BEHAVIOR_INFORMATION
1129 {
1130 ULONG Spare;
1131 ULONG DpcQueueDepth;
1132 ULONG MinimumDpcRate;
1133 ULONG AdjustDpcThreshold;
1134 ULONG IdealDpcRate;
1135 } SYSTEM_DPC_BEHAVIOR_INFORMATION, *PSYSTEM_DPC_BEHAVIOR_INFORMATION;
1136
1137 // Class 25
1138 typedef struct _SYSTEM_MEMORY_INFO
1139 {
1140 PUCHAR StringOffset;
1141 USHORT ValidCount;
1142 USHORT TransitionCount;
1143 USHORT ModifiedCount;
1144 USHORT PageTableCount;
1145 } SYSTEM_MEMORY_INFO, *PSYSTEM_MEMORY_INFO;
1146
1147 typedef struct _SYSTEM_MEMORY_INFORMATION
1148 {
1149 ULONG InfoSize;
1150 ULONG StringStart;
1151 SYSTEM_MEMORY_INFO Memory[1];
1152 } SYSTEM_MEMORY_INFORMATION, *PSYSTEM_MEMORY_INFORMATION;
1153
1154 // Class 26
1155 typedef struct _SYSTEM_GDI_DRIVER_INFORMATION
1156 {
1157 UNICODE_STRING DriverName;
1158 PVOID ImageAddress;
1159 PVOID SectionPointer;
1160 PVOID EntryPoint;
1161 PIMAGE_EXPORT_DIRECTORY ExportSectionPointer;
1162 ULONG ImageLength;
1163 } SYSTEM_GDI_DRIVER_INFORMATION, *PSYSTEM_GDI_DRIVER_INFORMATION;
1164
1165 // Class 27
1166 // Not an actually class, simply a PVOID to the ImageAddress
1167
1168 // Class 28
1169 typedef struct _SYSTEM_QUERY_TIME_ADJUST_INFORMATION
1170 {
1171 ULONG TimeAdjustment;
1172 ULONG TimeIncrement;
1173 BOOLEAN Enable;
1174 } SYSTEM_QUERY_TIME_ADJUST_INFORMATION, *PSYSTEM_QUERY_TIME_ADJUST_INFORMATION;
1175
1176 typedef struct _SYSTEM_SET_TIME_ADJUST_INFORMATION
1177 {
1178 ULONG TimeAdjustment;
1179 BOOLEAN Enable;
1180 } SYSTEM_SET_TIME_ADJUST_INFORMATION, *PSYSTEM_SET_TIME_ADJUST_INFORMATION;
1181
1182 // Class 29 - Same as 25
1183
1184 // FIXME: Class 30
1185
1186 // Class 31
1187 typedef struct _SYSTEM_REF_TRACE_INFORMATION
1188 {
1189 UCHAR TraceEnable;
1190 UCHAR TracePermanent;
1191 UNICODE_STRING TraceProcessName;
1192 UNICODE_STRING TracePoolTags;
1193 } SYSTEM_REF_TRACE_INFORMATION, *PSYSTEM_REF_TRACE_INFORMATION;
1194
1195 // Class 32 - OBSOLETE
1196
1197 // Class 33
1198 typedef struct _SYSTEM_EXCEPTION_INFORMATION
1199 {
1200 ULONG AlignmentFixupCount;
1201 ULONG ExceptionDispatchCount;
1202 ULONG FloatingEmulationCount;
1203 ULONG ByteWordEmulationCount;
1204 } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
1205
1206 // Class 34
1207 typedef struct _SYSTEM_CRASH_STATE_INFORMATION
1208 {
1209 ULONG ValidCrashDump;
1210 } SYSTEM_CRASH_STATE_INFORMATION, *PSYSTEM_CRASH_STATE_INFORMATION;
1211
1212 // Class 35
1213 typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION
1214 {
1215 BOOLEAN KernelDebuggerEnabled;
1216 BOOLEAN KernelDebuggerNotPresent;
1217 } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
1218
1219 // Class 36
1220 typedef struct _SYSTEM_CONTEXT_SWITCH_INFORMATION
1221 {
1222 ULONG ContextSwitches;
1223 ULONG FindAny;
1224 ULONG FindLast;
1225 ULONG FindIdeal;
1226 ULONG IdleAny;
1227 ULONG IdleCurrent;
1228 ULONG IdleLast;
1229 ULONG IdleIdeal;
1230 ULONG PreemptAny;
1231 ULONG PreemptCurrent;
1232 ULONG PreemptLast;
1233 ULONG SwitchToIdle;
1234 } SYSTEM_CONTEXT_SWITCH_INFORMATION, *PSYSTEM_CONTEXT_SWITCH_INFORMATION;
1235
1236 // Class 37
1237 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION
1238 {
1239 ULONG RegistryQuotaAllowed;
1240 ULONG RegistryQuotaUsed;
1241 SIZE_T PagedPoolSize;
1242 } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
1243
1244 // Class 38
1245 // Not a structure, simply send the UNICODE_STRING
1246
1247 // Class 39
1248 // Not a structure, simply send a ULONG containing the new separation
1249
1250 // Class 40
1251 typedef struct _SYSTEM_PLUGPLAY_BUS_INFORMATION
1252 {
1253 ULONG BusCount;
1254 PLUGPLAY_BUS_INSTANCE BusInstance[1];
1255 } SYSTEM_PLUGPLAY_BUS_INFORMATION, *PSYSTEM_PLUGPLAY_BUS_INFORMATION;
1256
1257 // Class 41
1258 typedef struct _SYSTEM_DOCK_INFORMATION
1259 {
1260 SYSTEM_DOCK_STATE DockState;
1261 INTERFACE_TYPE DeviceBusType;
1262 ULONG DeviceBusNumber;
1263 ULONG SlotNumber;
1264 } SYSTEM_DOCK_INFORMATION, *PSYSTEM_DOCK_INFORMATION;
1265
1266 // Class 42
1267 typedef struct _SYSTEM_POWER_INFORMATION_NATIVE
1268 {
1269 BOOLEAN SystemSuspendSupported;
1270 BOOLEAN SystemHibernateSupported;
1271 BOOLEAN ResumeTimerSupportsSuspend;
1272 BOOLEAN ResumeTimerSupportsHibernate;
1273 BOOLEAN LidSupported;
1274 BOOLEAN TurboSettingSupported;
1275 BOOLEAN TurboMode;
1276 BOOLEAN SystemAcOrDc;
1277 BOOLEAN PowerDownDisabled;
1278 LARGE_INTEGER SpindownDrives;
1279 } SYSTEM_POWER_INFORMATION_NATIVE, *PSYSTEM_POWER_INFORMATION_NATIVE;
1280
1281 // Class 43
1282 typedef struct _SYSTEM_LEGACY_DRIVER_INFORMATION
1283 {
1284 PNP_VETO_TYPE VetoType;
1285 UNICODE_STRING VetoDriver;
1286 } SYSTEM_LEGACY_DRIVER_INFORMATION, *PSYSTEM_LEGACY_DRIVER_INFORMATION;
1287
1288 // Class 44
1289 //typedef struct _TIME_ZONE_INFORMATION RTL_TIME_ZONE_INFORMATION;
1290
1291 // Class 45
1292 typedef struct _SYSTEM_LOOKASIDE_INFORMATION
1293 {
1294 USHORT CurrentDepth;
1295 USHORT MaximumDepth;
1296 ULONG TotalAllocates;
1297 ULONG AllocateMisses;
1298 ULONG TotalFrees;
1299 ULONG FreeMisses;
1300 ULONG Type;
1301 ULONG Tag;
1302 ULONG Size;
1303 } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
1304
1305 // Class 46
1306 // Not a structure. Only a HANDLE for the SlipEvent;
1307
1308 // Class 47
1309 // Not a structure. Only a ULONG for the SessionId;
1310
1311 // Class 48
1312 // Not a structure. Only a ULONG for the SessionId;
1313
1314 // FIXME: Class 49
1315
1316 // Class 50
1317 // Not a structure. Only a ULONG_PTR for the SystemRangeStart
1318
1319 // Class 51
1320 typedef struct _SYSTEM_VERIFIER_INFORMATION
1321 {
1322 ULONG NextEntryOffset;
1323 ULONG Level;
1324 UNICODE_STRING DriverName;
1325 ULONG RaiseIrqls;
1326 ULONG AcquireSpinLocks;
1327 ULONG SynchronizeExecutions;
1328 ULONG AllocationsAttempted;
1329 ULONG AllocationsSucceeded;
1330 ULONG AllocationsSucceededSpecialPool;
1331 ULONG AllocationsWithNoTag;
1332 ULONG TrimRequests;
1333 ULONG Trims;
1334 ULONG AllocationsFailed;
1335 ULONG AllocationsFailedDeliberately;
1336 ULONG Loads;
1337 ULONG Unloads;
1338 ULONG UnTrackedPool;
1339 ULONG CurrentPagedPoolAllocations;
1340 ULONG CurrentNonPagedPoolAllocations;
1341 ULONG PeakPagedPoolAllocations;
1342 ULONG PeakNonPagedPoolAllocations;
1343 SIZE_T PagedPoolUsageInBytes;
1344 SIZE_T NonPagedPoolUsageInBytes;
1345 SIZE_T PeakPagedPoolUsageInBytes;
1346 SIZE_T PeakNonPagedPoolUsageInBytes;
1347 } SYSTEM_VERIFIER_INFORMATION, *PSYSTEM_VERIFIER_INFORMATION;
1348
1349 // FIXME: Class 52
1350
1351 // Class 53
1352 typedef struct _SYSTEM_SESSION_PROCESS_INFORMATION
1353 {
1354 ULONG SessionId;
1355 ULONG SizeOfBuf;
1356 PVOID Buffer; // Same format as in SystemProcessInformation
1357 } SYSTEM_SESSION_PROCESS_INFORMATION, *PSYSTEM_SESSION_PROCESS_INFORMATION;
1358
1359 // FIXME: Class 54-97
1360
1361 //
1362 // Hotpatch flags
1363 //
1364 #define RTL_HOTPATCH_SUPPORTED_FLAG 0x01
1365 #define RTL_HOTPATCH_SWAP_OBJECT_NAMES 0x08 << 24
1366 #define RTL_HOTPATCH_SYNC_RENAME_FILES 0x10 << 24
1367 #define RTL_HOTPATCH_PATCH_USER_MODE 0x20 << 24
1368 #define RTL_HOTPATCH_REMAP_SYSTEM_DLL 0x40 << 24
1369 #define RTL_HOTPATCH_PATCH_KERNEL_MODE 0x80 << 24
1370
1371
1372 // Class 69
1373 typedef struct _SYSTEM_HOTPATCH_CODE_INFORMATION
1374 {
1375 ULONG Flags;
1376 ULONG InfoSize;
1377 union
1378 {
1379 struct
1380 {
1381 ULONG Foo;
1382 } CodeInfo;
1383 struct
1384 {
1385 USHORT NameOffset;
1386 USHORT NameLength;
1387 } KernelInfo;
1388 struct
1389 {
1390 USHORT NameOffset;
1391 USHORT NameLength;
1392 USHORT TargetNameOffset;
1393 USHORT TargetNameLength;
1394 UCHAR PatchingFinished;
1395 } UserModeInfo;
1396 struct
1397 {
1398 USHORT NameOffset;
1399 USHORT NameLength;
1400 USHORT TargetNameOffset;
1401 USHORT TargetNameLength;
1402 UCHAR PatchingFinished;
1403 NTSTATUS ReturnCode;
1404 HANDLE TargetProcess;
1405 } InjectionInfo;
1406 struct
1407 {
1408 HANDLE FileHandle1;
1409 PIO_STATUS_BLOCK IoStatusBlock1;
1410 PVOID RenameInformation1;
1411 PVOID RenameInformationLength1;
1412 HANDLE FileHandle2;
1413 PIO_STATUS_BLOCK IoStatusBlock2;
1414 PVOID RenameInformation2;
1415 PVOID RenameInformationLength2;
1416 } RenameInfo;
1417 struct
1418 {
1419 HANDLE ParentDirectory;
1420 HANDLE ObjectHandle1;
1421 HANDLE ObjectHandle2;
1422 } AtomicSwap;
1423 };
1424 } SYSTEM_HOTPATCH_CODE_INFORMATION, *PSYSTEM_HOTPATCH_CODE_INFORMATION;
1425
1426 //
1427 // Class 75
1428 //
1429 #ifdef NTOS_MODE_USER
1430 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
1431 {
1432 ULONG ProviderSignature;
1433 BOOLEAN Register;
1434 PFNFTH FirmwareTableHandler;
1435 PVOID DriverObject;
1436 } SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER;
1437
1438 //
1439 // Class 76
1440 //
1441 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
1442 {
1443 ULONG ProviderSignature;
1444 SYSTEM_FIRMWARE_TABLE_ACTION Action;
1445 ULONG TableID;
1446 ULONG TableBufferLength;
1447 UCHAR TableBuffer[1];
1448 } SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION;
1449
1450 //
1451 // Class 81
1452 //
1453 typedef struct _SYSTEM_MEMORY_LIST_INFORMATION
1454 {
1455 SIZE_T ZeroPageCount;
1456 SIZE_T FreePageCount;
1457 SIZE_T ModifiedPageCount;
1458 SIZE_T ModifiedNoWritePageCount;
1459 SIZE_T BadPageCount;
1460 SIZE_T PageCountByPriority[8];
1461 SIZE_T RepurposedPagesByPriority[8];
1462 SIZE_T ModifiedPageCountPageFile;
1463 } SYSTEM_MEMORY_LIST_INFORMATION, *PSYSTEM_MEMORY_LIST_INFORMATION;
1464
1465 #endif
1466 #endif