4a6e39bf3447ff79b19d69285e8b5310cba58122
[reactos.git] / reactos / include / ndk / zwtypes.h
1 /*
2 * PROJECT: ReactOS Native Headers
3 * FILE: include/ndk/zwtypes.h
4 * PURPOSE: Defintions for Native Types not defined in DDK/IFS
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
6 * UPDATE HISTORY:
7 * Created 06/10/04
8 */
9 #ifndef _ZWTYPES_H
10 #define _ZWTYPES_H
11
12 /* DEPENDENCIES **************************************************************/
13 #include "rtltypes.h"
14 #include <ddk/cfg.h>
15
16 /* EXPORTED DATA *************************************************************/
17
18 /* CONSTANTS *****************************************************************/
19 #define MAX_BUS_NAME 24
20
21 #define EVENT_READ_ACCESS 1
22 #define EVENT_WRITE_ACCESS 2
23
24 #define PORT_ALL_ACCESS (0x1)
25
26 #define EVENT_PAIR_ALL_ACCESS (0x1F0000L)
27
28 #define OBJECT_TYPE_CREATE 0x0001
29 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
30
31 /* For ProcessDeviceMap */
32 #define DOSDEVICE_DRIVE_UNKNOWN 0
33 #define DOSDEVICE_DRIVE_CALCULATE 1
34 #define DOSDEVICE_DRIVE_REMOVABLE 2
35 #define DOSDEVICE_DRIVE_FIXED 3
36 #define DOSDEVICE_DRIVE_REMOTE 4
37 #define DOSDEVICE_DRIVE_CDROM 5
38 #define DOSDEVICE_DRIVE_RAMDISK 6
39
40 /* ENUMERATIONS **************************************************************/
41
42 typedef enum _HARDERROR_RESPONSE_OPTION
43 {
44 OptionAbortRetryIgnore,
45 OptionOk,
46 OptionOkCancel,
47 OptionRetryCancel,
48 OptionYesNo,
49 OptionYesNoCancel,
50 OptionShutdownSystem
51 } HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;
52
53 typedef enum _HARDERROR_RESPONSE
54 {
55 ResponseReturnToCaller,
56 ResponseNotHandled,
57 ResponseAbort,
58 ResponseCancel,
59 ResponseIgnore,
60 ResponseNo,
61 ResponseOk,
62 ResponseRetry,
63 ResponseYes
64 } HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
65
66 typedef enum SHUTDOWN_ACTION_TAG
67 {
68 ShutdownNoReboot,
69 ShutdownReboot,
70 ShutdownPowerOff
71 } SHUTDOWN_ACTION;
72
73 typedef enum _PLUGPLAY_BUS_CLASS
74 {
75 SystemBus,
76 PlugPlayVirtualBus,
77 MaxPlugPlayBusClass
78 } PLUGPLAY_BUS_CLASS, *PPLUGPLAY_BUS_CLASS;
79
80 typedef enum _PLUGPLAY_VIRTUAL_BUS_TYPE
81 {
82 Root,
83 MaxPlugPlayVirtualBusType
84 } PLUGPLAY_VIRTUAL_BUS_TYPE, *PPLUGPLAY_VIRTUAL_BUS_TYPE;
85
86 typedef enum _SYSTEM_DOCK_STATE
87 {
88 SystemDockStateUnknown,
89 SystemUndocked,
90 SystemDocked
91 } SYSTEM_DOCK_STATE, *PSYSTEM_DOCK_STATE;
92
93 /**** Information Classes ****/
94
95 /*
96 * Process (extra ones not defined in DDK)
97 */
98 /* FIXME: Temporary hack until all KMODE stuf are NDK */
99 #ifndef __WINDDK_H
100 typedef enum _PROCESS_INFORMATION_FLAGS
101 {
102 ProcessUnknown33 = 33,
103 ProcessUnknown34,
104 ProcessUnknown35,
105 ProcessCookie
106 } PROCESS_INFORMATION_FLAGS;
107 #endif
108
109 /*
110 * System
111 */
112 typedef enum _SYSTEM_INFORMATION_CLASS
113 {
114 SystemBasicInformation,
115 SystemProcessorInformation,
116 SystemPerformanceInformation,
117 SystemTimeOfDayInformation,
118 SystemPathInformation, /* OBSOLETE: USE KUSER_SHARED_DATA */
119 SystemProcessInformation,
120 SystemCallCountInformation,
121 SystemDeviceInformation,
122 SystemProcessorPerformanceInformation,
123 SystemFlagsInformation,
124 SystemCallTimeInformation,
125 SystemModuleInformation,
126 SystemLocksInformation,
127 SystemStackTraceInformation,
128 SystemPagedPoolInformation,
129 SystemNonPagedPoolInformation,
130 SystemHandleInformation,
131 SystemObjectInformation,
132 SystemPageFileInformation,
133 SystemVdmInstemulInformation,
134 SystemVdmBopInformation,
135 SystemFileCacheInformation,
136 SystemPoolTagInformation,
137 SystemInterruptInformation,
138 SystemDpcBehaviorInformation,
139 SystemFullMemoryInformation,
140 SystemLoadGdiDriverInformation,
141 SystemUnloadGdiDriverInformation,
142 SystemTimeAdjustmentInformation,
143 SystemSummaryMemoryInformation,
144 SystemNextEventIdInformation,
145 SystemEventIdsInformation,
146 SystemCrashDumpInformation,
147 SystemExceptionInformation,
148 SystemCrashDumpStateInformation,
149 SystemKernelDebuggerInformation,
150 SystemContextSwitchInformation,
151 SystemRegistryQuotaInformation,
152 SystemExtendServiceTableInformation,
153 SystemPrioritySeperation,
154 SystemPlugPlayBusInformation,
155 SystemDockInformation,
156 _SystemPowerInformation, /* FIXME */
157 SystemProcessorSpeedInformation,
158 SystemCurrentTimeZoneInformation,
159 SystemLookasideInformation,
160 SystemTimeSlipNotification,
161 SystemSessionCreate,
162 SystemSessionDetach,
163 SystemSessionInformation,
164 SystemRangeStartInformation,
165 SystemVerifierInformation,
166 SystemAddVerifier,
167 SystemSessionProcessesInformation,
168 SystemInformationClassMax
169 } SYSTEM_INFORMATION_CLASS;
170
171 /*
172 * Object
173 */
174 typedef enum _OBJECT_INFORMATION_CLASS
175 {
176 ObjectBasicInformation,
177 ObjectNameInformation,
178 ObjectTypeInformation,
179 ObjectAllTypesInformation,
180 ObjectHandleInformation
181 } OBJECT_INFORMATION_CLASS;
182
183 /*
184 * Memory
185 */
186 typedef enum _MEMORY_INFORMATION_CLASS
187 {
188 MemoryBasicInformation,
189 MemoryWorkingSetList,
190 MemorySectionName,
191 MemoryBasicVlmInformation
192 } MEMORY_INFORMATION_CLASS;
193
194 /*
195 * Mutant
196 */
197 typedef enum _MUTANT_INFORMATION_CLASS
198 {
199 MutantBasicInformation
200 } MUTANT_INFORMATION_CLASS;
201
202 /*
203 * Atom
204 */
205 typedef enum _ATOM_INFORMATION_CLASS
206 {
207 AtomBasicInformation,
208 AtomTableInformation,
209 } ATOM_INFORMATION_CLASS;
210
211 /*
212 * Section
213 */
214 typedef enum _SECTION_INFORMATION_CLASS
215 {
216 SectionBasicInformation,
217 SectionImageInformation,
218 } SECTION_INFORMATION_CLASS;
219
220 /*
221 * Timer
222 */
223 typedef enum _TIMER_INFORMATION_CLASS {
224 TimerBasicInformation
225 } TIMER_INFORMATION_CLASS;
226
227 /*
228 * Semaphore
229 */
230 typedef enum _SEMAPHORE_INFORMATION_CLASS
231 {
232 SemaphoreBasicInformation
233 } SEMAPHORE_INFORMATION_CLASS;
234
235 /*
236 * Event
237 */
238 typedef enum _EVENT_INFORMATION_CLASS
239 {
240 EventBasicInformation
241 } EVENT_INFORMATION_CLASS;
242
243 /*
244 * I/O Completion
245 */
246 typedef enum _IO_COMPLETION_INFORMATION_CLASS
247 {
248 IoCompletionBasicInformation
249 } IO_COMPLETION_INFORMATION_CLASS;
250
251 /* TYPES *********************************************************************/
252
253 typedef unsigned short LANGID;
254 typedef LANGID *PLANGID;
255 struct _PLUGPLAY_EVENT_BLOCK; /* FIXME: Ask Filip if it's OK to define it */
256
257 /**** Information Structures ****/
258 /*
259 * Mutant
260 */
261
262 /* Class 0 */
263 typedef struct _MUTANT_BASIC_INFORMATION
264 {
265 LONG CurrentCount;
266 BOOLEAN OwnedByCaller;
267 BOOLEAN AbandonedState;
268 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
269
270 /*
271 * Thread
272 */
273
274 /* Class 0 */
275 typedef struct _THREAD_BASIC_INFORMATION
276 {
277 NTSTATUS ExitStatus;
278 PVOID TebBaseAddress;
279 CLIENT_ID ClientId;
280 KAFFINITY AffinityMask;
281 KPRIORITY Priority;
282 KPRIORITY BasePriority;
283 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
284
285 /*
286 * Atom
287 */
288
289 /* Class 0 */
290 typedef struct _ATOM_BASIC_INFORMATION {
291 USHORT UsageCount;
292 USHORT Flags;
293 USHORT NameLength;
294 WCHAR Name[1];
295 } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
296
297 /* Class 1 */
298 typedef struct _ATOM_TABLE_INFORMATION
299 {
300 ULONG NumberOfAtoms;
301 USHORT Atoms[1];
302 } ATOM_TABLE_INFORMATION, *PATOM_TABLE_INFORMATION;
303
304 /*
305 * Object Directory
306 */
307 typedef struct _OBJECT_DIRECTORY_INFORMATION
308 {
309 UNICODE_STRING ObjectName;
310 UNICODE_STRING ObjectTypeName;
311 } OBJECT_DIRECTORY_INFORMATION, *POBJECT_DIRECTORY_INFORMATION;
312
313 /*
314 * Memory
315 */
316
317 /* Class 1 */
318 typedef struct _MEMORY_WORKING_SET_LIST
319 {
320 ULONG NumberOfPages;
321 ULONG WorkingSetList[1];
322 } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
323
324 /* Class 2 */
325 typedef struct {
326 UNICODE_STRING SectionFileName;
327 WCHAR NameBuffer[ANYSIZE_ARRAY];
328 } MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
329
330 /*
331 * Section
332 */
333
334 /* Class 0 */
335 typedef struct _SECTION_BASIC_INFORMATION
336 {
337 PVOID BaseAddress;
338 ULONG Attributes;
339 LARGE_INTEGER Size;
340 } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
341
342 /* Class 1 */
343 typedef struct _SECTION_IMAGE_INFORMATION
344 {
345 ULONG EntryPoint;
346 ULONG Unknown1;
347 ULONG_PTR StackReserve;
348 ULONG_PTR StackCommit;
349 ULONG Subsystem;
350 USHORT MinorSubsystemVersion;
351 USHORT MajorSubsystemVersion;
352 ULONG Unknown2;
353 ULONG Characteristics;
354 USHORT ImageNumber;
355 BOOLEAN Executable;
356 UCHAR Unknown3;
357 ULONG Unknown4[3];
358 } SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;
359
360 /*
361 * Object
362 */
363
364 /* Class 4 */
365 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFORMATION
366 {
367 BOOLEAN Inherit;
368 BOOLEAN ProtectFromClose;
369 } OBJECT_HANDLE_ATTRIBUTE_INFORMATION, *POBJECT_HANDLE_ATTRIBUTE_INFORMATION;
370
371 /*
372 * Timer
373 */
374
375 /* Class 0 */
376 typedef struct _TIMER_BASIC_INFORMATION
377 {
378 LARGE_INTEGER TimeRemaining;
379 BOOLEAN SignalState;
380 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
381
382 /*
383 * Semaphore
384 */
385
386 /* Class 0 */
387 typedef struct _SEMAPHORE_BASIC_INFORMATION {
388 LONG CurrentCount;
389 LONG MaximumCount;
390 } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
391
392 /*
393 * Event
394 */
395 /* Class 0 */
396 typedef struct _EVENT_BASIC_INFORMATION
397 {
398 EVENT_TYPE EventType;
399 LONG EventState;
400 } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
401
402 /*
403 * Process
404 */
405
406 /* Class 0 */
407 typedef struct _PROCESS_BASIC_INFORMATION
408 {
409 NTSTATUS ExitStatus;
410 PPEB PebBaseAddress;
411 KAFFINITY AffinityMask;
412 KPRIORITY BasePriority;
413 ULONG UniqueProcessId;
414 ULONG InheritedFromUniqueProcessId;
415 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
416
417
418 /* Class 4 */
419 typedef struct _KERNEL_USER_TIMES
420 {
421 LARGE_INTEGER CreateTime;
422 LARGE_INTEGER ExitTime;
423 LARGE_INTEGER KernelTime;
424 LARGE_INTEGER UserTime;
425 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
426
427 /* Class 9 */
428 typedef struct _PROCESS_ACCESS_TOKEN
429 {
430 HANDLE Token;
431 HANDLE Thread;
432 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
433
434 /* Class 16 */
435 typedef struct _PROCESS_PRIORITY_CLASS
436 {
437 BOOLEAN Foreground;
438 UCHAR PriorityClass;
439 } PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;
440
441 /* Class 23 */
442 typedef struct _PROCESS_DEVICEMAP_INFORMATION
443 {
444 union
445 {
446 struct
447 {
448 HANDLE DirectoryHandle;
449 } Set;
450 struct
451 {
452 ULONG DriveMap;
453 UCHAR DriveType[32];
454 } Query;
455 };
456 } PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
457
458 /* Class 24 */
459 typedef struct _PROCESS_SESSION_INFORMATION
460 {
461 ULONG SessionId;
462 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
463
464 /*
465 * System
466 */
467
468 /* Class 0 */
469 typedef struct _SYSTEM_BASIC_INFORMATION
470 {
471 ULONG Reserved;
472 ULONG TimerResolution;
473 ULONG PageSize;
474 ULONG NumberOfPhysicalPages;
475 ULONG LowestPhysicalPageNumber;
476 ULONG HighestPhysicalPageNumber;
477 ULONG AllocationGranularity;
478 ULONG MinimumUserModeAddress;
479 ULONG MaximumUserModeAddress;
480 KAFFINITY ActiveProcessorsAffinityMask;
481 CCHAR NumberOfProcessors;
482 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
483
484 /* Class 1 */
485 typedef struct _SYSTEM_PROCESSOR_INFORMATION
486 {
487 USHORT ProcessorArchitecture;
488 USHORT ProcessorLevel;
489 USHORT ProcessorRevision;
490 USHORT Reserved;
491 ULONG ProcessorFeatureBits;
492 } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
493
494 /* Class 2 */
495 typedef struct _SYSTEM_PERFORMANCE_INFORMATION
496 {
497 LARGE_INTEGER IdleProcessTime;
498 LARGE_INTEGER IoReadTransferCount;
499 LARGE_INTEGER IoWriteTransferCount;
500 LARGE_INTEGER IoOtherTransferCount;
501 ULONG IoReadOperationCount;
502 ULONG IoWriteOperationCount;
503 ULONG IoOtherOperationCount;
504 ULONG AvailablePages;
505 ULONG CommittedPages;
506 ULONG CommitLimit;
507 ULONG PeakCommitment;
508 ULONG PageFaultCount;
509 ULONG CopyOnWriteCount;
510 ULONG TransitionCount;
511 ULONG CacheTransitionCount;
512 ULONG DemandZeroCount;
513 ULONG PageReadCount;
514 ULONG PageReadIoCount;
515 ULONG CacheReadCount;
516 ULONG CacheIoCount;
517 ULONG DirtyPagesWriteCount;
518 ULONG DirtyWriteIoCount;
519 ULONG MappedPagesWriteCount;
520 ULONG MappedWriteIoCount;
521 ULONG PagedPoolPages;
522 ULONG NonPagedPoolPages;
523 ULONG PagedPoolAllocs;
524 ULONG PagedPoolFrees;
525 ULONG NonPagedPoolAllocs;
526 ULONG NonPagedPoolFrees;
527 ULONG FreeSystemPtes;
528 ULONG ResidentSystemCodePage;
529 ULONG TotalSystemDriverPages;
530 ULONG TotalSystemCodePages;
531 ULONG NonPagedPoolLookasideHits;
532 ULONG PagedPoolLookasideHits;
533 ULONG Spare3Count;
534 ULONG ResidentSystemCachePage;
535 ULONG ResidentPagedPoolPage;
536 ULONG ResidentSystemDriverPage;
537 ULONG CcFastReadNoWait;
538 ULONG CcFastReadWait;
539 ULONG CcFastReadResourceMiss;
540 ULONG CcFastReadNotPossible;
541 ULONG CcFastMdlReadNoWait;
542 ULONG CcFastMdlReadWait;
543 ULONG CcFastMdlReadResourceMiss;
544 ULONG CcFastMdlReadNotPossible;
545 ULONG CcMapDataNoWait;
546 ULONG CcMapDataWait;
547 ULONG CcMapDataNoWaitMiss;
548 ULONG CcMapDataWaitMiss;
549 ULONG CcPinMappedDataCount;
550 ULONG CcPinReadNoWait;
551 ULONG CcPinReadWait;
552 ULONG CcPinReadNoWaitMiss;
553 ULONG CcPinReadWaitMiss;
554 ULONG CcCopyReadNoWait;
555 ULONG CcCopyReadWait;
556 ULONG CcCopyReadNoWaitMiss;
557 ULONG CcCopyReadWaitMiss;
558 ULONG CcMdlReadNoWait;
559 ULONG CcMdlReadWait;
560 ULONG CcMdlReadNoWaitMiss;
561 ULONG CcMdlReadWaitMiss;
562 ULONG CcReadAheadIos;
563 ULONG CcLazyWriteIos;
564 ULONG CcLazyWritePages;
565 ULONG CcDataFlushes;
566 ULONG CcDataPages;
567 ULONG ContextSwitches;
568 ULONG FirstLevelTbFills;
569 ULONG SecondLevelTbFills;
570 ULONG SystemCalls;
571 } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
572
573 /* Class 3 */
574 typedef struct _SYSTEM_TIMEOFDAY_INFORMATION
575 {
576 LARGE_INTEGER BootTime;
577 LARGE_INTEGER CurrentTime;
578 LARGE_INTEGER TimeZoneBias;
579 ULONG TimeZoneId;
580 ULONG Reserved;
581 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION;
582
583 /* Class 4 */
584 /* This class is obsoleted, please use KUSER_SHARED_DATA instead */
585
586 /* Class 5 */
587 typedef struct _SYSTEM_THREAD_INFORMATION
588 {
589 LARGE_INTEGER KernelTime;
590 LARGE_INTEGER UserTime;
591 LARGE_INTEGER CreateTime;
592 ULONG WaitTime;
593 PVOID StartAddress;
594 CLIENT_ID ClientId;
595 KPRIORITY Priority;
596 LONG BasePriority;
597 ULONG ContextSwitches;
598 ULONG ThreadState;
599 ULONG WaitReason;
600 } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
601 typedef struct _SYSTEM_PROCESS_INFORMATION
602 {
603 ULONG NextEntryOffset;
604 ULONG NumberOfThreads;
605 LARGE_INTEGER SpareLi1;
606 LARGE_INTEGER SpareLi2;
607 LARGE_INTEGER SpareLi3;
608 LARGE_INTEGER CreateTime;
609 LARGE_INTEGER UserTime;
610 LARGE_INTEGER KernelTime;
611 UNICODE_STRING ImageName;
612 KPRIORITY BasePriority;
613 HANDLE UniqueProcessId;
614 HANDLE InheritedFromUniqueProcessId;
615 ULONG HandleCount;
616 ULONG SessionId;
617 ULONG PageDirectoryFrame;
618
619 /*
620 * This part corresponds to VM_COUNTERS_EX.
621 * NOTE: *NOT* THE SAME AS VM_COUNTERS!
622 */
623 ULONG PeakVirtualSize;
624 ULONG VirtualSize;
625 ULONG PageFaultCount;
626 ULONG PeakWorkingSetSize;
627 ULONG WorkingSetSize;
628 ULONG QuotaPeakPagedPoolUsage;
629 ULONG QuotaPagedPoolUsage;
630 ULONG QuotaPeakNonPagedPoolUsage;
631 ULONG QuotaNonPagedPoolUsage;
632 ULONG PagefileUsage;
633 ULONG PeakPagefileUsage;
634 ULONG PrivateUsage;
635
636 /* This part corresponds to IO_COUNTERS */
637 LARGE_INTEGER ReadOperationCount;
638 LARGE_INTEGER WriteOperationCount;
639 LARGE_INTEGER OtherOperationCount;
640 LARGE_INTEGER ReadTransferCount;
641 LARGE_INTEGER WriteTransferCount;
642 LARGE_INTEGER OtherTransferCount;
643
644 /* Finally, the array of Threads */
645 SYSTEM_THREAD_INFORMATION TH[1];
646 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
647
648 /* Class 6 */
649 typedef struct _SYSTEM_CALL_COUNT_INFORMATION
650 {
651 ULONG Length;
652 ULONG NumberOfTables;
653 } SYSTEM_CALL_COUNT_INFORMATION, *PSYSTEM_CALL_COUNT_INFORMATION;
654
655 /* Class 7 */
656 typedef struct _SYSTEM_DEVICE_INFORMATION
657 {
658 ULONG NumberOfDisks;
659 ULONG NumberOfFloppies;
660 ULONG NumberOfCdRoms;
661 ULONG NumberOfTapes;
662 ULONG NumberOfSerialPorts;
663 ULONG NumberOfParallelPorts;
664 } SYSTEM_DEVICE_INFORMATION, *PSYSTEM_DEVICE_INFORMATION;
665
666 /* Class 8 */
667 typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
668 {
669 LARGE_INTEGER IdleTime;
670 LARGE_INTEGER KernelTime;
671 LARGE_INTEGER UserTime;
672 LARGE_INTEGER DpcTime;
673 LARGE_INTEGER InterruptTime;
674 ULONG InterruptCount;
675 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
676
677 /* Class 9 */
678 typedef struct _SYSTEM_FLAGS_INFORMATION
679 {
680 ULONG Flags;
681 } SYSTEM_FLAGS_INFORMATION, *PSYSTEM_FLAGS_INFORMATION;
682
683 /* Class 10 */
684 typedef struct _SYSTEM_CALL_TIME_INFORMATION
685 {
686 ULONG Length;
687 ULONG TotalCalls;
688 LARGE_INTEGER TimeOfCalls[1];
689 } SYSTEM_CALL_TIME_INFORMATION, *PSYSTEM_CALL_TIME_INFORMATION;
690
691 /* Class 11 */
692 typedef struct _SYSTEM_MODULE_INFORMATION_ENTRY
693 {
694 ULONG Unknown1;
695 ULONG Unknown2;
696 PVOID Base;
697 ULONG Size;
698 ULONG Flags;
699 USHORT Index;
700 USHORT NameLength;
701 USHORT LoadCount;
702 USHORT PathLength;
703 CHAR ImageName[256];
704 } SYSTEM_MODULE_INFORMATION_ENTRY, *PSYSTEM_MODULE_INFORMATION_ENTRY;
705 typedef struct _SYSTEM_MODULE_INFORMATION
706 {
707 ULONG Count;
708 SYSTEM_MODULE_INFORMATION_ENTRY Module[1];
709 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
710
711 /* Class 12 */
712 typedef struct _SYSTEM_RESOURCE_LOCK_ENTRY
713 {
714 ULONG ResourceAddress;
715 ULONG Always1;
716 ULONG Unknown;
717 ULONG ActiveCount;
718 ULONG ContentionCount;
719 ULONG Unused[2];
720 ULONG NumberOfSharedWaiters;
721 ULONG NumberOfExclusiveWaiters;
722 } SYSTEM_RESOURCE_LOCK_ENTRY, *PSYSTEM_RESOURCE_LOCK_ENTRY;
723 typedef struct _SYSTEM_RESOURCE_LOCK_INFO
724 {
725 ULONG Count;
726 SYSTEM_RESOURCE_LOCK_ENTRY Lock[1];
727 } SYSTEM_RESOURCE_LOCK_INFO, *PSYSTEM_RESOURCE_LOCK_INFO;
728
729 /* Class 13 */
730 typedef struct _SYSTEM_BACKTRACE_INFORMATION_ENTRY
731 {
732 /* FIXME */
733 } SYSTEM_BACKTRACE_INFORMATION_ENTRY, *PSYSTEM_BACKTRACE_INFORMATION_ENTRY;
734 typedef struct _SYSTEM_BACKTRACE_INFORMATION
735 {
736 /* FIXME */
737 ULONG Unknown[4];
738 ULONG Count;
739 SYSTEM_BACKTRACE_INFORMATION_ENTRY Trace[1];
740 } SYSTEM_BACKTRACE_INFORMATION, *PSYSTEM_BACKTRACE_INFORMATION;
741
742 /* Class 14 - 15 */
743 typedef struct _SYSTEM_POOL_ENTRY
744 {
745 BOOLEAN Allocated;
746 BOOLEAN Spare0;
747 USHORT AllocatorBackTraceIndex;
748 ULONG Size;
749 union {
750 UCHAR Tag[4];
751 ULONG TagUlong;
752 PVOID ProcessChargedQuota;
753 };
754 } SYSTEM_POOL_ENTRY, *PSYSTEM_POOL_ENTRY;
755 typedef struct _SYSTEM_POOL_INFORMATION
756 {
757 ULONG TotalSize;
758 PVOID FirstEntry;
759 USHORT EntryOverhead;
760 BOOLEAN PoolTagPresent;
761 BOOLEAN Spare0;
762 ULONG NumberOfEntries;
763 SYSTEM_POOL_ENTRY Entries[1];
764 } SYSTEM_POOL_INFORMATION, *PSYSTEM_POOL_INFORMATION;
765
766 /* Class 16 */
767 typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO
768 {
769 USHORT UniqueProcessId;
770 USHORT CreatorBackTraceIndex;
771 UCHAR ObjectTypeIndex;
772 UCHAR HandleAttributes;
773 USHORT HandleValue;
774 PVOID Object;
775 ULONG GrantedAccess;
776 } SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO;
777 typedef struct _SYSTEM_HANDLE_INFORMATION
778 {
779 ULONG NumberOfHandles;
780 SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[1];
781 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
782
783 /* Class 17 */
784 typedef struct _SYSTEM_OBJECTTYPE_INFORMATION
785 {
786 ULONG NextEntryOffset;
787 ULONG NumberOfObjects;
788 ULONG NumberOfHandles;
789 ULONG TypeIndex;
790 ULONG InvalidAttributes;
791 GENERIC_MAPPING GenericMapping;
792 ULONG ValidAccessMask;
793 ULONG PoolType;
794 BOOLEAN SecurityRequired;
795 BOOLEAN WaitableObject;
796 UNICODE_STRING TypeName;
797 } SYSTEM_OBJECTTYPE_INFORMATION, *PSYSTEM_OBJECTTYPE_INFORMATION;
798 typedef struct _SYSTEM_OBJECT_INFORMATION
799 {
800 ULONG NextEntryOffset;
801 PVOID Object;
802 HANDLE CreatorUniqueProcess;
803 USHORT CreatorBackTraceIndex;
804 USHORT Flags;
805 LONG PointerCount;
806 LONG HandleCount;
807 ULONG PagedPoolCharge;
808 ULONG NonPagedPoolCharge;
809 HANDLE ExclusiveProcessId;
810 PVOID SecurityDescriptor;
811 OBJECT_NAME_INFORMATION NameInfo;
812 } SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION;
813
814 /* Class 18 */
815 typedef struct _SYSTEM_PAGEFILE_INFORMATION
816 {
817 ULONG NextEntryOffset;
818 ULONG TotalSize;
819 ULONG TotalInUse;
820 ULONG PeakUsage;
821 UNICODE_STRING PageFileName;
822 } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
823
824 /* Class 19 */
825 typedef struct _SYSTEM_VDM_INSTEMUL_INFO
826 {
827 ULONG SegmentNotPresent;
828 ULONG VdmOpcode0F;
829 ULONG OpcodeESPrefix;
830 ULONG OpcodeCSPrefix;
831 ULONG OpcodeSSPrefix;
832 ULONG OpcodeDSPrefix;
833 ULONG OpcodeFSPrefix;
834 ULONG OpcodeGSPrefix;
835 ULONG OpcodeOPER32Prefix;
836 ULONG OpcodeADDR32Prefix;
837 ULONG OpcodeINSB;
838 ULONG OpcodeINSW;
839 ULONG OpcodeOUTSB;
840 ULONG OpcodeOUTSW;
841 ULONG OpcodePUSHF;
842 ULONG OpcodePOPF;
843 ULONG OpcodeINTnn;
844 ULONG OpcodeINTO;
845 ULONG OpcodeIRET;
846 ULONG OpcodeINBimm;
847 ULONG OpcodeINWimm;
848 ULONG OpcodeOUTBimm;
849 ULONG OpcodeOUTWimm ;
850 ULONG OpcodeINB;
851 ULONG OpcodeINW;
852 ULONG OpcodeOUTB;
853 ULONG OpcodeOUTW;
854 ULONG OpcodeLOCKPrefix;
855 ULONG OpcodeREPNEPrefix;
856 ULONG OpcodeREPPrefix;
857 ULONG OpcodeHLT;
858 ULONG OpcodeCLI;
859 ULONG OpcodeSTI;
860 ULONG BopCount;
861 } SYSTEM_VDM_INSTEMUL_INFO, *PSYSTEM_VDM_INSTEMUL_INFO;
862
863 /* Class 20 */
864 typedef struct _SYSTEM_VDM_BOP_INFO
865 {
866 /* FIXME */
867 PVOID Dummy;
868 } SYSTEM_VDM_BOP_INFO, *PSYSTEM_VDM_BOP_INFO;
869
870 /* Class 21 */
871 typedef struct _SYSTEM_CACHE_INFORMATION
872 {
873 ULONG CurrentSize;
874 ULONG PeakSize;
875 ULONG PageFaultCount;
876 ULONG MinimumWorkingSet;
877 ULONG MaximumWorkingSet;
878 ULONG CurrentSizeIncludingTransitionInPages;
879 ULONG PeakSizeIncludingTransitionInPages;
880 ULONG Unused[2];
881 } SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
882
883 /* Class 22 */
884 typedef struct _SYSTEM_POOLTAG
885 {
886 union
887 {
888 UCHAR Tag[4];
889 ULONG TagUlong;
890 };
891 ULONG PagedAllocs;
892 ULONG PagedFrees;
893 ULONG PagedUsed;
894 ULONG NonPagedAllocs;
895 ULONG NonPagedFrees;
896 ULONG NonPagedUsed;
897 } SYSTEM_POOLTAG, *PSYSTEM_POOLTAG;
898 typedef struct _SYSTEM_POOLTAG_INFORMATION
899 {
900 ULONG Count;
901 SYSTEM_POOLTAG TagInfo[1];
902 } SYSTEM_POOLTAG_INFORMATION, *PSYSTEM_POOLTAG_INFORMATION;
903
904 /* Class 23 */
905 typedef struct _SYSTEM_INTERRUPT_INFORMATION
906 {
907 ULONG ContextSwitches;
908 ULONG DpcCount;
909 ULONG DpcRate;
910 ULONG TimeIncrement;
911 ULONG DpcBypassCount;
912 ULONG ApcBypassCount;
913 } SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
914
915 /* Class 24 */
916 typedef struct _SYSTEM_DPC_BEHAVIOR_INFORMATION
917 {
918 ULONG Spare;
919 ULONG DpcQueueDepth;
920 ULONG MinimumDpcRate;
921 ULONG AdjustDpcThreshold;
922 ULONG IdealDpcRate;
923 } SYSTEM_DPC_BEHAVIOR_INFORMATION, *PSYSTEM_DPC_BEHAVIOR_INFORMATION;
924
925 /* Class 25 */
926 typedef struct _SYSTEM_MEMORY_INFO
927 {
928 PUCHAR StringOffset;
929 USHORT ValidCount;
930 USHORT TransitionCount;
931 USHORT ModifiedCount;
932 USHORT PageTableCount;
933 } SYSTEM_MEMORY_INFO, *PSYSTEM_MEMORY_INFO;
934 typedef struct _SYSTEM_MEMORY_INFORMATION
935 {
936 ULONG InfoSize;
937 ULONG StringStart;
938 SYSTEM_MEMORY_INFO Memory[1];
939 } SYSTEM_MEMORY_INFORMATION, *PSYSTEM_MEMORY_INFORMATION;
940
941 /* Class 26 */
942 typedef struct _SYSTEM_GDI_DRIVER_INFORMATION {
943 UNICODE_STRING DriverName;
944 PVOID ImageAddress;
945 PVOID SectionPointer;
946 PVOID EntryPoint;
947 PIMAGE_EXPORT_DIRECTORY ExportSectionPointer;
948 } SYSTEM_GDI_DRIVER_INFORMATION, *PSYSTEM_GDI_DRIVER_INFORMATION;
949
950 /* Class 27 */
951 /* Not an actuall class, simply a PVOID to the ImageAddress */
952
953 /* Class 28 */
954 typedef struct _SYSTEM_QUERY_TIME_ADJUST_INFORMATION
955 {
956 ULONG TimeAdjustment;
957 ULONG TimeIncrement;
958 BOOLEAN Enable;
959 } SYSTEM_QUERY_TIME_ADJUST_INFORMATION, *PSYSTEM_QUERY_TIME_ADJUST_INFORMATION;
960 typedef struct _SYSTEM_SET_TIME_ADJUST_INFORMATION
961 {
962 ULONG TimeAdjustment;
963 BOOLEAN Enable;
964 } SYSTEM_SET_TIME_ADJUST_INFORMATION, *PSYSTEM_SET_TIME_ADJUST_INFORMATION;
965
966 /* Class 29 - Same as 25 */
967
968 /* Class 30 - 31 */
969 /* FIXME */
970
971 /* Class 32 */
972 typedef struct _SYSTEM_CRASH_DUMP_INFORMATION
973 {
974 HANDLE CrashDumpSection;
975 } SYSTEM_CRASH_DUMP_INFORMATION, *PSYSTEM_CRASH_DUMP_INFORMATION;
976
977 /* Class 33 */
978 typedef struct _SYSTEM_EXCEPTION_INFORMATION
979 {
980 ULONG AlignmentFixupCount;
981 ULONG ExceptionDispatchCount;
982 ULONG FloatingEmulationCount;
983 ULONG ByteWordEmulationCount;
984 } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
985
986 /* Class 34 */
987 typedef struct _SYSTEM_CRASH_STATE_INFORMATION
988 {
989 ULONG ValidCrashDump;
990 } SYSTEM_CRASH_STATE_INFORMATION, *PSYSTEM_CRASH_STATE_INFORMATION;
991
992 /* Class 35 */
993 typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION
994 {
995 BOOLEAN KernelDebuggerEnabled;
996 BOOLEAN KernelDebuggerNotPresent;
997 } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
998
999 /* Class 36 */
1000 typedef struct _SYSTEM_CONTEXT_SWITCH_INFORMATION {
1001 ULONG ContextSwitches;
1002 ULONG FindAny;
1003 ULONG FindLast;
1004 ULONG FindIdeal;
1005 ULONG IdleAny;
1006 ULONG IdleCurrent;
1007 ULONG IdleLast;
1008 ULONG IdleIdeal;
1009 ULONG PreemptAny;
1010 ULONG PreemptCurrent;
1011 ULONG PreemptLast;
1012 ULONG SwitchToIdle;
1013 } SYSTEM_CONTEXT_SWITCH_INFORMATION, *PSYSTEM_CONTEXT_SWITCH_INFORMATION;
1014
1015 /* Class 37 */
1016 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION
1017 {
1018 ULONG RegistryQuotaAllowed;
1019 ULONG RegistryQuotaUsed;
1020 ULONG PagedPoolSize;
1021 } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
1022
1023 /* Class 38 */
1024 /* Not a structure, simply send the UNICODE_STRING */
1025
1026 /* Class 39 */
1027 /* Not a structure, simply send a ULONG containing the new separation */
1028
1029 /* Class 40 */
1030 typedef struct _PLUGPLAY_BUS_TYPE
1031 {
1032 PLUGPLAY_BUS_CLASS BusClass;
1033 union
1034 {
1035 INTERFACE_TYPE SystemBusType;
1036 PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType;
1037 };
1038 } PLUGPLAY_BUS_TYPE, *PPLUGPLAY_BUS_TYPE;
1039 typedef struct _PLUGPLAY_BUS_INSTANCE
1040 {
1041 PLUGPLAY_BUS_TYPE BusType;
1042 ULONG BusNumber;
1043 WCHAR BusName[MAX_BUS_NAME];
1044 } PLUGPLAY_BUS_INSTANCE, *PPLUGPLAY_BUS_INSTANCE;
1045 typedef struct _SYSTEM_PLUGPLAY_BUS_INFORMATION
1046 {
1047 ULONG BusCount;
1048 PLUGPLAY_BUS_INSTANCE BusInstance[1];
1049 } SYSTEM_PLUGPLAY_BUS_INFORMATION, *PSYSTEM_PLUGPLAY_BUS_INFORMATION;
1050
1051 /* Class 41 */
1052 typedef struct _SYSTEM_DOCK_INFORMATION
1053 {
1054 SYSTEM_DOCK_STATE DockState;
1055 INTERFACE_TYPE DeviceBusType;
1056 ULONG DeviceBusNumber;
1057 ULONG SlotNumber;
1058 } SYSTEM_DOCK_INFORMATION, *PSYSTEM_DOCK_INFORMATION;
1059
1060 /* Class 42 */
1061 /* FIXME: Conflict with WINNT.H */
1062 typedef struct __SYSTEM_POWER_INFORMATION
1063 {
1064 BOOLEAN SystemSuspendSupported;
1065 BOOLEAN SystemHibernateSupported;
1066 BOOLEAN ResumeTimerSupportsSuspend;
1067 BOOLEAN ResumeTimerSupportsHibernate;
1068 BOOLEAN LidSupported;
1069 BOOLEAN TurboSettingSupported;
1070 BOOLEAN TurboMode;
1071 BOOLEAN SystemAcOrDc;
1072 BOOLEAN PowerDownDisabled;
1073 LARGE_INTEGER SpindownDrives;
1074 } _SYSTEM_POWER_INFORMATION, *P_SYSTEM_POWER_INFORMATION;
1075
1076 /* Class 43 */
1077 typedef struct _SYSTEM_LEGACY_DRIVER_INFORMATION
1078 {
1079 PNP_VETO_TYPE VetoType;
1080 UNICODE_STRING VetoDriver;
1081 /* Buffer Follows */
1082 } SYSTEM_LEGACY_DRIVER_INFORMATION, *PSYSTEM_LEGACY_DRIVER_INFORMATION;
1083
1084 /* Class 44 */
1085 typedef struct _TIME_ZONE_INFORMATION RTL_TIME_ZONE_INFORMATION;
1086
1087 /* Class 45 */
1088 typedef struct _SYSTEM_LOOKASIDE_INFORMATION
1089 {
1090 USHORT CurrentDepth;
1091 USHORT MaximumDepth;
1092 ULONG TotalAllocates;
1093 ULONG AllocateMisses;
1094 ULONG TotalFrees;
1095 ULONG FreeMisses;
1096 ULONG Type;
1097 ULONG Tag;
1098 ULONG Size;
1099 } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
1100
1101 /* Class 46 */
1102 /* Not a structure. Only a HANDLE for the SlipEvent; */
1103
1104 /* Class 47 */
1105 /* Not a structure. Only a ULONG for the SessionId; */
1106
1107 /* Class 48 */
1108 /* Not a structure. Only a ULONG for the SessionId; */
1109
1110 /* Class 49 */
1111 /* FIXME */
1112
1113 /* Class 50 */
1114 /* Not a structure. Only a ULONG_PTR for the SystemRangeStart */
1115
1116 /* Class 51 */
1117 /* FIXME. Based on MM_DRIVER_VERIFIER_DATA */
1118
1119 /* Class 52 */
1120 /* FIXME */
1121
1122 /* Class 53 */
1123 typedef struct _SYSTEM_SESSION_PROCESSES_INFORMATION
1124 {
1125 ULONG SessionId;
1126 ULONG BufferSize;
1127 PVOID Buffer; /* same format as in SystemProcessInformation */
1128 } SYSTEM_SESSION_PROCESSES_INFORMATION, * PSYSTEM_SESSION_PROCESSES_INFORMATION;
1129
1130 /* Class 54-81 */
1131 /* FIXME */
1132
1133
1134 #endif