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