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