- Define DECLSPEC_ADDRSAFE and FORCEINLINE for gcc in winnt.h
[reactos.git] / reactos / include / ndk / extypes.h
1 /*++ NDK Version: 0095
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 (alex.ionescu@reactos.com) 06-Oct-2004
16
17 --*/
18
19 #ifndef _EXTYPES_H
20 #define _EXTYPES_H
21
22 //
23 // Dependencies
24 //
25 #include <cfg.h>
26 #if defined(_MSC_VER) && !defined(NTOS_MODE_USER)
27 #include <ntimage.h>
28 #endif
29 #include "cmtypes.h"
30 #include "ketypes.h"
31 #include "pstypes.h"
32 #include "potypes.h"
33
34 //
35 // Atom and Language IDs
36 //
37 typedef USHORT LANGID, *PLANGID;
38 typedef USHORT RTL_ATOM, *PRTL_ATOM;
39
40 #ifndef NTOS_MODE_USER
41
42 //
43 // Kernel Exported Object Types
44 //
45 extern POBJECT_TYPE NTSYSAPI ExIoCompletionType;
46 extern POBJECT_TYPE NTSYSAPI ExMutantObjectType;
47 extern POBJECT_TYPE NTSYSAPI ExTimerType;
48
49 //
50 // Invalid Handle Value Constant
51 //
52 #define INVALID_HANDLE_VALUE (HANDLE)-1
53
54 #endif
55
56 //
57 // Increments
58 //
59 #define MUTANT_INCREMENT 1
60
61 //
62 // Callback Object Access Mask
63 //
64 #define CALLBACK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x0001)
65 #define CALLBACK_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE|0x0001)
66 #define CALLBACK_WRITE (STANDARD_RIGHTS_WRITE|SYNCHRONIZE|0x0001)
67 #define CALLBACK_READ (STANDARD_RIGHTS_READ|SYNCHRONIZE|0x0001)
68
69 //
70 // Event Object Access Masks
71 //
72 #ifdef NTOS_MODE_USER
73 #define EVENT_QUERY_STATE 0x0001
74
75 //
76 // Semaphore Object Acess Masks
77 //
78 #define SEMAPHORE_QUERY_STATE 0x0001
79 #endif
80
81 //
82 // Port Object Access Masks (FIXME: lpctypes.h?)
83 //
84 #define PORT_ALL_ACCESS 0x1
85
86 //
87 // Event Pair Access Masks
88 //
89 #define EVENT_PAIR_ALL_ACCESS 0x1F0000L
90
91 //
92 // Maximum Parameters for NtRaiseHardError
93 //
94 #define MAXIMUM_HARDERROR_PARAMETERS 4
95
96 //
97 // Shutdown types for NtShutdownSystem
98 //
99 typedef enum _SHUTDOWN_ACTION
100 {
101 ShutdownNoReboot,
102 ShutdownReboot,
103 ShutdownPowerOff
104 } SHUTDOWN_ACTION;
105
106 //
107 // Responses for NtRaiseHardError
108 //
109 typedef enum _HARDERROR_RESPONSE_OPTION
110 {
111 OptionAbortRetryIgnore,
112 OptionOk,
113 OptionOkCancel,
114 OptionRetryCancel,
115 OptionYesNo,
116 OptionYesNoCancel,
117 OptionShutdownSystem
118 } HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;
119
120 typedef enum _HARDERROR_RESPONSE
121 {
122 ResponseReturnToCaller,
123 ResponseNotHandled,
124 ResponseAbort,
125 ResponseCancel,
126 ResponseIgnore,
127 ResponseNo,
128 ResponseOk,
129 ResponseRetry,
130 ResponseYes
131 } HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
132
133 //
134 // System Information Classes for NtQuerySystemInformation
135 //
136 typedef enum _SYSTEM_INFORMATION_CLASS
137 {
138 SystemBasicInformation,
139 SystemProcessorInformation,
140 SystemPerformanceInformation,
141 SystemTimeOfDayInformation,
142 SystemPathInformation, /// Obsolete: Use KUSER_SHARED_DATA
143 SystemProcessInformation,
144 SystemCallCountInformation,
145 SystemDeviceInformation,
146 SystemProcessorPerformanceInformation,
147 SystemFlagsInformation,
148 SystemCallTimeInformation,
149 SystemModuleInformation,
150 SystemLocksInformation,
151 SystemStackTraceInformation,
152 SystemPagedPoolInformation,
153 SystemNonPagedPoolInformation,
154 SystemHandleInformation,
155 SystemObjectInformation,
156 SystemPageFileInformation,
157 SystemVdmInstemulInformation,
158 SystemVdmBopInformation,
159 SystemFileCacheInformation,
160 SystemPoolTagInformation,
161 SystemInterruptInformation,
162 SystemDpcBehaviorInformation,
163 SystemFullMemoryInformation,
164 SystemLoadGdiDriverInformation,
165 SystemUnloadGdiDriverInformation,
166 SystemTimeAdjustmentInformation,
167 SystemSummaryMemoryInformation,
168 SystemNextEventIdInformation,
169 SystemEventIdsInformation,
170 SystemCrashDumpInformation,
171 SystemExceptionInformation,
172 SystemCrashDumpStateInformation,
173 SystemKernelDebuggerInformation,
174 SystemContextSwitchInformation,
175 SystemRegistryQuotaInformation,
176 SystemExtendServiceTableInformation,
177 SystemPrioritySeperation,
178 SystemPlugPlayBusInformation,
179 SystemDockInformation,
180 _SystemPowerInformation, // FIXME
181 SystemProcessorSpeedInformation,
182 SystemCurrentTimeZoneInformation,
183 SystemLookasideInformation,
184 SystemTimeSlipNotification,
185 SystemSessionCreate,
186 SystemSessionDetach,
187 SystemSessionInformation,
188 SystemRangeStartInformation,
189 SystemVerifierInformation,
190 SystemAddVerifier,
191 SystemSessionProcessesInformation,
192 SystemInformationClassMax
193 } SYSTEM_INFORMATION_CLASS;
194
195 //
196 // System Information Classes for NtQueryMutant
197 //
198 typedef enum _MUTANT_INFORMATION_CLASS
199 {
200 MutantBasicInformation
201 } MUTANT_INFORMATION_CLASS;
202
203 //
204 // System Information Classes for NtQueryAtom
205 //
206 typedef enum _ATOM_INFORMATION_CLASS
207 {
208 AtomBasicInformation,
209 AtomTableInformation,
210 } ATOM_INFORMATION_CLASS;
211
212 //
213 // System Information Classes for NtQueryTimer
214 //
215 typedef enum _TIMER_INFORMATION_CLASS
216 {
217 TimerBasicInformation
218 } TIMER_INFORMATION_CLASS;
219
220 //
221 // System Information Classes for NtQuerySemaphore
222 //
223 typedef enum _SEMAPHORE_INFORMATION_CLASS
224 {
225 SemaphoreBasicInformation
226 } SEMAPHORE_INFORMATION_CLASS;
227
228 //
229 // System Information Classes for NtQueryEvent
230 //
231 typedef enum _EVENT_INFORMATION_CLASS
232 {
233 EventBasicInformation
234 } EVENT_INFORMATION_CLASS;
235
236 #ifndef NTOS_MODE_USER
237
238 //
239 // Executive Work Queue Structures
240 //
241 typedef struct _EX_QUEUE_WORKER_INFO
242 {
243 ULONG QueueDisabled:1;
244 ULONG MakeThreadsAsNecessary:1;
245 ULONG WaitMode:1;
246 ULONG WorkerCount:29;
247 } EX_QUEUE_WORKER_INFO, *PEX_QUEUE_WORKER_INFO;
248
249 typedef struct _EX_WORK_QUEUE
250 {
251 KQUEUE WorkerQueue;
252 ULONG DynamicThreadCount;
253 ULONG WorkItemsProcessed;
254 ULONG WorkItemsProcessedLastPass;
255 ULONG QueueDepthLastPass;
256 EX_QUEUE_WORKER_INFO Info;
257 } EX_WORK_QUEUE, *PEX_WORK_QUEUE;
258
259 //
260 // Executive Fast Reference Structure
261 //
262 typedef struct _EX_FAST_REF
263 {
264 union
265 {
266 PVOID Object;
267 ULONG RefCnt:3;
268 ULONG Value;
269 };
270 } EX_FAST_REF, *PEX_FAST_REF;
271
272 //
273 // FIXME
274 //
275 typedef struct _RUNDOWN_DESCRIPTOR
276 {
277 ULONG_PTR References;
278 KEVENT RundownEvent;
279 } RUNDOWN_DESCRIPTOR, *PRUNDOWN_DESCRIPTOR;
280
281 //
282 // Callback Object
283 //
284 typedef struct _CALLBACK_OBJECT
285 {
286 ULONG Name;
287 KSPIN_LOCK Lock;
288 LIST_ENTRY RegisteredCallbacks;
289 ULONG AllowMultipleCallbacks;
290 } CALLBACK_OBJECT , *PCALLBACK_OBJECT;
291
292 //
293 // Handle Table Structures
294 //
295 typedef struct _HANDLE_TABLE_ENTRY_INFO
296 {
297 ULONG AuditMask;
298 } HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO;
299
300 typedef struct _HANDLE_TABLE_ENTRY
301 {
302 union
303 {
304 PVOID Object;
305 ULONG_PTR ObAttributes;
306 PHANDLE_TABLE_ENTRY_INFO InfoTable;
307 ULONG_PTR Value;
308 } u1;
309 union
310 {
311 ULONG GrantedAccess;
312 USHORT GrantedAccessIndex;
313 LONG NextFreeTableEntry;
314 } u2;
315 } HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY;
316
317 typedef struct _HANDLE_TABLE
318 {
319 ULONG Flags;
320 LONG HandleCount;
321 PHANDLE_TABLE_ENTRY **Table;
322 PEPROCESS QuotaProcess;
323 HANDLE UniqueProcessId;
324 LONG FirstFreeTableEntry;
325 LONG NextIndexNeedingPool;
326 ERESOURCE HandleTableLock;
327 LIST_ENTRY HandleTableList;
328 KEVENT HandleContentionEvent;
329 } HANDLE_TABLE, *PHANDLE_TABLE;
330
331 #endif
332
333 //
334 // Information Structures for NtQueryMutant
335 //
336 typedef struct _MUTANT_BASIC_INFORMATION
337 {
338 LONG CurrentCount;
339 BOOLEAN OwnedByCaller;
340 BOOLEAN AbandonedState;
341 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
342
343 //
344 // Information Structures for NtQueryAtom
345 //
346 typedef struct _ATOM_BASIC_INFORMATION
347 {
348 USHORT UsageCount;
349 USHORT Flags;
350 USHORT NameLength;
351 WCHAR Name[1];
352 } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
353
354 typedef struct _ATOM_TABLE_INFORMATION
355 {
356 ULONG NumberOfAtoms;
357 USHORT Atoms[1];
358 } ATOM_TABLE_INFORMATION, *PATOM_TABLE_INFORMATION;
359
360 //
361 // Information Structures for NtQueryTimer
362 //
363 typedef struct _TIMER_BASIC_INFORMATION
364 {
365 LARGE_INTEGER TimeRemaining;
366 BOOLEAN SignalState;
367 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
368
369 //
370 // Information Structures for NtQuerySemaphore
371 //
372 typedef struct _SEMAPHORE_BASIC_INFORMATION
373 {
374 LONG CurrentCount;
375 LONG MaximumCount;
376 } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
377
378 //
379 // Information Structures for NtQueryEvent
380 //
381 typedef struct _EVENT_BASIC_INFORMATION
382 {
383 EVENT_TYPE EventType;
384 LONG EventState;
385 } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
386
387 //
388 // Information Structures for NtQuerySystemInformation
389 //
390 typedef struct _SYSTEM_BASIC_INFORMATION
391 {
392 ULONG Reserved;
393 ULONG TimerResolution;
394 ULONG PageSize;
395 ULONG NumberOfPhysicalPages;
396 ULONG LowestPhysicalPageNumber;
397 ULONG HighestPhysicalPageNumber;
398 ULONG AllocationGranularity;
399 ULONG MinimumUserModeAddress;
400 ULONG MaximumUserModeAddress;
401 KAFFINITY ActiveProcessorsAffinityMask;
402 CCHAR NumberOfProcessors;
403 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
404
405 // Class 1
406 typedef struct _SYSTEM_PROCESSOR_INFORMATION
407 {
408 USHORT ProcessorArchitecture;
409 USHORT ProcessorLevel;
410 USHORT ProcessorRevision;
411 USHORT Reserved;
412 ULONG ProcessorFeatureBits;
413 } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
414
415 // Class 2
416 typedef struct _SYSTEM_PERFORMANCE_INFORMATION
417 {
418 LARGE_INTEGER IdleProcessTime;
419 LARGE_INTEGER IoReadTransferCount;
420 LARGE_INTEGER IoWriteTransferCount;
421 LARGE_INTEGER IoOtherTransferCount;
422 ULONG IoReadOperationCount;
423 ULONG IoWriteOperationCount;
424 ULONG IoOtherOperationCount;
425 ULONG AvailablePages;
426 ULONG CommittedPages;
427 ULONG CommitLimit;
428 ULONG PeakCommitment;
429 ULONG PageFaultCount;
430 ULONG CopyOnWriteCount;
431 ULONG TransitionCount;
432 ULONG CacheTransitionCount;
433 ULONG DemandZeroCount;
434 ULONG PageReadCount;
435 ULONG PageReadIoCount;
436 ULONG CacheReadCount;
437 ULONG CacheIoCount;
438 ULONG DirtyPagesWriteCount;
439 ULONG DirtyWriteIoCount;
440 ULONG MappedPagesWriteCount;
441 ULONG MappedWriteIoCount;
442 ULONG PagedPoolPages;
443 ULONG NonPagedPoolPages;
444 ULONG PagedPoolAllocs;
445 ULONG PagedPoolFrees;
446 ULONG NonPagedPoolAllocs;
447 ULONG NonPagedPoolFrees;
448 ULONG FreeSystemPtes;
449 ULONG ResidentSystemCodePage;
450 ULONG TotalSystemDriverPages;
451 ULONG TotalSystemCodePages;
452 ULONG NonPagedPoolLookasideHits;
453 ULONG PagedPoolLookasideHits;
454 ULONG Spare3Count;
455 ULONG ResidentSystemCachePage;
456 ULONG ResidentPagedPoolPage;
457 ULONG ResidentSystemDriverPage;
458 ULONG CcFastReadNoWait;
459 ULONG CcFastReadWait;
460 ULONG CcFastReadResourceMiss;
461 ULONG CcFastReadNotPossible;
462 ULONG CcFastMdlReadNoWait;
463 ULONG CcFastMdlReadWait;
464 ULONG CcFastMdlReadResourceMiss;
465 ULONG CcFastMdlReadNotPossible;
466 ULONG CcMapDataNoWait;
467 ULONG CcMapDataWait;
468 ULONG CcMapDataNoWaitMiss;
469 ULONG CcMapDataWaitMiss;
470 ULONG CcPinMappedDataCount;
471 ULONG CcPinReadNoWait;
472 ULONG CcPinReadWait;
473 ULONG CcPinReadNoWaitMiss;
474 ULONG CcPinReadWaitMiss;
475 ULONG CcCopyReadNoWait;
476 ULONG CcCopyReadWait;
477 ULONG CcCopyReadNoWaitMiss;
478 ULONG CcCopyReadWaitMiss;
479 ULONG CcMdlReadNoWait;
480 ULONG CcMdlReadWait;
481 ULONG CcMdlReadNoWaitMiss;
482 ULONG CcMdlReadWaitMiss;
483 ULONG CcReadAheadIos;
484 ULONG CcLazyWriteIos;
485 ULONG CcLazyWritePages;
486 ULONG CcDataFlushes;
487 ULONG CcDataPages;
488 ULONG ContextSwitches;
489 ULONG FirstLevelTbFills;
490 ULONG SecondLevelTbFills;
491 ULONG SystemCalls;
492 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
493
494 // Class 3
495 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION
496 {
497 LARGE_INTEGER BootTime;
498 LARGE_INTEGER CurrentTime;
499 LARGE_INTEGER TimeZoneBias;
500 ULONG TimeZoneId;
501 ULONG Reserved;
502 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION;
503
504 // Class 4
505 // This class is obsolete, please use KUSER_SHARED_DATA instead
506
507 // Class 5
508 typedef struct _SYSTEM_THREAD_INFORMATION
509 {
510 LARGE_INTEGER KernelTime;
511 LARGE_INTEGER UserTime;
512 LARGE_INTEGER CreateTime;
513 ULONG WaitTime;
514 PVOID StartAddress;
515 CLIENT_ID ClientId;
516 KPRIORITY Priority;
517 LONG BasePriority;
518 ULONG ContextSwitches;
519 ULONG ThreadState;
520 ULONG WaitReason;
521 } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
522
523 typedef struct _SYSTEM_PROCESS_INFORMATION
524 {
525 ULONG NextEntryOffset;
526 ULONG NumberOfThreads;
527 LARGE_INTEGER SpareLi1;
528 LARGE_INTEGER SpareLi2;
529 LARGE_INTEGER SpareLi3;
530 LARGE_INTEGER CreateTime;
531 LARGE_INTEGER UserTime;
532 LARGE_INTEGER KernelTime;
533 UNICODE_STRING ImageName;
534 KPRIORITY BasePriority;
535 HANDLE UniqueProcessId;
536 HANDLE InheritedFromUniqueProcessId;
537 ULONG HandleCount;
538 ULONG SessionId;
539 ULONG PageDirectoryFrame;
540
541 //
542 // This part corresponds to VM_COUNTERS_EX.
543 // NOTE: *NOT* THE SAME AS VM_COUNTERS!
544 //
545 ULONG PeakVirtualSize;
546 ULONG VirtualSize;
547 ULONG PageFaultCount;
548 ULONG PeakWorkingSetSize;
549 ULONG WorkingSetSize;
550 ULONG QuotaPeakPagedPoolUsage;
551 ULONG QuotaPagedPoolUsage;
552 ULONG QuotaPeakNonPagedPoolUsage;
553 ULONG QuotaNonPagedPoolUsage;
554 ULONG PagefileUsage;
555 ULONG PeakPagefileUsage;
556 ULONG PrivateUsage;
557
558 //
559 // This part corresponds to IO_COUNTERS
560 //
561 LARGE_INTEGER ReadOperationCount;
562 LARGE_INTEGER WriteOperationCount;
563 LARGE_INTEGER OtherOperationCount;
564 LARGE_INTEGER ReadTransferCount;
565 LARGE_INTEGER WriteTransferCount;
566 LARGE_INTEGER OtherTransferCount;
567
568 SYSTEM_THREAD_INFORMATION TH[1];
569 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
570
571 // Class 6
572 typedef struct _SYSTEM_CALL_COUNT_INFORMATION
573 {
574 ULONG Length;
575 ULONG NumberOfTables;
576 } SYSTEM_CALL_COUNT_INFORMATION, *PSYSTEM_CALL_COUNT_INFORMATION;
577
578 // Class 7
579 typedef struct _SYSTEM_DEVICE_INFORMATION
580 {
581 ULONG NumberOfDisks;
582 ULONG NumberOfFloppies;
583 ULONG NumberOfCdRoms;
584 ULONG NumberOfTapes;
585 ULONG NumberOfSerialPorts;
586 ULONG NumberOfParallelPorts;
587 } SYSTEM_DEVICE_INFORMATION, *PSYSTEM_DEVICE_INFORMATION;
588
589 // Class 8
590 typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
591 {
592 LARGE_INTEGER IdleTime;
593 LARGE_INTEGER KernelTime;
594 LARGE_INTEGER UserTime;
595 LARGE_INTEGER DpcTime;
596 LARGE_INTEGER InterruptTime;
597 ULONG InterruptCount;
598 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
599
600 // Class 9
601 typedef struct _SYSTEM_FLAGS_INFORMATION
602 {
603 ULONG Flags;
604 } SYSTEM_FLAGS_INFORMATION, *PSYSTEM_FLAGS_INFORMATION;
605
606 // Class 10
607 typedef struct _SYSTEM_CALL_TIME_INFORMATION
608 {
609 ULONG Length;
610 ULONG TotalCalls;
611 LARGE_INTEGER TimeOfCalls[1];
612 } SYSTEM_CALL_TIME_INFORMATION, *PSYSTEM_CALL_TIME_INFORMATION;
613
614 // Class 11
615 typedef struct _SYSTEM_MODULE_INFORMATION_ENTRY
616 {
617 ULONG Unknown1;
618 ULONG Unknown2;
619 PVOID Base;
620 ULONG Size;
621 ULONG Flags;
622 USHORT Index;
623 USHORT NameLength;
624 USHORT LoadCount;
625 USHORT PathLength;
626 CHAR ImageName[256];
627 } SYSTEM_MODULE_INFORMATION_ENTRY, *PSYSTEM_MODULE_INFORMATION_ENTRY;
628 typedef struct _SYSTEM_MODULE_INFORMATION
629 {
630 ULONG Count;
631 SYSTEM_MODULE_INFORMATION_ENTRY Module[1];
632 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
633
634 // Class 12
635 typedef struct _SYSTEM_RESOURCE_LOCK_ENTRY
636 {
637 ULONG ResourceAddress;
638 ULONG Always1;
639 ULONG Unknown;
640 ULONG ActiveCount;
641 ULONG ContentionCount;
642 ULONG Unused[2];
643 ULONG NumberOfSharedWaiters;
644 ULONG NumberOfExclusiveWaiters;
645 } SYSTEM_RESOURCE_LOCK_ENTRY, *PSYSTEM_RESOURCE_LOCK_ENTRY;
646
647 typedef struct _SYSTEM_RESOURCE_LOCK_INFO
648 {
649 ULONG Count;
650 SYSTEM_RESOURCE_LOCK_ENTRY Lock[1];
651 } SYSTEM_RESOURCE_LOCK_INFO, *PSYSTEM_RESOURCE_LOCK_INFO;
652
653 // FIXME: Class 13
654 typedef struct _SYSTEM_BACKTRACE_INFORMATION_ENTRY
655 {
656 ULONG Dummy;
657 } SYSTEM_BACKTRACE_INFORMATION_ENTRY, *PSYSTEM_BACKTRACE_INFORMATION_ENTRY;
658
659 typedef struct _SYSTEM_BACKTRACE_INFORMATION
660 {
661 ULONG Unknown[4];
662 ULONG Count;
663 SYSTEM_BACKTRACE_INFORMATION_ENTRY Trace[1];
664 } SYSTEM_BACKTRACE_INFORMATION, *PSYSTEM_BACKTRACE_INFORMATION;
665
666 // Class 14 - 15
667 typedef struct _SYSTEM_POOL_ENTRY
668 {
669 BOOLEAN Allocated;
670 BOOLEAN Spare0;
671 USHORT AllocatorBackTraceIndex;
672 ULONG Size;
673 union
674 {
675 UCHAR Tag[4];
676 ULONG TagUlong;
677 PVOID ProcessChargedQuota;
678 };
679 } SYSTEM_POOL_ENTRY, *PSYSTEM_POOL_ENTRY;
680
681 typedef struct _SYSTEM_POOL_INFORMATION
682 {
683 ULONG TotalSize;
684 PVOID FirstEntry;
685 USHORT EntryOverhead;
686 BOOLEAN PoolTagPresent;
687 BOOLEAN Spare0;
688 ULONG NumberOfEntries;
689 SYSTEM_POOL_ENTRY Entries[1];
690 } SYSTEM_POOL_INFORMATION, *PSYSTEM_POOL_INFORMATION;
691
692 // Class 16
693 typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO
694 {
695 USHORT UniqueProcessId;
696 USHORT CreatorBackTraceIndex;
697 UCHAR ObjectTypeIndex;
698 UCHAR HandleAttributes;
699 USHORT HandleValue;
700 PVOID Object;
701 ULONG GrantedAccess;
702 } SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO;
703
704 typedef struct _SYSTEM_HANDLE_INFORMATION
705 {
706 ULONG NumberOfHandles;
707 SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[1];
708 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
709
710 // Class 17
711 typedef struct _SYSTEM_OBJECTTYPE_INFORMATION
712 {
713 ULONG NextEntryOffset;
714 ULONG NumberOfObjects;
715 ULONG NumberOfHandles;
716 ULONG TypeIndex;
717 ULONG InvalidAttributes;
718 GENERIC_MAPPING GenericMapping;
719 ULONG ValidAccessMask;
720 ULONG PoolType;
721 BOOLEAN SecurityRequired;
722 BOOLEAN WaitableObject;
723 UNICODE_STRING TypeName;
724 } SYSTEM_OBJECTTYPE_INFORMATION, *PSYSTEM_OBJECTTYPE_INFORMATION;
725
726 typedef struct _SYSTEM_OBJECT_INFORMATION
727 {
728 ULONG NextEntryOffset;
729 PVOID Object;
730 HANDLE CreatorUniqueProcess;
731 USHORT CreatorBackTraceIndex;
732 USHORT Flags;
733 LONG PointerCount;
734 LONG HandleCount;
735 ULONG PagedPoolCharge;
736 ULONG NonPagedPoolCharge;
737 HANDLE ExclusiveProcessId;
738 PVOID SecurityDescriptor;
739 OBJECT_NAME_INFORMATION NameInfo;
740 } SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION;
741
742 // Class 18
743 typedef struct _SYSTEM_PAGEFILE_INFORMATION
744 {
745 ULONG NextEntryOffset;
746 ULONG TotalSize;
747 ULONG TotalInUse;
748 ULONG PeakUsage;
749 UNICODE_STRING PageFileName;
750 } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
751
752 // Class 19
753 typedef struct _SYSTEM_VDM_INSTEMUL_INFO
754 {
755 ULONG SegmentNotPresent;
756 ULONG VdmOpcode0F;
757 ULONG OpcodeESPrefix;
758 ULONG OpcodeCSPrefix;
759 ULONG OpcodeSSPrefix;
760 ULONG OpcodeDSPrefix;
761 ULONG OpcodeFSPrefix;
762 ULONG OpcodeGSPrefix;
763 ULONG OpcodeOPER32Prefix;
764 ULONG OpcodeADDR32Prefix;
765 ULONG OpcodeINSB;
766 ULONG OpcodeINSW;
767 ULONG OpcodeOUTSB;
768 ULONG OpcodeOUTSW;
769 ULONG OpcodePUSHF;
770 ULONG OpcodePOPF;
771 ULONG OpcodeINTnn;
772 ULONG OpcodeINTO;
773 ULONG OpcodeIRET;
774 ULONG OpcodeINBimm;
775 ULONG OpcodeINWimm;
776 ULONG OpcodeOUTBimm;
777 ULONG OpcodeOUTWimm ;
778 ULONG OpcodeINB;
779 ULONG OpcodeINW;
780 ULONG OpcodeOUTB;
781 ULONG OpcodeOUTW;
782 ULONG OpcodeLOCKPrefix;
783 ULONG OpcodeREPNEPrefix;
784 ULONG OpcodeREPPrefix;
785 ULONG OpcodeHLT;
786 ULONG OpcodeCLI;
787 ULONG OpcodeSTI;
788 ULONG BopCount;
789 } SYSTEM_VDM_INSTEMUL_INFO, *PSYSTEM_VDM_INSTEMUL_INFO;
790
791 // FIXME: Class 20
792 typedef struct _SYSTEM_VDM_BOP_INFO
793 {
794 PVOID Dummy;
795 } SYSTEM_VDM_BOP_INFO, *PSYSTEM_VDM_BOP_INFO;
796
797 // Class 21
798 typedef struct _SYSTEM_CACHE_INFORMATION
799 {
800 ULONG CurrentSize;
801 ULONG PeakSize;
802 ULONG PageFaultCount;
803 ULONG MinimumWorkingSet;
804 ULONG MaximumWorkingSet;
805 ULONG CurrentSizeIncludingTransitionInPages;
806 ULONG PeakSizeIncludingTransitionInPages;
807 ULONG Unused[2];
808 } SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
809
810 // Class 22
811 typedef struct _SYSTEM_POOLTAG
812 {
813 union
814 {
815 UCHAR Tag[4];
816 ULONG TagUlong;
817 };
818 ULONG PagedAllocs;
819 ULONG PagedFrees;
820 ULONG PagedUsed;
821 ULONG NonPagedAllocs;
822 ULONG NonPagedFrees;
823 ULONG NonPagedUsed;
824 } SYSTEM_POOLTAG, *PSYSTEM_POOLTAG;
825 typedef struct _SYSTEM_POOLTAG_INFORMATION
826 {
827 ULONG Count;
828 SYSTEM_POOLTAG TagInfo[1];
829 } SYSTEM_POOLTAG_INFORMATION, *PSYSTEM_POOLTAG_INFORMATION;
830
831 // Class 23
832 typedef struct _SYSTEM_INTERRUPT_INFORMATION
833 {
834 ULONG ContextSwitches;
835 ULONG DpcCount;
836 ULONG DpcRate;
837 ULONG TimeIncrement;
838 ULONG DpcBypassCount;
839 ULONG ApcBypassCount;
840 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
841
842 // Class 24
843 typedef struct _SYSTEM_DPC_BEHAVIOR_INFORMATION
844 {
845 ULONG Spare;
846 ULONG DpcQueueDepth;
847 ULONG MinimumDpcRate;
848 ULONG AdjustDpcThreshold;
849 ULONG IdealDpcRate;
850 } SYSTEM_DPC_BEHAVIOR_INFORMATION, *PSYSTEM_DPC_BEHAVIOR_INFORMATION;
851
852 // Class 25
853 typedef struct _SYSTEM_MEMORY_INFO
854 {
855 PUCHAR StringOffset;
856 USHORT ValidCount;
857 USHORT TransitionCount;
858 USHORT ModifiedCount;
859 USHORT PageTableCount;
860 } SYSTEM_MEMORY_INFO, *PSYSTEM_MEMORY_INFO;
861 typedef struct _SYSTEM_MEMORY_INFORMATION
862 {
863 ULONG InfoSize;
864 ULONG StringStart;
865 SYSTEM_MEMORY_INFO Memory[1];
866 } SYSTEM_MEMORY_INFORMATION, *PSYSTEM_MEMORY_INFORMATION;
867
868 // Class 26
869 typedef struct _SYSTEM_GDI_DRIVER_INFORMATION
870 {
871 UNICODE_STRING DriverName;
872 PVOID ImageAddress;
873 PVOID SectionPointer;
874 PVOID EntryPoint;
875 PIMAGE_EXPORT_DIRECTORY ExportSectionPointer;
876 } SYSTEM_GDI_DRIVER_INFORMATION, *PSYSTEM_GDI_DRIVER_INFORMATION;
877
878 // Class 27
879 // Not an actually class, simply a PVOID to the ImageAddress
880
881 // Class 28
882 typedef struct _SYSTEM_QUERY_TIME_ADJUST_INFORMATION
883 {
884 ULONG TimeAdjustment;
885 ULONG TimeIncrement;
886 BOOLEAN Enable;
887 } SYSTEM_QUERY_TIME_ADJUST_INFORMATION, *PSYSTEM_QUERY_TIME_ADJUST_INFORMATION;
888
889 typedef struct _SYSTEM_SET_TIME_ADJUST_INFORMATION
890 {
891 ULONG TimeAdjustment;
892 BOOLEAN Enable;
893 } SYSTEM_SET_TIME_ADJUST_INFORMATION, *PSYSTEM_SET_TIME_ADJUST_INFORMATION;
894
895 // Class 29 - Same as 25
896
897 // FIXME: Class 30 - 31
898
899 // Class 32
900 typedef struct _SYSTEM_CRASH_DUMP_INFORMATION
901 {
902 HANDLE CrashDumpSection;
903 } SYSTEM_CRASH_DUMP_INFORMATION, *PSYSTEM_CRASH_DUMP_INFORMATION;
904
905 // Class 33
906 typedef struct _SYSTEM_EXCEPTION_INFORMATION
907 {
908 ULONG AlignmentFixupCount;
909 ULONG ExceptionDispatchCount;
910 ULONG FloatingEmulationCount;
911 ULONG ByteWordEmulationCount;
912 } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
913
914 // Class 34
915 typedef struct _SYSTEM_CRASH_STATE_INFORMATION
916 {
917 ULONG ValidCrashDump;
918 } SYSTEM_CRASH_STATE_INFORMATION, *PSYSTEM_CRASH_STATE_INFORMATION;
919
920 // Class 35
921 typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION
922 {
923 BOOLEAN KernelDebuggerEnabled;
924 BOOLEAN KernelDebuggerNotPresent;
925 } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
926
927 // Class 36
928 typedef struct _SYSTEM_CONTEXT_SWITCH_INFORMATION
929 {
930 ULONG ContextSwitches;
931 ULONG FindAny;
932 ULONG FindLast;
933 ULONG FindIdeal;
934 ULONG IdleAny;
935 ULONG IdleCurrent;
936 ULONG IdleLast;
937 ULONG IdleIdeal;
938 ULONG PreemptAny;
939 ULONG PreemptCurrent;
940 ULONG PreemptLast;
941 ULONG SwitchToIdle;
942 } SYSTEM_CONTEXT_SWITCH_INFORMATION, *PSYSTEM_CONTEXT_SWITCH_INFORMATION;
943
944 // Class 37
945 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION
946 {
947 ULONG RegistryQuotaAllowed;
948 ULONG RegistryQuotaUsed;
949 ULONG PagedPoolSize;
950 } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
951
952 // Class 38
953 // Not a structure, simply send the UNICODE_STRING
954
955 // Class 39
956 // Not a structure, simply send a ULONG containing the new separation
957
958 // Class 40
959 typedef struct _SYSTEM_PLUGPLAY_BUS_INFORMATION
960 {
961 ULONG BusCount;
962 PLUGPLAY_BUS_INSTANCE BusInstance[1];
963 } SYSTEM_PLUGPLAY_BUS_INFORMATION, *PSYSTEM_PLUGPLAY_BUS_INFORMATION;
964
965 // Class 41
966 typedef struct _SYSTEM_DOCK_INFORMATION
967 {
968 SYSTEM_DOCK_STATE DockState;
969 INTERFACE_TYPE DeviceBusType;
970 ULONG DeviceBusNumber;
971 ULONG SlotNumber;
972 } SYSTEM_DOCK_INFORMATION, *PSYSTEM_DOCK_INFORMATION;
973
974 // Class 42
975 // FIXME: Conflict with WINNT.H
976 typedef struct __SYSTEM_POWER_INFORMATION
977 {
978 BOOLEAN SystemSuspendSupported;
979 BOOLEAN SystemHibernateSupported;
980 BOOLEAN ResumeTimerSupportsSuspend;
981 BOOLEAN ResumeTimerSupportsHibernate;
982 BOOLEAN LidSupported;
983 BOOLEAN TurboSettingSupported;
984 BOOLEAN TurboMode;
985 BOOLEAN SystemAcOrDc;
986 BOOLEAN PowerDownDisabled;
987 LARGE_INTEGER SpindownDrives;
988 } _SYSTEM_POWER_INFORMATION, *P_SYSTEM_POWER_INFORMATION;
989
990 // Class 43
991 typedef struct _SYSTEM_LEGACY_DRIVER_INFORMATION
992 {
993 PNP_VETO_TYPE VetoType;
994 UNICODE_STRING VetoDriver;
995 // CHAR Buffer[0];
996 } SYSTEM_LEGACY_DRIVER_INFORMATION, *PSYSTEM_LEGACY_DRIVER_INFORMATION;
997
998 // Class 44
999 typedef struct _TIME_ZONE_INFORMATION RTL_TIME_ZONE_INFORMATION;
1000
1001 // Class 45
1002 typedef struct _SYSTEM_LOOKASIDE_INFORMATION
1003 {
1004 USHORT CurrentDepth;
1005 USHORT MaximumDepth;
1006 ULONG TotalAllocates;
1007 ULONG AllocateMisses;
1008 ULONG TotalFrees;
1009 ULONG FreeMisses;
1010 ULONG Type;
1011 ULONG Tag;
1012 ULONG Size;
1013 } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
1014
1015 // Class 46
1016 // Not a structure. Only a HANDLE for the SlipEvent;
1017
1018 // Class 47
1019 // Not a structure. Only a ULONG for the SessionId;
1020
1021 // Class 48
1022 // Not a structure. Only a ULONG for the SessionId;
1023
1024 // FIXME: Class 49
1025
1026 // Class 50
1027 // Not a structure. Only a ULONG_PTR for the SystemRangeStart
1028
1029 // FIXME: Class 51 (Based on MM_DRIVER_VERIFIER_DATA)
1030
1031 // FIXME: Class 52
1032
1033 // Class 53
1034 typedef struct _SYSTEM_SESSION_PROCESSES_INFORMATION
1035 {
1036 ULONG SessionId;
1037 ULONG BufferSize;
1038 PVOID Buffer; // Same format as in SystemProcessInformation
1039 } SYSTEM_SESSION_PROCESSES_INFORMATION, *PSYSTEM_SESSION_PROCESSES_INFORMATION;
1040
1041 #endif