1 #ifndef __INCLUDE_DDK_ZWTYPES_H
2 #define __INCLUDE_DDK_ZWTYPES_H
6 typedef enum _DEBUG_CONTROL_CODE
8 DebugGetTraceInformation = 1,
9 DebugSetInternalBreakpoint,
11 DebugClearSpecialCalls,
12 DebugQuerySpecialCalls,
17 typedef enum _KPROFILE_SOURCE
22 // file disposition values
24 #define FILE_SUPERSEDE 0x0000
25 #define FILE_OPEN 0x0001
26 #define FILE_CREATE 0x0002
27 #define FILE_OPEN_IF 0x0003
28 #define FILE_OVERWRITE 0x0004
29 #define FILE_OVERWRITE_IF 0x0005
30 #define FILE_MAXIMUM_DISPOSITION 0x0005
32 // job query / set information class
34 typedef enum _JOBOBJECTINFOCLASS { // Q S
35 JobObjectBasicAccountingInformation = 1, // Y N
36 JobObjectBasicLimitInformation, // Y Y
37 JobObjectBasicProcessIdList, // Y N
38 JobObjectBasicUIRestrictions, // Y Y
39 JobObjectSecurityLimitInformation, // Y Y
40 JobObjectEndOfJobTimeInformation, // N Y
41 JobObjectAssociateCompletionPortInformation, // N Y
42 JobObjectBasicAndIoAccountingInformation, // Y N
43 JobObjectExtendedLimitInformation, // Y Y
47 // {Nt|Zw}{Query|Set}SystemInformation
48 // (GN means Gary Nebbet in "NT/W2K Native API Reference")
51 enum _SYSTEM_INFORMATION_CLASS
53 SystemInformationClassMin = 0,
54 SystemBasicInformation = 0, /* Q */
56 SystemProcessorInformation = 1, /* Q */
58 SystemPerformanceInformation = 2, /* Q */
60 SystemTimeOfDayInformation = 3, /* Q */
62 SystemPathInformation = 4, /* Q (checked build only) */
63 SystemNotImplemented1 = 4, /* Q (GN) */
65 SystemProcessInformation = 5, /* Q */
66 SystemProcessesAndThreadsInformation = 5, /* Q (GN) */
68 SystemCallCountInfoInformation = 6, /* Q */
69 SystemCallCounts = 6, /* Q (GN) */
71 SystemDeviceInformation = 7, /* Q */
72 // It conflicts with symbol in ntoskrnl/io/resource.c
73 // SystemConfigurationInformation = 7, /* Q (GN) */
75 SystemProcessorPerformanceInformation = 8, /* Q */
76 SystemProcessorTimes = 8, /* Q (GN) */
78 SystemFlagsInformation = 9, /* QS */
79 SystemGlobalFlag = 9, /* QS (GN) */
81 SystemCallTimeInformation = 10,
82 SystemNotImplemented2 = 10, /* (GN) */
84 SystemModuleInformation = 11, /* Q */
86 SystemLocksInformation = 12, /* Q */
87 SystemLockInformation = 12, /* Q (GN) */
89 SystemStackTraceInformation = 13,
90 SystemNotImplemented3 = 13, /* Q (GN) */
92 SystemPagedPoolInformation = 14,
93 SystemNotImplemented4 = 14, /* Q (GN) */
95 SystemNonPagedPoolInformation = 15,
96 SystemNotImplemented5 = 15, /* Q (GN) */
98 SystemHandleInformation = 16, /* Q */
100 SystemObjectInformation = 17, /* Q */
102 SystemPageFileInformation = 18, /* Q */
103 SystemPagefileInformation = 18, /* Q (GN) */
105 SystemVdmInstemulInformation = 19, /* Q */
106 SystemInstructionEmulationCounts = 19, /* Q (GN) */
108 SystemVdmBopInformation = 20,
109 SystemInvalidInfoClass1 = 20, /* (GN) */
111 SystemFileCacheInformation = 21, /* QS */
112 SystemCacheInformation = 21, /* QS (GN) */
114 SystemPoolTagInformation = 22, /* Q (checked build only) */
116 SystemInterruptInformation = 23, /* Q */
117 SystemProcessorStatistics = 23, /* Q (GN) */
119 SystemDpcBehaviourInformation = 24, /* QS */
120 SystemDpcInformation = 24, /* QS (GN) */
122 SystemFullMemoryInformation = 25,
123 SystemNotImplemented6 = 25, /* (GN) */
125 SystemLoadImage = 26, /* S (callable) (GN) */
127 SystemUnloadImage = 27, /* S (callable) (GN) */
129 SystemTimeAdjustmentInformation = 28, /* QS */
130 SystemTimeAdjustment = 28, /* QS (GN) */
132 SystemSummaryMemoryInformation = 29,
133 SystemNotImplemented7 = 29, /* (GN) */
135 SystemNextEventIdInformation = 30,
136 SystemNotImplemented8 = 30, /* (GN) */
138 SystemEventIdsInformation = 31,
139 SystemNotImplemented9 = 31, /* (GN) */
141 SystemCrashDumpInformation = 32, /* Q */
143 SystemExceptionInformation = 33, /* Q */
145 SystemCrashDumpStateInformation = 34, /* Q */
147 SystemKernelDebuggerInformation = 35, /* Q */
149 SystemContextSwitchInformation = 36, /* Q */
151 SystemRegistryQuotaInformation = 37, /* QS */
153 SystemLoadAndCallImage = 38, /* S (GN) */
155 SystemPrioritySeparation = 39, /* S */
157 SystemPlugPlayBusInformation = 40,
158 SystemNotImplemented10 = 40, /* Q (GN) */
160 SystemDockInformation = 41,
161 SystemNotImplemented11 = 41, /* Q (GN) */
163 SystemPowerInformation = 42,
164 SystemInvalidInfoClass2 = 42, /* (GN) */
166 SystemProcessorSpeedInformation = 43,
167 SystemInvalidInfoClass3 = 43, /* (GN) */
169 SystemCurrentTimeZoneInformation = 44, /* QS */
170 SystemTimeZoneInformation = 44, /* QS (GN) */
172 SystemLookasideInformation = 45, /* Q */
174 SystemSetTimeSlipEvent = 46, /* S (GN) */
176 SystemCreateSession = 47, /* S (GN) */
178 SystemDeleteSession = 48, /* S (GN) */
180 SystemInvalidInfoClass4 = 49, /* (GN) */
182 SystemRangeStartInformation = 50, /* Q (GN) */
184 SystemVerifierInformation = 51, /* QS (GN) */
186 SystemAddVerifier = 52, /* S (GN) */
188 SystemSessionProcessesInformation = 53, /* Q (GN) */
189 SystemInformationClassMax
191 } SYSTEM_INFORMATION_CLASS;
193 // SystemBasicInformation (0)
195 struct _SYSTEM_BASIC_INFORMATION
198 ULONG TimerResolution;
200 ULONG NumberOfPhysicalPages;
201 ULONG LowestPhysicalPageNumber;
202 ULONG HighestPhysicalPageNumber;
203 ULONG AllocationGranularity;
204 ULONG MinimumUserModeAddress;
205 ULONG MaximumUserModeAddress;
206 KAFFINITY ActiveProcessorsAffinityMask;
207 CCHAR NumberOfProcessors;
208 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
210 // SystemProcessorInformation (1)
212 struct _SYSTEM_PROCESSOR_INFORMATION
214 USHORT ProcessorArchitecture;
215 USHORT ProcessorLevel;
216 USHORT ProcessorRevision;
218 ULONG ProcessorFeatureBits;
219 } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
221 // SystemPerformanceInfo (2)
223 struct _SYSTEM_PERFORMANCE_INFORMATION
225 LARGE_INTEGER IdleProcessorTime;
226 LARGE_INTEGER IoReadTransferCount;
227 LARGE_INTEGER IoWriteTransferCount;
228 LARGE_INTEGER IoOtherTransferCount;
229 ULONG IoReadOperationCount;
230 ULONG IoWriteOperationCount;
231 ULONG IoOtherOperationCount;
232 ULONG AvailablePages;
235 ULONG PeakCommitment;
236 ULONG PageFaultCount;
237 ULONG CopyOnWriteCount;
238 ULONG TransitionCount;
239 ULONG CacheTransitionCount;
240 ULONG DemandZeroCount;
242 ULONG PageReadIoCount;
243 ULONG CacheReadCount;
245 ULONG DirtyPagesWriteCount;
246 ULONG DirtyWriteIoCount;
247 ULONG MappedPagesWriteCount;
248 ULONG MappedWriteIoCount;
249 ULONG PagedPoolPages;
250 ULONG NonPagedPoolPages;
255 ULONG MmTotalSystemFreePtes;
256 ULONG MmSystemCodepage;
257 ULONG MmTotalSystemDriverPages;
258 ULONG MmTotalSystemCodePages;
262 ULONG MmSystemCachePage;
263 ULONG MmPagedPoolPage;
264 ULONG MmSystemDriverPage;
265 ULONG CcFastReadNoWait;
266 ULONG CcFastReadWait;
267 ULONG CcFastReadResourceMiss;
268 ULONG CcFastReadNotPossible;
269 ULONG CcFastMdlReadNoWait;
270 ULONG CcFastMdlReadWait;
271 ULONG CcFastMdlReadResourceMiss;
272 ULONG CcFastMdlReadNotPossible;
273 ULONG CcMapDataNoWait;
275 ULONG CcMapDataNoWaitMiss;
276 ULONG CcMapDataWaitMiss;
277 ULONG CcPinMappedDataCount;
278 ULONG CcPinReadNoWait;
280 ULONG CcPinReadNoWaitMiss;
281 ULONG CcPinReadWaitMiss;
282 ULONG CcCopyReadNoWait;
283 ULONG CcCopyReadWait;
284 ULONG CcCopyReadNoWaitMiss;
285 ULONG CcCopyReadWaitMiss;
286 ULONG CcMdlReadNoWait;
288 ULONG CcMdlReadNoWaitMiss;
289 ULONG CcMdlReadWaitMiss;
290 ULONG CcReadaheadIos;
291 ULONG CcLazyWriteIos;
292 ULONG CcLazyWritePages;
295 ULONG ContextSwitches;
300 } SYSTEM_PERFORMANCE_INFO, *PSYSTEM_PERFORMANCE_INFO;
302 // SystemModuleInformation (11)
304 struct _SYSTEM_MODULE_INFORMATION
313 USHORT ModuleNameOffset;
322 USHORT NameLength; /* Length of module name not including the path, this field contains valid value only for NTOSKRNL module*/
323 USHORT PathLength; /* Length of 'directory path' part of modulename*/
326 } SYSTEM_MODULE_INFORMATION, * PSYSTEM_MODULE_INFORMATION;
329 struct _SYSTEM_MODULES
332 SYSTEM_MODULE_INFORMATION Modules[ANYSIZE_ARRAY];
333 } SYSTEM_MODULES, *PSYSTEM_MODULES;
335 // SystemHandleInformation (16)
338 struct _SYSTEM_HANDLE_ENTRY
347 } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
350 struct _SYSTEM_HANDLE_INFORMATION
353 SYSTEM_HANDLE_ENTRY Handle [1];
355 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
357 // SystemObjectInformation (17)
359 struct _SYSTEM_OBJECT_TYPE_INFORMATION
361 ULONG NextEntryOffset;
365 ULONG InvalidAttributes;
366 GENERIC_MAPPING GenericMapping;
367 ACCESS_MASK ValidAccessMask;
372 } SYSTEM_OBJECT_TYPE_INFORMATION, *PSYSTEM_OBJECT_TYPE_INFORMATION;
375 struct _SYSTEM_OBJECT_INFORMATION
377 ULONG NextEntryOffset;
379 ULONG CreatorProcessId;
384 ULONG PagedPoolUsage;
385 ULONG NonPagedPoolUsage;
386 ULONG ExclusiveProcessId;
387 PSECURITY_DESCRIPTOR SecurityDescriptor;
390 } SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION;
392 // SystemPageFileInformation (18)
394 struct _SYSTEM_PAGEFILE_INFORMATION
396 ULONG RelativeOffset;
397 ULONG CurrentSizePages;
398 ULONG TotalUsedPages;
400 UNICODE_STRING PagefileFileName;
402 } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
404 // SystemCacheInformation (21)
406 struct _SYSTEM_CACHE_INFORMATION
410 ULONG PageFaultCount;
411 ULONG MinimumWorkingSet;
412 ULONG MaximumWorkingSet;
415 } SYSTEM_CACHE_INFORMATION;
417 // SystemDpcInformation (24)
419 struct _SYSTEM_DPC_INFORMATION
422 ULONG KiMaximumDpcQueueDepth;
423 ULONG KiMinimumDpcRate;
424 ULONG KiAdjustDpcThreshold;
425 ULONG KiIdealDpcRate;
427 } SYSTEM_DPC_INFORMATION, *PSYSTEM_DPC_INFORMATION;
429 // SystemLoadImage (26)
430 typedef struct _SYSTEM_LOAD_IMAGE
432 UNICODE_STRING ModuleName;
434 PVOID SectionPointer;
436 PVOID ExportDirectory;
437 } SYSTEM_LOAD_IMAGE, *PSYSTEM_LOAD_IMAGE;
439 // SystemUnloadImage (27)
440 typedef struct _SYSTEM_UNLOAD_IMAGE
443 } SYSTEM_UNLOAD_IMAGE, *PSYSTEM_UNLOAD_IMAGE;
445 // SystemTimeAdjustmentInformation (28)
447 struct _SYSTEM_QUERY_TIME_ADJUSTMENT
449 ULONG TimeAdjustment;
450 ULONG MaximumIncrement;
451 BOOLEAN TimeSynchronization;
453 } SYSTEM_QUERY_TIME_ADJUSTMENT, *PSYSTEM_QUERY_TIME_ADJUSTMENT;
456 struct _SYSTEM_SET_TIME_ADJUSTMENT
458 ULONG TimeAdjustment;
459 BOOLEAN TimeSynchronization;
461 } SYSTEM_TIME_ADJUSTMENT_INFO, *PSYSTEM_TIME_ADJUSTMENT_INFO;
465 typedef enum _ATOM_INFORMATION_CLASS
467 AtomBasicInformation = 0,
468 AtomTableInformation = 1,
469 } ATOM_INFORMATION_CLASS;
471 typedef struct _ATOM_BASIC_INFORMATION
477 } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
479 // SystemLoadAndCallImage(38)
480 typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE
482 UNICODE_STRING ModuleName;
483 } SYSTEM_LOAD_AND_CALL_IMAGE, *PSYSTEM_LOAD_AND_CALL_IMAGE;
485 // SystemTimeZoneInformation (44)
487 struct _SYSTEM_TIME_ZONE_INFORMATION
490 WCHAR StandardName [32];
493 WCHAR DaylightName [32];
497 } SYSTEM_TIME_ZONE_INFORMATION, * PSYSTEM_TIME_ZONE_INFORMATION;
499 // SystemLookasideInformation (45)
501 struct _SYSTEM_LOOKASIDE_INFORMATION
505 ULONG TotalAllocates;
506 ULONG AllocatesMisses;
513 } SYSTEM_LOOKASIDE_INFORMATION, * PSYSTEM_LOOKASIDE_INFORMATION;
515 // SystemSetTimeSlipEvent (46)
517 struct _SYSTEM_SET_TIME_SLIP_EVENT
519 HANDLE TimeSlipEvent; /* IN */
521 } SYSTEM_SET_TIME_SLIP_EVENT, * PSYSTEM_SET_TIME_SLIP_EVENT;
523 // SystemCreateSession (47)
524 // (available only on TSE/NT5+)
526 struct _SYSTEM_CREATE_SESSION
528 ULONG SessionId; /* OUT */
530 } SYSTEM_CREATE_SESSION, * PSYSTEM_CREATE_SESSION;
532 // SystemDeleteSession (48)
533 // (available only on TSE/NT5+)
535 struct _SYSTEM_DELETE_SESSION
537 ULONG SessionId; /* IN */
539 } SYSTEM_DELETE_SESSION, * PSYSTEM_DELETE_SESSION;
541 // SystemRangeStartInformation (50)
543 struct _SYSTEM_RANGE_START_INFORMATION
545 PVOID SystemRangeStart;
547 } SYSTEM_RANGE_START_INFORMATION, * PSYSTEM_RANGE_START_INFORMATION;
549 // SystemSessionProcessesInformation (53)
550 // (available only on TSE/NT5+)
552 struct _SYSTEM_SESSION_PROCESSES_INFORMATION
556 PVOID Buffer; /* same format as in SystemProcessInformation */
558 } SYSTEM_SESSION_PROCESSES_INFORMATION, * PSYSTEM_SESSION_PROCESSES_INFORMATION;
560 // memory information
562 typedef enum _MEMORY_INFORMATION_CLASS {
563 MemoryBasicInformation,
564 MemoryWorkingSetList,
565 MemorySectionName //,
566 //MemoryBasicVlmInformation //???
567 } MEMORY_INFORMATION_CLASS;
569 typedef struct _MEMORY_BASIC_INFORMATION { // Information Class 0
571 PVOID AllocationBase;
572 ULONG AllocationProtect;
577 } MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;
579 typedef struct _MEMORY_WORKING_SET_LIST { // Information Class 1
581 ULONG WorkingSetList[1];
582 } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
584 // Information Class 2
585 #define _MEMORY_SECTION_NAME_STATIC(__bufsize__) \
587 UNICODE_STRING SectionFileName; \
588 WCHAR NameBuffer[(__bufsize__)]; \
591 #define MEMORY_SECTION_NAME_STATIC(__bufsize__) \
592 struct _MEMORY_SECTION_NAME_STATIC((__bufsize__)
594 typedef struct _MEMORY_SECTION_NAME_STATIC(ANYSIZE_ARRAY)
595 MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
597 // Information class 0
598 typedef struct _PROCESS_BASIC_INFORMATION
602 KAFFINITY AffinityMask;
603 KPRIORITY BasePriority;
604 ULONG UniqueProcessId;
605 ULONG InheritedFromUniqueProcessId;
606 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
608 // Information class 1
609 typedef struct _QUOTA_LIMITS
611 ULONG PagedPoolLimit;
612 ULONG NonPagedPoolLimit;
613 ULONG MinimumWorkingSetSize;
614 ULONG MaximumWorkingSetSize;
617 } QUOTA_LIMITS, *PQUOTA_LIMITS;
619 // Information class 2
620 typedef struct _IO_COUNTERS
622 LARGE_INTEGER ReadOperationCount;
623 LARGE_INTEGER WriteOperationCount;
624 LARGE_INTEGER OtherOperationCount;
625 LARGE_INTEGER ReadTransferCount;
626 LARGE_INTEGER WriteTransferCount;
627 LARGE_INTEGER OtherTransferCount;
628 } IO_COUNTERS, *PIO_COUNTERS;
630 // Information class 3
631 typedef struct _VM_COUNTERS_
633 ULONG PeakVirtualSize;
635 ULONG PageFaultCount;
636 ULONG PeakWorkingSetSize;
637 ULONG WorkingSetSize;
638 ULONG QuotaPeakPagedPoolUsage;
639 ULONG QuotaPagedPoolUsage;
640 ULONG QuotaPeakNonPagedPoolUsage;
641 ULONG QuotaNonPagedPoolUsage;
643 ULONG PeakPagefileUsage;
644 } VM_COUNTERS, *PVM_COUNTERS;
646 // Information class 4
647 typedef struct _KERNEL_USER_TIMES
653 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
655 // Information class 9
656 typedef struct _PROCESS_ACCESS_TOKEN
660 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
662 // Information class 14
663 typedef struct _POOLED_USAGE_AND_LIMITS_
665 ULONG PeakPagedPoolUsage;
666 ULONG PagedPoolUsage;
667 ULONG PagedPoolLimit;
668 ULONG PeakNonPagedPoolUsage;
669 ULONG NonPagedPoolUsage;
670 ULONG NonPagedPoolLimit;
671 ULONG PeakPagefileUsage;
674 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
676 // Information class 15
677 typedef struct _PROCESS_WS_WATCH_INFORMATION
681 } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
683 // Information class 18
684 typedef struct _PROCESS_PRIORITY_CLASS
688 } PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;
690 // Information class 23
691 typedef struct _PROCESS_DEVICEMAP_INFORMATION
695 HANDLE DirectoryHandle;
702 } PROCESS_DEVICEMAP_INFORMATION, *pPROCESS_DEVICEMAP_INFORMATION;
704 // Information class 24
705 typedef struct _PROCESS_SESSION_INFORMATION
708 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
710 // thread information
712 // incompatible with MS NT
714 typedef struct _THREAD_BASIC_INFORMATION
717 PVOID TebBaseAddress; // PNT_TIB (GN)
719 KAFFINITY AffinityMask;
721 KPRIORITY BasePriority;
722 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
724 // object information
726 typedef struct _OBJECT_NAME_INFORMATION
729 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
733 typedef struct _FILE_BASIC_INFORMATION
735 LARGE_INTEGER CreationTime;
736 LARGE_INTEGER LastAccessTime;
737 LARGE_INTEGER LastWriteTime;
738 LARGE_INTEGER ChangeTime;
739 ULONG FileAttributes;
740 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
742 typedef struct _FILE_STANDARD_INFORMATION
744 LARGE_INTEGER AllocationSize;
745 LARGE_INTEGER EndOfFile;
747 BOOLEAN DeletePending;
749 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
751 typedef struct _FILE_POSITION_INFORMATION
753 LARGE_INTEGER CurrentByteOffset;
754 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
756 typedef struct _FILE_ALIGNMENT_INFORMATION
758 ULONG AlignmentRequirement;
759 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
761 typedef struct _FILE_DISPOSITION_INFORMATION
763 BOOLEAN DoDeleteFile;
764 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
766 typedef struct _FILE_END_OF_FILE_INFORMATION
768 LARGE_INTEGER EndOfFile;
769 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
771 typedef struct _FILE_NETWORK_OPEN_INFORMATION
777 LARGE_INTEGER AllocationSize;
778 LARGE_INTEGER EndOfFile;
779 ULONG FileAttributes;
780 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
782 typedef struct _FILE_FULL_EA_INFORMATION
784 ULONG NextEntryOffset;
787 USHORT EaValueLength;
789 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
792 typedef struct _FILE_EA_INFORMATION {
794 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
797 typedef struct _FILE_GET_EA_INFORMATION {
798 ULONG NextEntryOffset;
801 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
803 typedef struct _FILE_STREAM_INFORMATION {
804 ULONG NextEntryOffset;
805 ULONG StreamNameLength;
806 LARGE_INTEGER StreamSize;
807 LARGE_INTEGER StreamAllocationSize;
809 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
811 typedef struct _FILE_ALLOCATION_INFORMATION {
812 LARGE_INTEGER AllocationSize;
813 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
815 typedef struct _FILE_NAME_INFORMATION {
816 ULONG FileNameLength;
818 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
820 typedef struct _FILE_NAMES_INFORMATION
822 ULONG NextEntryOffset;
824 ULONG FileNameLength;
826 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
829 typedef struct _FILE_RENAME_INFORMATION {
832 ULONG FileNameLength;
834 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
837 typedef struct _FILE_INTERNAL_INFORMATION {
838 LARGE_INTEGER IndexNumber;
839 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
841 typedef struct _FILE_ACCESS_INFORMATION {
842 ACCESS_MASK AccessFlags;
843 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
846 typedef struct _FILE_MODE_INFORMATION {
848 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
851 typedef struct _FILE_PIPE_INFORMATION {
853 ULONG CompletionMode;
854 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
856 typedef struct _FILE_PIPE_LOCAL_INFORMATION {
858 ULONG NamedPipeConfiguration;
859 ULONG MaximumInstances;
860 ULONG CurrentInstances;
862 ULONG ReadDataAvailable;
864 ULONG WriteQuotaAvailable;
865 ULONG NamedPipeState;
867 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
869 typedef struct _FILE_PIPE_REMOTE_INFORMATION {
870 LARGE_INTEGER CollectDataTime;
871 ULONG MaximumCollectionCount;
872 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
874 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
875 ULONG MaxMessageSize;
876 ULONG Unknown; /* ?? */
879 LARGE_INTEGER Timeout;
880 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
882 typedef struct _FILE_MAILSLOT_SET_INFORMATION {
883 LARGE_INTEGER Timeout;
884 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
886 typedef struct _FILE_COMPRESSION_INFORMATION {
887 LARGE_INTEGER CompressedFileSize;
888 USHORT CompressionFormat;
889 UCHAR CompressionUnitShift;
893 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
895 typedef struct _FILE_COMPLETION_INFORMATION { // Information Class 30
896 HANDLE IoCompletionHandle;
898 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
900 typedef struct _FILE_ALL_INFORMATION {
901 FILE_BASIC_INFORMATION BasicInformation;
902 FILE_STANDARD_INFORMATION StandardInformation;
903 FILE_INTERNAL_INFORMATION InternalInformation;
904 FILE_EA_INFORMATION EaInformation;
905 FILE_ACCESS_INFORMATION AccessInformation;
906 FILE_POSITION_INFORMATION PositionInformation;
907 FILE_MODE_INFORMATION ModeInformation;
908 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
909 FILE_NAME_INFORMATION NameInformation;
910 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
913 // file system information structures
915 typedef struct _FILE_FS_DEVICE_INFORMATION {
916 DEVICE_TYPE DeviceType;
917 ULONG Characteristics;
918 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
921 typedef struct _FILE_FS_VOLUME_INFORMATION {
922 TIME VolumeCreationTime;
923 ULONG VolumeSerialNumber;
924 ULONG VolumeLabelLength;
925 BOOLEAN SupportsObjects;
926 WCHAR VolumeLabel[0];
927 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
929 typedef struct _FILE_FS_SIZE_INFORMATION {
930 LARGE_INTEGER TotalAllocationUnits;
931 LARGE_INTEGER AvailableAllocationUnits;
932 ULONG SectorsPerAllocationUnit;
933 ULONG BytesPerSector;
934 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
936 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
937 ULONG FileSystemAttributes;
938 LONG MaximumComponentNameLength;
939 ULONG FileSystemNameLength;
940 WCHAR FileSystemName[0];
941 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
944 FileSystemAttributes is one of the following values:
946 FILE_CASE_SENSITIVE_SEARCH 0x00000001
947 FILE_CASE_PRESERVED_NAMES 0x00000002
948 FILE_UNICODE_ON_DISK 0x00000004
949 FILE_PERSISTENT_ACLS 0x00000008
950 FILE_FILE_COMPRESSION 0x00000010
951 FILE_VOLUME_QUOTAS 0x00000020
952 FILE_VOLUME_IS_COMPRESSED 0x00008000
954 typedef struct _FILE_FS_LABEL_INFORMATION {
955 ULONG VolumeLabelLength;
956 WCHAR VolumeLabel[0];
957 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
959 // read file scatter / write file scatter
960 //FIXME I am a win32 struct aswell
962 typedef union _FILE_SEGMENT_ELEMENT {
965 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
967 typedef struct _FILE_DIRECTORY_INFORMATION {
968 ULONG NextEntryOffset;
974 LARGE_INTEGER EndOfFile;
975 LARGE_INTEGER AllocationSize;
976 ULONG FileAttributes;
977 ULONG FileNameLength;
979 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
981 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
982 ULONG NextEntryOffset;
988 LARGE_INTEGER EndOfFile;
989 LARGE_INTEGER AllocationSize;
990 ULONG FileAttributes;
991 ULONG FileNameLength;
993 WCHAR FileName[0]; // variable size
994 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
995 FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
998 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
999 ULONG NextEntryOffset;
1002 TIME LastAccessTime;
1005 LARGE_INTEGER EndOfFile;
1006 LARGE_INTEGER AllocationSize;
1007 ULONG FileAttributes;
1008 ULONG FileNameLength;
1010 CHAR ShortNameLength;
1011 WCHAR ShortName[12]; // 8.3 name
1013 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
1014 FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
1016 typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
1017 ULONG NextEntryOffset;
1019 LARGE_INTEGER CreationTime;
1020 LARGE_INTEGER LastAccessTime;
1021 LARGE_INTEGER LastWriteTime;
1022 LARGE_INTEGER ChangeTime;
1023 LARGE_INTEGER EndOfFile;
1024 LARGE_INTEGER AllocationSize;
1025 ULONG FileAttributes;
1026 ULONG FileNameLength;
1028 CCHAR ShortNameLength;
1029 WCHAR ShortName[12];
1030 LARGE_INTEGER FileId;
1032 } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
1035 NotifyFilter / CompletionFilter:
1037 FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
1038 FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
1039 FILE_NOTIFY_CHANGE_NAME 0x00000003
1040 FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
1041 FILE_NOTIFY_CHANGE_SIZE 0x00000008
1042 FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
1043 FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
1044 FILE_NOTIFY_CHANGE_CREATION 0x00000040
1045 FILE_NOTIFY_CHANGE_EA 0x00000080
1046 FILE_NOTIFY_CHANGE_SECURITY 0x00000100
1047 FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
1048 FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
1049 FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
1052 typedef struct _FILE_NOTIFY_INFORMATION {
1054 ULONG FileNameLength;
1056 } FILE_NOTIFY_INFORMATION;
1058 #define FSCTL_GET_VOLUME_BITMAP 0x9006F
1059 #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
1060 #define FSCTL_MOVE_FILE 0x90074
1062 typedef struct _MAPPING_PAIR
1066 } MAPPING_PAIR, *PMAPPING_PAIR;
1068 typedef struct _GET_RETRIEVAL_DESCRIPTOR
1070 ULONG NumberOfPairs;
1072 MAPPING_PAIR Pair[0]; // variable size
1073 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
1075 typedef struct _MOVEFILE_DESCRIPTOR
1079 LARGE_INTEGER StartVcn;
1080 LARGE_INTEGER TargetLcn;
1083 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
1085 typedef struct _SECTION_BASIC_INFORMATION
1090 } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
1092 typedef enum _SECTION_INFORMATION_CLASS
1094 SectionBasicInformation,
1095 SectionImageInformation,
1096 } SECTION_INFORMATION_CLASS;
1100 typedef enum SHUTDOWN_ACTION_TAG {
1106 typedef enum _IO_COMPLETION_INFORMATION_CLASS {
1107 IoCompletionBasicInformation
1108 } IO_COMPLETION_INFORMATION_CLASS;
1110 typedef struct _IO_COMPLETION_BASIC_INFORMATION {
1112 } IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION;
1114 #else /* __USE_W32API */
1116 #define DebugDbgLoadSymbols ((DEBUG_CONTROL_CODE)0xffffffff)
1118 #endif /* __USE_W32API */
1120 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
1121 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
1123 extern ULONG NtBuildNumber;
1126 extern ULONG NtBuildNumber;
1128 extern ULONG NtBuildNumber;
1132 // event access mask
1134 #define EVENT_READ_ACCESS 1
1135 #define EVENT_WRITE_ACCESS 2
1137 //process query / set information class
1139 #define ProcessBasicInformation 0
1140 #define ProcessQuotaLimits 1
1141 #define ProcessIoCounters 2
1142 #define ProcessVmCounters 3
1143 #define ProcessTimes 4
1144 #define ProcessBasePriority 5
1145 #define ProcessRaisePriority 6
1146 #define ProcessDebugPort 7
1147 #define ProcessExceptionPort 8
1148 #define ProcessAccessToken 9
1149 #define ProcessLdtInformation 10
1150 #define ProcessLdtSize 11
1151 #define ProcessDefaultHardErrorMode 12
1152 #define ProcessIoPortHandlers 13
1153 #define ProcessPooledUsageAndLimits 14
1154 #define ProcessWorkingSetWatch 15
1155 #define ProcessUserModeIOPL 16
1156 #define ProcessEnableAlignmentFaultFixup 17
1157 #define ProcessPriorityClass 18
1158 #define ProcessWx86Information 19
1159 #define ProcessHandleCount 20
1160 #define ProcessAffinityMask 21
1161 #define ProcessPriorityBoost 22
1162 #define ProcessDeviceMap 23
1163 #define ProcessSessionInformation 24
1164 #define ProcessForegroundInformation 25
1165 #define ProcessWow64Information 26
1166 /* ReactOS private. */
1167 #define ProcessImageFileName 27
1168 #define ProcessDesktop 28
1169 #define MaxProcessInfoClass 29
1172 * thread query / set information class
1174 #define ThreadBasicInformation 0
1175 #define ThreadTimes 1
1176 #define ThreadPriority 2
1177 #define ThreadBasePriority 3
1178 #define ThreadAffinityMask 4
1179 #define ThreadImpersonationToken 5
1180 #define ThreadDescriptorTableEntry 6
1181 #define ThreadEnableAlignmentFaultFixup 7
1182 #define ThreadEventPair 8
1183 #define ThreadQuerySetWin32StartAddress 9
1184 #define ThreadZeroTlsCell 10
1185 #define ThreadPerformanceCount 11
1186 #define ThreadAmILastThread 12
1187 #define ThreadIdealProcessor 13
1188 #define ThreadPriorityBoost 14
1189 #define ThreadSetTlsArrayAddress 15
1190 #define ThreadIsIoPending 16
1191 #define ThreadHideFromDebugger 17
1192 #define MaxThreadInfoClass 17
1194 // object handle information
1196 #define ObjectBasicInformation 0
1197 #define ObjectNameInformation 1
1198 #define ObjectTypeInformation 2
1199 #define ObjectAllInformation 3
1200 #define ObjectDataInformation 4
1202 typedef struct _ATOM_TABLE_INFORMATION
1204 ULONG NumberOfAtoms;
1206 } ATOM_TABLE_INFORMATION, *PATOM_TABLE_INFORMATION;
1209 // mutant information
1211 typedef enum _MUTANT_INFORMATION_CLASS
1213 MutantBasicInformation = 0
1214 } MUTANT_INFORMATION_CLASS;
1216 typedef struct _MUTANT_BASIC_INFORMATION
1221 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
1224 // SystemTimeOfDayInformation (3)
1226 struct _SYSTEM_TIMEOFDAY_INFORMATION
1228 LARGE_INTEGER BootTime;
1229 LARGE_INTEGER CurrentTime;
1230 LARGE_INTEGER TimeZoneBias;
1233 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION;
1235 // SystemPathInformation (4)
1238 struct _SYSTEM_PATH_INFORMATION
1242 } SYSTEM_PATH_INFORMATION, * PSYSTEM_PATH_INFORMATION;
1244 // SystemProcessInformation (5)
1246 typedef struct _SYSTEM_THREADS
1255 KPRIORITY BasePriority;
1256 ULONG ContextSwitchCount;
1258 KWAIT_REASON WaitReason;
1259 } SYSTEM_THREADS, *PSYSTEM_THREADS;
1261 typedef struct _SYSTEM_PROCESSES_NT4
1263 SIZE_T NextEntryDelta;
1269 UNICODE_STRING ProcessName;
1270 KPRIORITY BasePriority;
1272 ULONG InheritedFromProcessId;
1275 VM_COUNTERS VmCounters;
1276 SYSTEM_THREADS Threads[ANYSIZE_ARRAY];
1277 } SYSTEM_PROCESSES_NT4, *PSYSTEM_PROCESSES_NT4;
1279 typedef struct _SYSTEM_PROCESSES_NT5
1281 SIZE_T NextEntryDelta;
1287 UNICODE_STRING ProcessName;
1288 KPRIORITY BasePriority;
1290 ULONG InheritedFromProcessId;
1293 VM_COUNTERS VmCounters;
1294 IO_COUNTERS IoCounters;
1295 SYSTEM_THREADS Threads[ANYSIZE_ARRAY];
1296 } SYSTEM_PROCESSES_NT5, *PSYSTEM_PROCESSES_NT5;
1298 /* Not sure. What version are we emulating? */
1299 typedef SYSTEM_PROCESSES_NT5 SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;
1301 // SystemCallCountInformation (6)
1303 struct _SYSTEM_SDT_INFORMATION
1306 ULONG NumberOfSystemServiceTables;
1307 ULONG NumberOfServices [1];
1308 ULONG ServiceCounters [1];
1310 } SYSTEM_SDT_INFORMATION, *PSYSTEM_SDT_INFORMATION;
1312 // SystemDeviceInformation (7)
1314 struct _SYSTEM_DEVICE_INFORMATION
1316 ULONG NumberOfDisks;
1317 ULONG NumberOfFloppies;
1318 ULONG NumberOfCdRoms;
1319 ULONG NumberOfTapes;
1320 ULONG NumberOfSerialPorts;
1321 ULONG NumberOfParallelPorts;
1322 } SYSTEM_DEVICE_INFORMATION, *PSYSTEM_DEVICE_INFORMATION;
1324 // SystemProcessorPerformanceInformation (8)
1325 // (one per processor in the system)
1327 struct _SYSTEM_PROCESSORTIME_INFO
1329 TIME TotalProcessorRunTime;
1330 TIME TotalProcessorTime;
1331 TIME TotalProcessorUserTime;
1333 TIME TotalInterruptTime;
1334 ULONG TotalInterrupts;
1337 } SYSTEM_PROCESSORTIME_INFO, *PSYSTEM_PROCESSORTIME_INFO;
1339 // SystemFlagsInformation (9)
1341 struct _SYSTEM_FLAGS_INFORMATION
1345 } SYSTEM_FLAGS_INFORMATION, * PSYSTEM_FLAGS_INFORMATION;
1347 #define FLG_STOP_ON_EXCEPTION 0x00000001
1348 #define FLG_SHOW_LDR_SNAPS 0x00000002
1349 #define FLG_DEBUG_INITIAL_COMMAND 0x00000004
1350 #define FLG_STOP_ON_HANG_GUI 0x00000008
1351 #define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
1352 #define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
1353 #define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
1354 #define FLG_HEAP_VALIDATE_ALL 0x00000080
1355 #define FLG_POOL_ENABLE_TAIL_CHECK 0x00000100
1356 #define FLG_POOL_ENABLE_FREE_CHECK 0x00000200
1357 #define FLG_POOL_ENABLE_TAGGING 0x00000400
1358 #define FLG_HEAP_ENABLE_TAGGING 0x00000800
1359 #define FLG_USER_STACK_TRACE_DB 0x00001000
1360 #define FLG_KERNEL_STACK_TRACE_DB 0x00002000
1361 #define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
1362 #define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
1363 #define FLG_IGNORE_DEBUG_PRIV 0x00010000
1364 #define FLG_ENABLE_CSRDEBUG 0x00020000
1365 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
1366 #define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
1367 #define FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
1368 #define FLG_HEAP_DISABLE_COALESCING 0x00200000
1369 #define FLG_ENABLE_CLOSE_EXCEPTION 0x00400000
1370 #define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
1371 #define FLG_UNKNOWN_01000000 0x01000000
1372 #define FLG_UNKNOWN_02000000 0x02000000
1373 #define FLG_UNKNOWN_04000000 0x04000000
1374 #define FLG_ENABLE_DBGPRINT_BUFFERING 0x08000000
1375 #define FLG_UNKNOWN_10000000 0x10000000
1376 #define FLG_UNKNOWN_20000000 0x20000000
1377 #define FLG_UNKNOWN_40000000 0x40000000
1378 #define FLG_UNKNOWN_80000000 0x80000000
1380 // SystemCallTimeInformation (10)
1383 // SystemLocksInformation (12)
1385 struct _SYSTEM_RESOURCE_LOCK_ENTRY
1387 ULONG ResourceAddress;
1391 ULONG ContentionCount;
1393 ULONG NumberOfSharedWaiters;
1394 ULONG NumberOfExclusiveWaiters;
1396 } SYSTEM_RESOURCE_LOCK_ENTRY, *PSYSTEM_RESOURCE_LOCK_ENTRY;
1399 struct _SYSTEM_RESOURCE_LOCK_INFO
1402 SYSTEM_RESOURCE_LOCK_ENTRY Lock [1];
1404 } SYSTEM_RESOURCE_LOCK_INFO, *PSYSTEM_RESOURCE_LOCK_INFO;
1406 // SystemInformation13 (13)
1409 // SystemInformation14 (14)
1412 // SystemInformation15 (15)
1415 // SystemInstructionEmulationInfo (19)
1417 struct _SYSTEM_VDM_INFORMATION
1419 ULONG VdmSegmentNotPresentCount;
1421 ULONG VdmESPREFIXCount;
1422 ULONG VdmCSPREFIXCount;
1423 ULONG VdmSSPREFIXCount;
1424 ULONG VdmDSPREFIXCount;
1425 ULONG VdmFSPREFIXCount;
1426 ULONG VdmGSPREFIXCount;
1427 ULONG VdmOPER32PREFIXCount;
1428 ULONG VdmADDR32PREFIXCount;
1430 ULONG VdmINSWV86Count;
1431 ULONG VdmOUTSBCount;
1432 ULONG VdmOUTSWCount;
1433 ULONG VdmPUSHFCount;
1435 ULONG VdmINTNNCount;
1438 ULONG VdmINBIMMCount;
1439 ULONG VdmINWIMMCount;
1440 ULONG VdmOUTBIMMCount;
1441 ULONG VdmOUTWIMMCount;
1446 ULONG VdmLOCKPREFIXCount;
1447 ULONG VdmREPNEPREFIXCount;
1448 ULONG VdmREPPREFIXCount;
1454 } SYSTEM_VDM_INFORMATION, *PSYSTEM_VDM_INFORMATION;
1456 // SystemInformation20 (20)
1459 // SystemPoolTagInformation (22)
1460 // found by Klaus P. Gerlicher
1461 // (implemented only in checked builds)
1463 struct _POOL_TAG_STATS
1465 ULONG AllocationCount;
1472 struct _SYSTEM_POOL_TAG_ENTRY
1475 POOL_TAG_STATS Paged;
1476 POOL_TAG_STATS NonPaged;
1478 } SYSTEM_POOL_TAG_ENTRY, * PSYSTEM_POOL_TAG_ENTRY;
1481 struct _SYSTEM_POOL_TAG_INFO
1484 SYSTEM_POOL_TAG_ENTRY PoolEntry [1];
1486 } SYSTEM_POOL_TAG_INFO, *PSYSTEM_POOL_TAG_INFO;
1488 // SystemProcessorScheduleInfo (23)
1490 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
1492 ULONG nContextSwitches;
1495 ULONG TimerResolution;
1499 } SYSTEM_PROCESSOR_SCHEDULE_INFO, *PSYSTEM_PROCESSOR_SCHEDULE_INFO;
1501 // SystemInformation25 (25)
1504 // SystemProcessorFaultCountInfo (33)
1506 struct _SYSTEM_PROCESSOR_FAULT_INFO
1508 ULONG nAlignmentFixup;
1509 ULONG nExceptionDispatches;
1510 ULONG nFloatingEmulation;
1513 } SYSTEM_PROCESSOR_FAULT_INFO, *PSYSTEM_PROCESSOR_FAULT_INFO;
1515 // SystemCrashDumpStateInfo (34)
1518 // SystemDebuggerInformation (35)
1520 struct _SYSTEM_DEBUGGER_INFO
1522 BOOLEAN KdDebuggerEnabled;
1523 BOOLEAN KdDebuggerPresent;
1525 } SYSTEM_DEBUGGER_INFO, *PSYSTEM_DEBUGGER_INFO;
1527 // SystemInformation36 (36)
1530 // SystemQuotaInformation (37)
1532 struct _SYSTEM_QUOTA_INFORMATION
1534 ULONG CmpGlobalQuota;
1535 ULONG CmpGlobalQuotaUsed;
1536 ULONG MmSizeofPagedPoolInBytes;
1538 } SYSTEM_QUOTA_INFORMATION, *PSYSTEM_QUOTA_INFORMATION;
1543 // SystemVerifierInformation (51)
1546 // SystemAddVerifier (52)
1554 // number of wait objects
1556 #define THREAD_WAIT_OBJECTS 3
1557 //#define MAXIMUM_WAIT_OBJECTS 64
1559 // key restore flags
1561 #define REG_WHOLE_HIVE_VOLATILE 1
1562 #define REG_REFRESH_HIVE 2
1564 // object type access rights
1566 #define OBJECT_TYPE_CREATE 0x0001
1567 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1569 // directory access rights
1571 #define DIRECTORY_QUERY 0x0001
1572 #define DIRECTORY_TRAVERSE 0x0002
1573 #define DIRECTORY_CREATE_OBJECT 0x0004
1574 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
1576 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
1578 // symbolic link access rights
1580 #define SYMBOLIC_LINK_QUERY 0x0001
1581 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1584 typedef struct _OBJECT_DATA_INFORMATION
1586 BOOLEAN bInheritHandle;
1587 BOOLEAN bProtectFromClose;
1588 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
1591 typedef struct _OBJECT_TYPE_INFORMATION
1593 UNICODE_STRING Name;
1594 UNICODE_STRING Type;
1596 ULONG ReferenceCount;
1597 } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
1600 // directory information
1602 typedef struct _OBJDIR_INFORMATION {
1603 UNICODE_STRING ObjectName;
1604 UNICODE_STRING ObjectTypeName; // Directory, Device ...
1606 } OBJDIR_INFORMATION, *POBJDIR_INFORMATION;
1610 Action is one of the following values:
1612 FILE_ACTION_ADDED 0x00000001
1613 FILE_ACTION_REMOVED 0x00000002
1614 FILE_ACTION_MODIFIED 0x00000003
1615 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
1616 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
1617 FILE_ACTION_ADDED_STREAM 0x00000006
1618 FILE_ACTION_REMOVED_STREAM 0x00000007
1619 FILE_ACTION_MODIFIED_STREAM 0x00000008
1624 // File System Control commands ( related to defragging )
1626 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
1628 typedef struct _BITMAP_DESCRIPTOR
1631 ULONGLONG ClustersToEndOfVol;
1632 BYTE Map[0]; // variable size
1633 } BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR;
1636 //typedef enum _TIMER_TYPE
1638 // NotificationTimer,
1639 // SynchronizationTimer
1642 typedef struct _TIMER_BASIC_INFORMATION
1644 LARGE_INTEGER TimeRemaining;
1645 BOOLEAN SignalState;
1646 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
1648 typedef enum _TIMER_INFORMATION_CLASS
1650 TimerBasicInformation
1651 } TIMER_INFORMATION_CLASS;
1654 struct _LPC_PORT_BASIC_INFORMATION
1671 } LPC_PORT_BASIC_INFORMATION, * PLPC_PORT_BASIC_INFORMATION;