1 #ifndef __INCLUDE_NTOS_ZWTYPES_H
2 #define __INCLUDE_NTOS_ZWTYPES_H
6 typedef unsigned short LANGID
;
7 typedef LANGID
*PLANGID
;
9 typedef struct _LDT_ENTRY
{
27 DWORD Default_Big
: 1;
28 DWORD Granularity
: 1;
32 } LDT_ENTRY
, *PLDT_ENTRY
, *LPLDT_ENTRY
;
34 typedef enum _THREAD_STATE
{
45 typedef enum _DEBUG_CONTROL_CODE
47 DebugGetTraceInformation
= 1,
48 DebugSetInternalBreakpoint
,
50 DebugClearSpecialCalls
,
51 DebugQuerySpecialCalls
,
56 typedef enum _KPROFILE_SOURCE
62 // file disposition values
64 #define FILE_SUPERSEDE 0x0000
65 #define FILE_OPEN 0x0001
66 #define FILE_CREATE 0x0002
67 #define FILE_OPEN_IF 0x0003
68 #define FILE_OVERWRITE 0x0004
69 #define FILE_OVERWRITE_IF 0x0005
70 #define FILE_MAXIMUM_DISPOSITION 0x0005
72 // job query / set information class
74 typedef enum _JOBOBJECTINFOCLASS
{ // Q S
75 JobObjectBasicAccountingInformation
= 1, // Y N
76 JobObjectBasicLimitInformation
, // Y Y
77 JobObjectBasicProcessIdList
, // Y N
78 JobObjectBasicUIRestrictions
, // Y Y
79 JobObjectSecurityLimitInformation
, // Y Y
80 JobObjectEndOfJobTimeInformation
, // N Y
81 JobObjectAssociateCompletionPortInformation
, // N Y
82 JobObjectBasicAndIoAccountingInformation
, // Y N
83 JobObjectExtendedLimitInformation
, // Y Y
87 // {Nt|Zw}{Query|Set}SystemInformation
88 // (GN means Gary Nebbet in "NT/W2K Native API Reference")
91 enum _SYSTEM_INFORMATION_CLASS
93 SystemInformationClassMin
= 0,
94 SystemBasicInformation
= 0, /* Q */
96 SystemProcessorInformation
= 1, /* Q */
98 SystemPerformanceInformation
= 2, /* Q */
100 SystemTimeOfDayInformation
= 3, /* Q */
102 SystemPathInformation
= 4, /* Q (checked build only) */
103 SystemNotImplemented1
= 4, /* Q (GN) */
105 SystemProcessInformation
= 5, /* Q */
106 SystemProcessesAndThreadsInformation
= 5, /* Q (GN) */
108 SystemCallCountInfoInformation
= 6, /* Q */
109 SystemCallCounts
= 6, /* Q (GN) */
111 SystemDeviceInformation
= 7, /* Q */
112 // It conflicts with symbol in ntoskrnl/io/resource.c
113 // SystemConfigurationInformation = 7, /* Q (GN) */
115 SystemProcessorPerformanceInformation
= 8, /* Q */
116 SystemProcessorTimes
= 8, /* Q (GN) */
118 SystemFlagsInformation
= 9, /* QS */
119 SystemGlobalFlag
= 9, /* QS (GN) */
121 SystemCallTimeInformation
= 10,
122 SystemNotImplemented2
= 10, /* (GN) */
124 SystemModuleInformation
= 11, /* Q */
126 SystemLocksInformation
= 12, /* Q */
127 SystemLockInformation
= 12, /* Q (GN) */
129 SystemStackTraceInformation
= 13,
130 SystemNotImplemented3
= 13, /* Q (GN) */
132 SystemPagedPoolInformation
= 14,
133 SystemNotImplemented4
= 14, /* Q (GN) */
135 SystemNonPagedPoolInformation
= 15,
136 SystemNotImplemented5
= 15, /* Q (GN) */
138 SystemHandleInformation
= 16, /* Q */
140 SystemObjectInformation
= 17, /* Q */
142 SystemPageFileInformation
= 18, /* Q */
143 SystemPagefileInformation
= 18, /* Q (GN) */
145 SystemVdmInstemulInformation
= 19, /* Q */
146 SystemInstructionEmulationCounts
= 19, /* Q (GN) */
148 SystemVdmBopInformation
= 20,
149 SystemInvalidInfoClass1
= 20, /* (GN) */
151 SystemFileCacheInformation
= 21, /* QS */
152 SystemCacheInformation
= 21, /* QS (GN) */
154 SystemPoolTagInformation
= 22, /* Q (checked build only) */
156 SystemInterruptInformation
= 23, /* Q */
157 SystemProcessorStatistics
= 23, /* Q (GN) */
159 SystemDpcBehaviourInformation
= 24, /* QS */
160 SystemDpcInformation
= 24, /* QS (GN) */
162 SystemFullMemoryInformation
= 25,
163 SystemNotImplemented6
= 25, /* (GN) */
165 SystemLoadImage
= 26, /* S (callable) (GN) */
167 SystemUnloadImage
= 27, /* S (callable) (GN) */
169 SystemTimeAdjustmentInformation
= 28, /* QS */
170 SystemTimeAdjustment
= 28, /* QS (GN) */
172 SystemSummaryMemoryInformation
= 29,
173 SystemNotImplemented7
= 29, /* (GN) */
175 SystemNextEventIdInformation
= 30,
176 SystemNotImplemented8
= 30, /* (GN) */
178 SystemEventIdsInformation
= 31,
179 SystemNotImplemented9
= 31, /* (GN) */
181 SystemCrashDumpInformation
= 32, /* Q */
183 SystemExceptionInformation
= 33, /* Q */
185 SystemCrashDumpStateInformation
= 34, /* Q */
187 SystemKernelDebuggerInformation
= 35, /* Q */
189 SystemContextSwitchInformation
= 36, /* Q */
191 SystemRegistryQuotaInformation
= 37, /* QS */
193 SystemLoadAndCallImage
= 38, /* S (GN) */
195 SystemPrioritySeparation
= 39, /* S */
197 SystemPlugPlayBusInformation
= 40,
198 SystemNotImplemented10
= 40, /* Q (GN) */
200 SystemDockInformation
= 41,
201 SystemNotImplemented11
= 41, /* Q (GN) */
203 SystemPowerInformation
= 42,
204 SystemInvalidInfoClass2
= 42, /* (GN) */
206 SystemProcessorSpeedInformation
= 43,
207 SystemInvalidInfoClass3
= 43, /* (GN) */
209 SystemCurrentTimeZoneInformation
= 44, /* QS */
210 SystemTimeZoneInformation
= 44, /* QS (GN) */
212 SystemLookasideInformation
= 45, /* Q */
214 SystemSetTimeSlipEvent
= 46, /* S (GN) */
216 SystemCreateSession
= 47, /* S (GN) */
218 SystemDeleteSession
= 48, /* S (GN) */
220 SystemInvalidInfoClass4
= 49, /* (GN) */
222 SystemRangeStartInformation
= 50, /* Q (GN) */
224 SystemVerifierInformation
= 51, /* QS (GN) */
226 SystemAddVerifier
= 52, /* S (GN) */
228 SystemSessionProcessesInformation
= 53, /* Q (GN) */
229 SystemInformationClassMax
231 } SYSTEM_INFORMATION_CLASS
;
233 // SystemBasicInformation (0)
234 // Modified by Andrew Greenwood (15th July 2003) to match Win 32 API headers
236 struct _SYSTEM_BASIC_INFORMATION
239 ULONG MaximumIncrement
;
240 ULONG PhysicalPageSize
;
241 ULONG NumberOfPhysicalPages
;
242 ULONG LowestPhysicalPage
;
243 ULONG HighestPhysicalPage
;
244 ULONG AllocationGranularity
;
245 ULONG LowestUserAddress
;
246 ULONG HighestUserAddress
;
247 KAFFINITY ActiveProcessors
;
248 CCHAR NumberProcessors
;
249 } SYSTEM_BASIC_INFORMATION
, *PSYSTEM_BASIC_INFORMATION
;
251 // SystemProcessorInformation (1)
252 // Modified by Andrew Greenwood (15th July 2003) to match Win 32 API headers
253 typedef struct _SYSTEM_PROCESSOR_INFORMATION
{
254 USHORT ProcessorArchitecture
;
255 USHORT ProcessorLevel
;
256 USHORT ProcessorRevision
;
259 } SYSTEM_PROCESSOR_INFORMATION
, *PSYSTEM_PROCESSOR_INFORMATION
;
261 // SystemPerformanceInfo (2)
262 // Modified by Andrew Greenwood (15th July 2003) to match Win 32 API headers
263 typedef struct _SYSTEM_PERFORMANCE_INFORMATION
{
264 LARGE_INTEGER IdleTime
;
265 LARGE_INTEGER ReadTransferCount
;
266 LARGE_INTEGER WriteTransferCount
;
267 LARGE_INTEGER OtherTransferCount
;
268 ULONG ReadOperationCount
;
269 ULONG WriteOperationCount
;
270 ULONG OtherOperationCount
;
271 ULONG AvailablePages
;
272 ULONG TotalCommittedPages
;
273 ULONG TotalCommitLimit
;
274 ULONG PeakCommitment
;
276 ULONG WriteCopyFaults
;
277 ULONG TransitionFaults
;
278 ULONG CacheTransitionFaults
;
279 ULONG DemandZeroFaults
;
284 ULONG PagefilePagesWritten
;
285 ULONG PagefilePageWriteIos
;
286 ULONG MappedFilePagesWritten
;
287 ULONG MappedFilePageWriteIos
;
288 ULONG PagedPoolUsage
;
289 ULONG NonPagedPoolUsage
;
290 ULONG PagedPoolAllocs
;
291 ULONG PagedPoolFrees
;
292 ULONG NonPagedPoolAllocs
;
293 ULONG NonPagedPoolFrees
;
294 ULONG TotalFreeSystemPtes
;
295 ULONG SystemCodePage
;
296 ULONG TotalSystemDriverPages
;
297 ULONG TotalSystemCodePages
;
298 ULONG SmallNonPagedLookasideListAllocateHits
;
299 ULONG SmallPagedLookasideListAllocateHits
;
301 ULONG MmSystemCachePage
;
303 ULONG SystemDriverPage
;
304 ULONG FastReadNoWait
;
306 ULONG FastReadResourceMiss
;
307 ULONG FastReadNotPossible
;
308 ULONG FastMdlReadNoWait
;
309 ULONG FastMdlReadWait
;
310 ULONG FastMdlReadResourceMiss
;
311 ULONG FastMdlReadNotPossible
;
314 ULONG MapDataNoWaitMiss
;
315 ULONG MapDataWaitMiss
;
316 ULONG PinMappedDataCount
;
319 ULONG PinReadNoWaitMiss
;
320 ULONG PinReadWaitMiss
;
321 ULONG CopyReadNoWait
;
323 ULONG CopyReadNoWaitMiss
;
324 ULONG CopyReadWaitMiss
;
327 ULONG MdlReadNoWaitMiss
;
328 ULONG MdlReadWaitMiss
;
331 ULONG LazyWritePages
;
334 ULONG ContextSwitches
;
335 ULONG FirstLevelTbFills
;
336 ULONG SecondLevelTbFills
;
338 } SYSTEM_PERFORMANCE_INFORMATION
, *PSYSTEM_PERFORMANCE_INFORMATION
;
340 // SystemProcessThreadInfo (5)
341 typedef struct _SYSTEM_THREAD_INFORMATION
351 ULONG ContextSwitches
;
353 KWAIT_REASON WaitReason
;
354 } SYSTEM_THREAD_INFORMATION
, *PSYSTEM_THREAD_INFORMATION
;
356 typedef struct SYSTEM_PROCESS_INFORMATION
358 ULONG NextEntryOffset
;
359 ULONG NumberOfThreads
;
360 LARGE_INTEGER SpareLi1
;
361 LARGE_INTEGER SpareLi2
;
362 LARGE_INTEGER SpareLi3
;
366 UNICODE_STRING ImageName
;
368 HANDLE UniqueProcessId
;
369 HANDLE InheritedFromUniqueProcessId
;
373 ULONG PeakVirtualSize
;
375 ULONG PageFaultCount
;
376 ULONG PeakWorkingSetSize
;
377 ULONG WorkingSetSize
;
378 ULONG QuotaPeakPagedPoolUsage
;
379 ULONG QuotaPagedPoolUsage
;
380 ULONG QuotaPeakNonPagedPoolUsage
;
381 ULONG QuotaNonPagedPoolUsage
;
383 ULONG PeakPagefileUsage
;
384 ULONG PrivatePageCount
;
385 } SYSTEM_PROCESS_INFORMATION
, *PSYSTEM_PROCESS_INFORMATION
;
387 // SystemModuleInformation (11)
388 typedef struct _SYSTEM_MODULE_INFORMATION_ENTRY
{
395 /* Length of module name not including the path, this
396 field contains valid value only for NTOSKRNL module */
401 } SYSTEM_MODULE_INFORMATION_ENTRY
, *PSYSTEM_MODULE_INFORMATION_ENTRY
;
403 typedef struct _SYSTEM_MODULE_INFORMATION
{
405 SYSTEM_MODULE_INFORMATION_ENTRY Module
[1];
406 } SYSTEM_MODULE_INFORMATION
, *PSYSTEM_MODULE_INFORMATION
;
408 // SystemHandleInformation (16)
411 struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO
413 USHORT UniqueProcessId
;
414 USHORT CreatorBackTraceIndex
;
415 UCHAR ObjectTypeIndex
;
416 UCHAR HandleAttributes
;
421 } SYSTEM_HANDLE_TABLE_ENTRY_INFO
, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO
;
424 struct _SYSTEM_HANDLE_INFORMATION
426 ULONG NumberOfHandles
;
427 SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles
[1];
429 } SYSTEM_HANDLE_INFORMATION
, *PSYSTEM_HANDLE_INFORMATION
;
431 // SystemObjectInformation (17)
433 struct _SYSTEM_OBJECT_TYPE_INFORMATION
435 ULONG NextEntryOffset
;
439 ULONG InvalidAttributes
;
440 GENERIC_MAPPING GenericMapping
;
441 ACCESS_MASK ValidAccessMask
;
446 } SYSTEM_OBJECT_TYPE_INFORMATION
, *PSYSTEM_OBJECT_TYPE_INFORMATION
;
449 struct _SYSTEM_OBJECT_INFORMATION
451 ULONG NextEntryOffset
;
453 ULONG CreatorProcessId
;
458 ULONG PagedPoolUsage
;
459 ULONG NonPagedPoolUsage
;
460 ULONG ExclusiveProcessId
;
461 PSECURITY_DESCRIPTOR SecurityDescriptor
;
464 } SYSTEM_OBJECT_INFORMATION
, *PSYSTEM_OBJECT_INFORMATION
;
466 // SystemPageFileInformation (18)
468 struct _SYSTEM_PAGEFILE_INFORMATION
470 ULONG NextEntryOffset
;
474 UNICODE_STRING PageFileName
;
476 } SYSTEM_PAGEFILE_INFORMATION
, *PSYSTEM_PAGEFILE_INFORMATION
;
478 // SystemCacheInformation (21)
480 struct _SYSTEM_CACHE_INFORMATION
484 ULONG PageFaultCount
;
485 ULONG MinimumWorkingSet
;
486 ULONG MaximumWorkingSet
;
487 ULONG TransitionSharedPages
;
488 ULONG TransitionSharedPagesPeak
;
491 } SYSTEM_CACHE_INFORMATION
;
493 // SystemInterruptInformation (23)
495 struct _SYSTEM_INTERRUPT_INFORMATION
497 ULONG ContextSwitches
;
501 ULONG DpcBypassCount
;
502 ULONG ApcBypassCount
;
504 } SYSTEM_INTERRUPT_INFORMATION
, *PSYSTEM_INTERRUPT_INFORMATION
;
506 // SystemDpcInformation (24)
508 struct _SYSTEM_DPC_INFORMATION
511 ULONG KiMaximumDpcQueueDepth
;
512 ULONG KiMinimumDpcRate
;
513 ULONG KiAdjustDpcThreshold
;
514 ULONG KiIdealDpcRate
;
516 } SYSTEM_DPC_INFORMATION
, *PSYSTEM_DPC_INFORMATION
;
518 // SystemLoadImage (26)
519 typedef struct _SYSTEM_LOAD_IMAGE
521 UNICODE_STRING ModuleName
;
523 PVOID SectionPointer
;
525 PVOID ExportDirectory
;
526 } SYSTEM_LOAD_IMAGE
, *PSYSTEM_LOAD_IMAGE
;
528 // SystemUnloadImage (27)
529 typedef struct _SYSTEM_UNLOAD_IMAGE
532 } SYSTEM_UNLOAD_IMAGE
, *PSYSTEM_UNLOAD_IMAGE
;
534 // SystemTimeAdjustmentInformation (28)
536 struct _SYSTEM_QUERY_TIME_ADJUSTMENT
538 ULONG TimeAdjustment
;
539 ULONG MaximumIncrement
;
540 BOOLEAN TimeSynchronization
;
542 } SYSTEM_QUERY_TIME_ADJUSTMENT
, *PSYSTEM_QUERY_TIME_ADJUSTMENT
;
545 struct _SYSTEM_SET_TIME_ADJUSTMENT
547 ULONG TimeAdjustment
;
548 BOOLEAN TimeSynchronization
;
550 } SYSTEM_SET_TIME_ADJUSTMENT
, *PSYSTEM_SET_TIME_ADJUSTMENT
;
554 typedef enum _ATOM_INFORMATION_CLASS
556 AtomBasicInformation
= 0,
557 AtomTableInformation
= 1,
558 } ATOM_INFORMATION_CLASS
;
560 typedef struct _ATOM_BASIC_INFORMATION
566 } ATOM_BASIC_INFORMATION
, *PATOM_BASIC_INFORMATION
;
568 // SystemLoadAndCallImage(38)
569 typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE
571 UNICODE_STRING ModuleName
;
572 } SYSTEM_LOAD_AND_CALL_IMAGE
, *PSYSTEM_LOAD_AND_CALL_IMAGE
;
574 // SystemRegistryQuotaInformation (37)
575 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION
{
576 ULONG RegistryQuotaAllowed
;
577 ULONG RegistryQuotaUsed
;
579 } SYSTEM_REGISTRY_QUOTA_INFORMATION
, *PSYSTEM_REGISTRY_QUOTA_INFORMATION
;
582 // SystemTimeZoneInformation (44)
584 struct _SYSTEM_TIME_ZONE_INFORMATION
587 WCHAR StandardName
[32];
590 WCHAR DaylightName
[32];
594 } SYSTEM_TIME_ZONE_INFORMATION
, * PSYSTEM_TIME_ZONE_INFORMATION
;
596 // SystemLookasideInformation (45)
598 struct _SYSTEM_LOOKASIDE_INFORMATION
602 ULONG TotalAllocates
;
603 ULONG AllocatesMisses
;
610 } SYSTEM_LOOKASIDE_INFORMATION
, * PSYSTEM_LOOKASIDE_INFORMATION
;
612 // SystemSetTimeSlipEvent (46)
614 struct _SYSTEM_SET_TIME_SLIP_EVENT
616 HANDLE TimeSlipEvent
; /* IN */
618 } SYSTEM_SET_TIME_SLIP_EVENT
, * PSYSTEM_SET_TIME_SLIP_EVENT
;
620 // SystemCreateSession (47)
621 // (available only on TSE/NT5+)
623 struct _SYSTEM_CREATE_SESSION
625 ULONG SessionId
; /* OUT */
627 } SYSTEM_CREATE_SESSION
, * PSYSTEM_CREATE_SESSION
;
629 // SystemDeleteSession (48)
630 // (available only on TSE/NT5+)
632 struct _SYSTEM_DELETE_SESSION
634 ULONG SessionId
; /* IN */
636 } SYSTEM_DELETE_SESSION
, * PSYSTEM_DELETE_SESSION
;
638 // SystemRangeStartInformation (50)
640 struct _SYSTEM_RANGE_START_INFORMATION
642 PVOID SystemRangeStart
;
644 } SYSTEM_RANGE_START_INFORMATION
, * PSYSTEM_RANGE_START_INFORMATION
;
646 // SystemSessionProcessesInformation (53)
647 // (available only on TSE/NT5+)
649 struct _SYSTEM_SESSION_PROCESSES_INFORMATION
653 PVOID Buffer
; /* same format as in SystemProcessInformation */
655 } SYSTEM_SESSION_PROCESSES_INFORMATION
, * PSYSTEM_SESSION_PROCESSES_INFORMATION
;
657 // memory information
659 typedef enum _MEMORY_INFORMATION_CLASS
{
660 MemoryBasicInformation
,
661 MemoryWorkingSetList
,
662 MemorySectionName
//,
663 //MemoryBasicVlmInformation //???
664 } MEMORY_INFORMATION_CLASS
;
666 typedef struct _MEMORY_BASIC_INFORMATION
{ // Information Class 0
668 PVOID AllocationBase
;
669 ULONG AllocationProtect
;
674 } MEMORY_BASIC_INFORMATION
, *PMEMORY_BASIC_INFORMATION
;
676 typedef struct _MEMORY_WORKING_SET_LIST
{ // Information Class 1
678 ULONG WorkingSetList
[1];
679 } MEMORY_WORKING_SET_LIST
, *PMEMORY_WORKING_SET_LIST
;
681 // Information Class 2
682 /*#define _MEMORY_SECTION_NAME_STATIC(__bufsize__) \
684 UNICODE_STRING SectionFileName; \
685 WCHAR NameBuffer[(__bufsize__)]; \
690 UNICODE_STRING SectionFileName
;
691 WCHAR NameBuffer
[ANYSIZE_ARRAY
];
692 } MEMORY_SECTION_NAME
, *PMEMORY_SECTION_NAME
;
694 // Information class 0
695 typedef struct _PROCESS_BASIC_INFORMATION
699 KAFFINITY AffinityMask
;
700 KPRIORITY BasePriority
;
701 HANDLE UniqueProcessId
;
702 HANDLE InheritedFromUniqueProcessId
;
703 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
705 // Information class 1
706 typedef struct _QUOTA_LIMITS
708 ULONG PagedPoolLimit
;
709 ULONG NonPagedPoolLimit
;
710 SIZE_T MinimumWorkingSetSize
;
711 SIZE_T MaximumWorkingSetSize
;
714 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
716 // Information class 2
717 typedef struct _IO_COUNTERS
719 LARGE_INTEGER ReadOperationCount
;
720 LARGE_INTEGER WriteOperationCount
;
721 LARGE_INTEGER OtherOperationCount
;
722 LARGE_INTEGER ReadTransferCount
;
723 LARGE_INTEGER WriteTransferCount
;
724 LARGE_INTEGER OtherTransferCount
;
725 } IO_COUNTERS
, *PIO_COUNTERS
;
727 // Information class 3
728 typedef struct _VM_COUNTERS_
730 ULONG PeakVirtualSize
;
732 ULONG PageFaultCount
;
733 ULONG PeakWorkingSetSize
;
734 ULONG WorkingSetSize
;
735 ULONG QuotaPeakPagedPoolUsage
;
736 ULONG QuotaPagedPoolUsage
;
737 ULONG QuotaPeakNonPagedPoolUsage
;
738 ULONG QuotaNonPagedPoolUsage
;
740 ULONG PeakPagefileUsage
;
741 } VM_COUNTERS
, *PVM_COUNTERS
;
743 // Information class 4
744 typedef struct _KERNEL_USER_TIMES
746 LARGE_INTEGER CreateTime
;
747 LARGE_INTEGER ExitTime
;
748 LARGE_INTEGER KernelTime
;
749 LARGE_INTEGER UserTime
;
750 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
752 // Information class 9
753 typedef struct _PROCESS_ACCESS_TOKEN
757 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
759 // Information class 14
760 typedef struct _POOLED_USAGE_AND_LIMITS_
762 ULONG PeakPagedPoolUsage
;
763 ULONG PagedPoolUsage
;
764 ULONG PagedPoolLimit
;
765 ULONG PeakNonPagedPoolUsage
;
766 ULONG NonPagedPoolUsage
;
767 ULONG NonPagedPoolLimit
;
768 ULONG PeakPagefileUsage
;
771 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
773 // Information class 15
774 typedef struct _PROCESS_WS_WATCH_INFORMATION
778 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
780 // Information class 18
781 typedef struct _PROCESS_PRIORITY_CLASS
785 } PROCESS_PRIORITY_CLASS
, *PPROCESS_PRIORITY_CLASS
;
787 // Information class 23
788 typedef struct _PROCESS_DEVICEMAP_INFORMATION
792 HANDLE DirectoryHandle
;
799 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
801 // Information class 24
802 typedef struct _PROCESS_SESSION_INFORMATION
805 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
807 // thread information
809 // incompatible with MS NT
811 typedef struct _THREAD_BASIC_INFORMATION
814 PVOID TebBaseAddress
; // PNT_TIB (GN)
816 KAFFINITY AffinityMask
;
818 KPRIORITY BasePriority
;
819 } THREAD_BASIC_INFORMATION
, *PTHREAD_BASIC_INFORMATION
;
824 typedef struct _FILE_BASIC_INFORMATION
826 LARGE_INTEGER CreationTime
;
827 LARGE_INTEGER LastAccessTime
;
828 LARGE_INTEGER LastWriteTime
;
829 LARGE_INTEGER ChangeTime
;
830 ULONG FileAttributes
;
831 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
833 typedef struct _FILE_STANDARD_INFORMATION
835 LARGE_INTEGER AllocationSize
;
836 LARGE_INTEGER EndOfFile
;
838 BOOLEAN DeletePending
;
840 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
842 typedef struct _FILE_POSITION_INFORMATION
844 LARGE_INTEGER CurrentByteOffset
;
845 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
847 typedef struct _FILE_ALIGNMENT_INFORMATION
849 ULONG AlignmentRequirement
;
850 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
852 typedef struct _FILE_DISPOSITION_INFORMATION
854 BOOLEAN DoDeleteFile
;
855 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
857 typedef struct _FILE_END_OF_FILE_INFORMATION
859 LARGE_INTEGER EndOfFile
;
860 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
862 typedef struct _FILE_NETWORK_OPEN_INFORMATION
864 LARGE_INTEGER CreationTime
;
865 LARGE_INTEGER LastAccessTime
;
866 LARGE_INTEGER LastWriteTime
;
867 LARGE_INTEGER ChangeTime
;
868 LARGE_INTEGER AllocationSize
;
869 LARGE_INTEGER EndOfFile
;
870 ULONG FileAttributes
;
871 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
873 typedef struct _FILE_FULL_EA_INFORMATION
875 ULONG NextEntryOffset
;
878 USHORT EaValueLength
;
880 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
883 typedef struct _FILE_EA_INFORMATION
{
885 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
888 typedef struct _FILE_GET_EA_INFORMATION
{
889 ULONG NextEntryOffset
;
892 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
894 typedef struct _FILE_STREAM_INFORMATION
{
895 ULONG NextEntryOffset
;
896 ULONG StreamNameLength
;
897 LARGE_INTEGER StreamSize
;
898 LARGE_INTEGER StreamAllocationSize
;
900 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
902 typedef struct _FILE_ALLOCATION_INFORMATION
{
903 LARGE_INTEGER AllocationSize
;
904 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
906 typedef struct _FILE_NAME_INFORMATION
{
907 ULONG FileNameLength
;
909 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
911 typedef struct _FILE_NAMES_INFORMATION
913 ULONG NextEntryOffset
;
915 ULONG FileNameLength
;
917 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
920 typedef struct _FILE_RENAME_INFORMATION
{
923 ULONG FileNameLength
;
925 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
928 typedef struct _FILE_INTERNAL_INFORMATION
{
929 LARGE_INTEGER IndexNumber
;
930 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
932 typedef struct _FILE_ACCESS_INFORMATION
{
933 ACCESS_MASK AccessFlags
;
934 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
937 typedef struct _FILE_MODE_INFORMATION
{
939 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
942 typedef struct _FILE_PIPE_INFORMATION
{
944 ULONG CompletionMode
;
945 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
947 typedef struct _FILE_PIPE_LOCAL_INFORMATION
{
949 ULONG NamedPipeConfiguration
;
950 ULONG MaximumInstances
;
951 ULONG CurrentInstances
;
953 ULONG ReadDataAvailable
;
955 ULONG WriteQuotaAvailable
;
956 ULONG NamedPipeState
;
958 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
960 typedef struct _FILE_PIPE_REMOTE_INFORMATION
{
961 LARGE_INTEGER CollectDataTime
;
962 ULONG MaximumCollectionCount
;
963 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
965 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
{
966 ULONG MaxMessageSize
;
967 ULONG Unknown
; /* ?? */
970 LARGE_INTEGER Timeout
;
971 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
973 typedef struct _FILE_MAILSLOT_SET_INFORMATION
{
974 LARGE_INTEGER Timeout
;
975 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
977 typedef struct _FILE_COMPRESSION_INFORMATION
{
978 LARGE_INTEGER CompressedFileSize
;
979 USHORT CompressionFormat
;
980 UCHAR CompressionUnitShift
;
984 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
986 typedef struct _FILE_COMPLETION_INFORMATION
{ // Information Class 30
987 HANDLE IoCompletionHandle
;
989 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
991 typedef struct _FILE_ALL_INFORMATION
{
992 FILE_BASIC_INFORMATION BasicInformation
;
993 FILE_STANDARD_INFORMATION StandardInformation
;
994 FILE_INTERNAL_INFORMATION InternalInformation
;
995 FILE_EA_INFORMATION EaInformation
;
996 FILE_ACCESS_INFORMATION AccessInformation
;
997 FILE_POSITION_INFORMATION PositionInformation
;
998 FILE_MODE_INFORMATION ModeInformation
;
999 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
1000 FILE_NAME_INFORMATION NameInformation
;
1001 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
1004 // file system information structures
1006 typedef struct _FILE_FS_DEVICE_INFORMATION
{
1007 DEVICE_TYPE DeviceType
;
1008 ULONG Characteristics
;
1009 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1012 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1013 TIME VolumeCreationTime
;
1014 ULONG VolumeSerialNumber
;
1015 ULONG VolumeLabelLength
;
1016 BOOLEAN SupportsObjects
;
1017 WCHAR VolumeLabel
[0];
1018 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1020 typedef struct _FILE_FS_SIZE_INFORMATION
{
1021 LARGE_INTEGER TotalAllocationUnits
;
1022 LARGE_INTEGER AvailableAllocationUnits
;
1023 ULONG SectorsPerAllocationUnit
;
1024 ULONG BytesPerSector
;
1025 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1027 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
1028 ULONG FileSystemAttributes
;
1029 LONG MaximumComponentNameLength
;
1030 ULONG FileSystemNameLength
;
1031 WCHAR FileSystemName
[0];
1032 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
1035 FileSystemAttributes is one of the following values:
1037 FILE_CASE_SENSITIVE_SEARCH 0x00000001
1038 FILE_CASE_PRESERVED_NAMES 0x00000002
1039 FILE_UNICODE_ON_DISK 0x00000004
1040 FILE_PERSISTENT_ACLS 0x00000008
1041 FILE_FILE_COMPRESSION 0x00000010
1042 FILE_VOLUME_QUOTAS 0x00000020
1043 FILE_VOLUME_IS_COMPRESSED 0x00008000
1045 typedef struct _FILE_FS_LABEL_INFORMATION
{
1046 ULONG VolumeLabelLength
;
1047 WCHAR VolumeLabel
[0];
1048 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1051 typedef struct _FILE_DIRECTORY_INFORMATION
{
1052 ULONG NextEntryOffset
;
1054 LARGE_INTEGER CreationTime
;
1055 LARGE_INTEGER LastAccessTime
;
1056 LARGE_INTEGER LastWriteTime
;
1057 LARGE_INTEGER ChangeTime
;
1058 LARGE_INTEGER EndOfFile
;
1059 LARGE_INTEGER AllocationSize
;
1060 ULONG FileAttributes
;
1061 ULONG FileNameLength
;
1063 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
1065 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
1066 ULONG NextEntryOffset
;
1068 LARGE_INTEGER CreationTime
;
1069 LARGE_INTEGER LastAccessTime
;
1070 LARGE_INTEGER LastWriteTime
;
1071 LARGE_INTEGER ChangeTime
;
1072 LARGE_INTEGER EndOfFile
;
1073 LARGE_INTEGER AllocationSize
;
1074 ULONG FileAttributes
;
1075 ULONG FileNameLength
;
1077 WCHAR FileName
[0]; // variable size
1078 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
,
1079 FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
1082 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
{
1083 ULONG NextEntryOffset
;
1085 LARGE_INTEGER CreationTime
;
1086 LARGE_INTEGER LastAccessTime
;
1087 LARGE_INTEGER LastWriteTime
;
1088 LARGE_INTEGER ChangeTime
;
1089 LARGE_INTEGER EndOfFile
;
1090 LARGE_INTEGER AllocationSize
;
1091 ULONG FileAttributes
;
1092 ULONG FileNameLength
;
1094 CHAR ShortNameLength
;
1095 WCHAR ShortName
[12]; // 8.3 name
1097 } FILE_BOTH_DIRECTORY_INFORMATION
, *PFILE_BOTH_DIRECTORY_INFORMATION
,
1098 FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
1101 NotifyFilter / CompletionFilter:
1103 FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
1104 FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
1105 FILE_NOTIFY_CHANGE_NAME 0x00000003
1106 FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
1107 FILE_NOTIFY_CHANGE_SIZE 0x00000008
1108 FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
1109 FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
1110 FILE_NOTIFY_CHANGE_CREATION 0x00000040
1111 FILE_NOTIFY_CHANGE_EA 0x00000080
1112 FILE_NOTIFY_CHANGE_SECURITY 0x00000100
1113 FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
1114 FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
1115 FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
1118 typedef struct _FILE_NOTIFY_INFORMATION
{
1119 ULONG NextEntryOffset
;
1123 } FILE_NOTIFY_INFORMATION
, *PFILE_NOTIFY_INFORMATION
;
1125 #define FSCTL_GET_VOLUME_BITMAP 0x9006F
1126 #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
1127 #define FSCTL_MOVE_FILE 0x90074
1129 /* Structure copied from ntifs.h (Must be in sync!) */
1130 #include <pshpack8.h>
1131 typedef struct _RETRIEVAL_POINTERS_BUFFER
{
1133 LARGE_INTEGER StartingVcn
;
1135 LARGE_INTEGER NextVcn
;
1138 } RETRIEVAL_POINTERS_BUFFER
, *PRETRIEVAL_POINTERS_BUFFER
;
1139 #include <poppack.h>
1141 typedef struct _SECTION_BASIC_INFORMATION
1146 } SECTION_BASIC_INFORMATION
, *PSECTION_BASIC_INFORMATION
;
1148 typedef enum _SECTION_INFORMATION_CLASS
1150 SectionBasicInformation
,
1151 SectionImageInformation
,
1152 } SECTION_INFORMATION_CLASS
;
1156 typedef enum SHUTDOWN_ACTION_TAG
{
1162 typedef enum _IO_COMPLETION_INFORMATION_CLASS
{
1163 IoCompletionBasicInformation
1164 } IO_COMPLETION_INFORMATION_CLASS
;
1166 typedef struct _IO_COMPLETION_BASIC_INFORMATION
{
1168 } IO_COMPLETION_BASIC_INFORMATION
, *PIO_COMPLETION_BASIC_INFORMATION
;
1170 #else /* __USE_W32API */
1172 #define DebugDbgLoadSymbols ((DEBUG_CONTROL_CODE)0xffffffff)
1174 #endif /* __USE_W32API */
1177 #include <ddk/ntddk.h>
1178 #endif /* __USE_W32API */
1179 #ifndef NtCurrentProcess
1180 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
1181 #endif /* NtCurrentProcess */
1182 #ifndef NtCurrentThread
1183 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
1184 #endif /* NtCurrentThread */
1188 extern ULONG EXPORTED NtBuildNumber
;
1190 extern ULONG IMPORTED NtBuildNumber
;
1193 /* Microsoft-style declarations */
1195 extern EXPORTED ULONG NtBuildNumber
;
1197 extern IMPORTED ULONG NtBuildNumber
;
1199 #endif /* __GNUC__ */
1202 // event access mask
1204 #define EVENT_READ_ACCESS 1
1205 #define EVENT_WRITE_ACCESS 2
1207 //process query / set information class
1209 #define ProcessBasicInformation 0
1210 #define ProcessQuotaLimits 1
1211 #define ProcessIoCounters 2
1212 #define ProcessVmCounters 3
1213 #define ProcessTimes 4
1214 #define ProcessBasePriority 5
1215 #define ProcessRaisePriority 6
1216 #define ProcessDebugPort 7
1217 #define ProcessExceptionPort 8
1218 #define ProcessAccessToken 9
1219 #define ProcessLdtInformation 10
1220 #define ProcessLdtSize 11
1221 #define ProcessDefaultHardErrorMode 12
1222 #define ProcessIoPortHandlers 13
1223 #define ProcessPooledUsageAndLimits 14
1224 #define ProcessWorkingSetWatch 15
1225 #define ProcessUserModeIOPL 16
1226 #define ProcessEnableAlignmentFaultFixup 17
1227 #define ProcessPriorityClass 18
1228 #define ProcessWx86Information 19
1229 #define ProcessHandleCount 20
1230 #define ProcessAffinityMask 21
1231 #define ProcessPriorityBoost 22
1232 #define ProcessDeviceMap 23
1233 #define ProcessSessionInformation 24
1234 #define ProcessForegroundInformation 25
1235 #define ProcessWow64Information 26
1236 #define ProcessImageFileName 27
1237 #define ProcessLUIDDeviceMapsEnabled 28
1238 #define ProcessBreakOnTermination 29
1239 #define ProcessDebugObjectHandle 30
1240 #define ProcessDebugFlags 31
1241 #define ProcessHandleTracing 32
1242 #define ProcessUnknown33 33
1243 #define ProcessUnknown34 34
1244 #define ProcessUnknown35 35
1245 #define ProcessCookie 36
1246 #define MaxProcessInfoClass 36
1249 * thread query / set information class
1251 #define ThreadBasicInformation 0
1252 #define ThreadTimes 1
1253 #define ThreadPriority 2
1254 #define ThreadBasePriority 3
1255 #define ThreadAffinityMask 4
1256 #define ThreadImpersonationToken 5
1257 #define ThreadDescriptorTableEntry 6
1258 #define ThreadEnableAlignmentFaultFixup 7
1259 #define ThreadEventPair 8
1260 #define ThreadQuerySetWin32StartAddress 9
1261 #define ThreadZeroTlsCell 10
1262 #define ThreadPerformanceCount 11
1263 #define ThreadAmILastThread 12
1264 #define ThreadIdealProcessor 13
1265 #define ThreadPriorityBoost 14
1266 #define ThreadSetTlsArrayAddress 15
1267 #define ThreadIsIoPending 16
1268 #define ThreadHideFromDebugger 17
1269 #define MaxThreadInfoClass 17
1272 typedef struct _ATOM_TABLE_INFORMATION
1274 ULONG NumberOfAtoms
;
1276 } ATOM_TABLE_INFORMATION
, *PATOM_TABLE_INFORMATION
;
1279 // mutant information
1281 typedef enum _MUTANT_INFORMATION_CLASS
1283 MutantBasicInformation
= 0
1284 } MUTANT_INFORMATION_CLASS
;
1286 typedef struct _MUTANT_BASIC_INFORMATION
1289 BOOLEAN OwnedByCaller
;
1290 BOOLEAN AbandonedState
;
1291 } MUTANT_BASIC_INFORMATION
, *PMUTANT_BASIC_INFORMATION
;
1294 // SystemTimeOfDayInformation (3)
1296 struct _SYSTEM_TIMEOFDAY_INFORMATION
1298 LARGE_INTEGER BootTime
;
1299 LARGE_INTEGER CurrentTime
;
1300 LARGE_INTEGER TimeZoneBias
;
1303 } SYSTEM_TIMEOFDAY_INFORMATION
, *PSYSTEM_TIMEOFDAY_INFORMATION
;
1305 // SystemPathInformation (4)
1308 struct _SYSTEM_PATH_INFORMATION
1312 } SYSTEM_PATH_INFORMATION
, * PSYSTEM_PATH_INFORMATION
;
1314 // SystemProcessInformation (5)
1316 #ifndef __USE_W32API
1318 typedef struct _SYSTEM_THREADS
{
1319 LARGE_INTEGER KernelTime
;
1320 LARGE_INTEGER UserTime
;
1321 LARGE_INTEGER CreateTime
;
1326 KPRIORITY BasePriority
;
1327 ULONG ContextSwitchCount
;
1329 KWAIT_REASON WaitReason
;
1330 } SYSTEM_THREADS
, *PSYSTEM_THREADS
;
1332 #endif /* __USE_W32API */
1334 typedef struct _SYSTEM_PROCESSES_NT4
1336 SIZE_T NextEntryDelta
;
1339 LARGE_INTEGER CreateTime
;
1340 LARGE_INTEGER UserTime
;
1341 LARGE_INTEGER KernelTime
;
1342 UNICODE_STRING ProcessName
;
1343 KPRIORITY BasePriority
;
1345 HANDLE InheritedFromProcessId
;
1348 VM_COUNTERS VmCounters
;
1349 SYSTEM_THREADS Threads
[ANYSIZE_ARRAY
];
1350 } SYSTEM_PROCESSES_NT4
, *PSYSTEM_PROCESSES_NT4
;
1352 typedef struct _SYSTEM_PROCESSES_NT5
1354 SIZE_T NextEntryDelta
;
1357 LARGE_INTEGER CreateTime
;
1358 LARGE_INTEGER UserTime
;
1359 LARGE_INTEGER KernelTime
;
1360 UNICODE_STRING ProcessName
;
1361 KPRIORITY BasePriority
;
1363 HANDLE InheritedFromProcessId
;
1366 VM_COUNTERS VmCounters
;
1367 IO_COUNTERS IoCounters
;
1368 SYSTEM_THREADS Threads
[ANYSIZE_ARRAY
];
1369 } SYSTEM_PROCESSES_NT5
, *PSYSTEM_PROCESSES_NT5
;
1371 #ifndef __USE_W32API
1373 /* Not sure. What version are we emulating? */
1374 typedef SYSTEM_PROCESSES_NT5 SYSTEM_PROCESSES
, *PSYSTEM_PROCESSES
;
1376 #endif /* __USE_W32API */
1378 // SystemCallCountInformation (6)
1380 struct _SYSTEM_SDT_INFORMATION
1383 ULONG NumberOfSystemServiceTables
;
1384 ULONG NumberOfServices
[1];
1385 ULONG ServiceCounters
[1];
1387 } SYSTEM_SDT_INFORMATION
, *PSYSTEM_SDT_INFORMATION
;
1389 // SystemDeviceInformation (7)
1391 struct _SYSTEM_DEVICE_INFORMATION
1393 ULONG NumberOfDisks
;
1394 ULONG NumberOfFloppies
;
1395 ULONG NumberOfCdRoms
;
1396 ULONG NumberOfTapes
;
1397 ULONG NumberOfSerialPorts
;
1398 ULONG NumberOfParallelPorts
;
1399 } SYSTEM_DEVICE_INFORMATION
, *PSYSTEM_DEVICE_INFORMATION
;
1401 // SystemProcessorPerformanceInformation (8)
1402 // (one per processor in the system)
1404 struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
1406 LARGE_INTEGER IdleTime
;
1407 LARGE_INTEGER KernelTime
;
1408 LARGE_INTEGER UserTime
;
1409 LARGE_INTEGER DpcTime
;
1410 LARGE_INTEGER InterruptTime
;
1411 ULONG InterruptCount
;
1414 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
;
1416 // SystemFlagsInformation (9)
1418 struct _SYSTEM_FLAGS_INFORMATION
1422 } SYSTEM_FLAGS_INFORMATION
, * PSYSTEM_FLAGS_INFORMATION
;
1424 #define FLG_STOP_ON_EXCEPTION 0x00000001
1425 #define FLG_SHOW_LDR_SNAPS 0x00000002
1426 #define FLG_DEBUG_INITIAL_COMMAND 0x00000004
1427 #define FLG_STOP_ON_HANG_GUI 0x00000008
1428 #define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
1429 #define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
1430 #define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
1431 #define FLG_HEAP_VALIDATE_ALL 0x00000080
1432 #define FLG_POOL_ENABLE_TAIL_CHECK 0x00000100
1433 #define FLG_POOL_ENABLE_FREE_CHECK 0x00000200
1434 #define FLG_POOL_ENABLE_TAGGING 0x00000400
1435 #define FLG_HEAP_ENABLE_TAGGING 0x00000800
1436 #define FLG_USER_STACK_TRACE_DB 0x00001000
1437 #define FLG_KERNEL_STACK_TRACE_DB 0x00002000
1438 #define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
1439 #define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
1440 #define FLG_IGNORE_DEBUG_PRIV 0x00010000
1441 #define FLG_ENABLE_CSRDEBUG 0x00020000
1442 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
1443 #define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
1444 #define FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
1445 #define FLG_HEAP_DISABLE_COALESCING 0x00200000
1446 #define FLG_ENABLE_CLOSE_EXCEPTION 0x00400000
1447 #define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
1448 #define FLG_UNKNOWN_01000000 0x01000000
1449 #define FLG_UNKNOWN_02000000 0x02000000
1450 #define FLG_UNKNOWN_04000000 0x04000000
1451 #define FLG_ENABLE_DBGPRINT_BUFFERING 0x08000000
1452 #define FLG_UNKNOWN_10000000 0x10000000
1453 #define FLG_UNKNOWN_20000000 0x20000000
1454 #define FLG_UNKNOWN_40000000 0x40000000
1455 #define FLG_UNKNOWN_80000000 0x80000000
1457 // SystemCallTimeInformation (10)
1460 // SystemLocksInformation (12)
1462 struct _SYSTEM_RESOURCE_LOCK_ENTRY
1464 ULONG ResourceAddress
;
1468 ULONG ContentionCount
;
1470 ULONG NumberOfSharedWaiters
;
1471 ULONG NumberOfExclusiveWaiters
;
1473 } SYSTEM_RESOURCE_LOCK_ENTRY
, *PSYSTEM_RESOURCE_LOCK_ENTRY
;
1476 struct _SYSTEM_RESOURCE_LOCK_INFO
1479 SYSTEM_RESOURCE_LOCK_ENTRY Lock
[1];
1481 } SYSTEM_RESOURCE_LOCK_INFO
, *PSYSTEM_RESOURCE_LOCK_INFO
;
1483 // SystemInformation13 (13)
1486 // SystemInformation14 (14)
1489 // SystemInformation15 (15)
1492 // SystemInstructionEmulationInfo (19)
1494 struct _SYSTEM_VDM_INFORMATION
1496 ULONG VdmSegmentNotPresentCount
;
1498 ULONG VdmESPREFIXCount
;
1499 ULONG VdmCSPREFIXCount
;
1500 ULONG VdmSSPREFIXCount
;
1501 ULONG VdmDSPREFIXCount
;
1502 ULONG VdmFSPREFIXCount
;
1503 ULONG VdmGSPREFIXCount
;
1504 ULONG VdmOPER32PREFIXCount
;
1505 ULONG VdmADDR32PREFIXCount
;
1507 ULONG VdmINSWV86Count
;
1508 ULONG VdmOUTSBCount
;
1509 ULONG VdmOUTSWCount
;
1510 ULONG VdmPUSHFCount
;
1512 ULONG VdmINTNNCount
;
1515 ULONG VdmINBIMMCount
;
1516 ULONG VdmINWIMMCount
;
1517 ULONG VdmOUTBIMMCount
;
1518 ULONG VdmOUTWIMMCount
;
1523 ULONG VdmLOCKPREFIXCount
;
1524 ULONG VdmREPNEPREFIXCount
;
1525 ULONG VdmREPPREFIXCount
;
1531 } SYSTEM_VDM_INFORMATION
, *PSYSTEM_VDM_INFORMATION
;
1533 // SystemInformation20 (20)
1536 // SystemPoolTagInformation (22)
1537 // found by Klaus P. Gerlicher
1538 // (implemented only in checked builds)
1540 struct _POOL_TAG_STATS
1542 ULONG AllocationCount
;
1549 struct _SYSTEM_POOL_TAG_ENTRY
1552 POOL_TAG_STATS Paged
;
1553 POOL_TAG_STATS NonPaged
;
1555 } SYSTEM_POOL_TAG_ENTRY
, * PSYSTEM_POOL_TAG_ENTRY
;
1558 struct _SYSTEM_POOL_TAG_INFO
1561 SYSTEM_POOL_TAG_ENTRY PoolEntry
[1];
1563 } SYSTEM_POOL_TAG_INFO
, *PSYSTEM_POOL_TAG_INFO
;
1565 // SystemProcessorScheduleInfo (23)
1567 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
1569 ULONG nContextSwitches
;
1572 ULONG TimerResolution
;
1576 } SYSTEM_PROCESSOR_SCHEDULE_INFO
, *PSYSTEM_PROCESSOR_SCHEDULE_INFO
;
1578 // SystemInformation25 (25)
1581 // SystemProcessorFaultCountInfo (33)
1583 struct _SYSTEM_PROCESSOR_FAULT_INFO
1585 ULONG nAlignmentFixup
;
1586 ULONG nExceptionDispatches
;
1587 ULONG nFloatingEmulation
;
1590 } SYSTEM_PROCESSOR_FAULT_INFO
, *PSYSTEM_PROCESSOR_FAULT_INFO
;
1592 // SystemCrashDumpStateInfo (34)
1595 // SystemDebuggerInformation (35)
1597 struct _SYSTEM_DEBUGGER_INFO
1599 BOOLEAN KdDebuggerEnabled
;
1600 BOOLEAN KdDebuggerPresent
;
1602 } SYSTEM_DEBUGGER_INFO
, *PSYSTEM_DEBUGGER_INFO
;
1604 // SystemInformation36 (36)
1607 // SystemQuotaInformation (37)
1609 struct _SYSTEM_QUOTA_INFORMATION
1611 ULONG CmpGlobalQuota
;
1612 ULONG CmpGlobalQuotaUsed
;
1613 ULONG MmSizeofPagedPoolInBytes
;
1615 } SYSTEM_QUOTA_INFORMATION
, *PSYSTEM_QUOTA_INFORMATION
;
1620 // SystemVerifierInformation (51)
1623 // SystemAddVerifier (52)
1631 // number of wait objects
1633 #define THREAD_WAIT_OBJECTS 3
1634 //#define MAXIMUM_WAIT_OBJECTS 64
1636 // object type access rights
1638 #define OBJECT_TYPE_CREATE 0x0001
1639 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1641 // directory access rights
1643 #ifndef __USE_W32API
1644 #define DIRECTORY_QUERY 0x0001
1645 #define DIRECTORY_TRAVERSE 0x0002
1646 #define DIRECTORY_CREATE_OBJECT 0x0004
1647 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
1650 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
1652 // symbolic link access rights
1654 #define SYMBOLIC_LINK_QUERY 0x0001
1655 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1658 /* object information class */
1660 #ifndef __USE_W32API
1662 typedef enum _OBJECT_INFORMATION_CLASS
1664 ObjectBasicInformation
,
1665 ObjectNameInformation
,
1666 ObjectTypeInformation
,
1667 ObjectAllTypesInformation
,
1668 ObjectHandleInformation
1669 } OBJECT_INFORMATION_CLASS
;
1672 // directory information
1674 typedef struct _OBJECT_DIRECTORY_INFORMATION
1676 UNICODE_STRING ObjectName
;
1677 UNICODE_STRING ObjectTypeName
; // Directory, Device ...
1678 } OBJECT_DIRECTORY_INFORMATION
, *POBJECT_DIRECTORY_INFORMATION
;
1681 /* system battery state */
1682 typedef struct _SYSTEM_BATTERY_STATE
{
1684 BOOLEAN BatteryPresent
;
1686 BOOLEAN Discharging
;
1689 ULONG RemainingCapacity
;
1691 ULONG EstimatedTime
;
1692 ULONG DefaultAlert1
;
1693 ULONG DefaultAlert2
;
1694 } SYSTEM_BATTERY_STATE
, *PSYSTEM_BATTERY_STATE
;
1697 // power information levels
1698 typedef enum _POWER_INFORMATION_LEVEL
{
1699 SystemPowerPolicyAc
,
1700 SystemPowerPolicyDc
,
1701 VerifySystemPolicyAc
,
1702 VerifySystemPolicyDc
,
1703 SystemPowerCapabilities
,
1705 SystemPowerStateHandler
,
1706 ProcessorStateHandler
,
1707 SystemPowerPolicyCurrent
,
1708 AdministratorPowerPolicy
,
1709 SystemReserveHiberFile
,
1710 ProcessorInformation
,
1711 SystemPowerInformationData
1712 } POWER_INFORMATION_LEVEL
;
1714 #endif /* __USE_W32API */
1717 Action is one of the following values:
1719 FILE_ACTION_ADDED 0x00000001
1720 FILE_ACTION_REMOVED 0x00000002
1721 FILE_ACTION_MODIFIED 0x00000003
1722 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
1723 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
1724 FILE_ACTION_ADDED_STREAM 0x00000006
1725 FILE_ACTION_REMOVED_STREAM 0x00000007
1726 FILE_ACTION_MODIFIED_STREAM 0x00000008
1731 // File System Control commands ( related to defragging )
1733 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
1735 //typedef enum _TIMER_TYPE
1737 // NotificationTimer,
1738 // SynchronizationTimer
1741 typedef struct _TIMER_BASIC_INFORMATION
1743 LARGE_INTEGER TimeRemaining
;
1744 BOOLEAN SignalState
;
1745 } TIMER_BASIC_INFORMATION
, *PTIMER_BASIC_INFORMATION
;
1747 typedef enum _TIMER_INFORMATION_CLASS
1749 TimerBasicInformation
1750 } TIMER_INFORMATION_CLASS
;
1752 #ifndef __USE_W32API
1756 UNUSED_MSG_TYPE
= 0x0, /* ReactOS */
1757 LPC_NEW_MESSAGE
= 0x0, /* NT */
1761 LPC_LOST_REPLY
= 0x4,
1762 LPC_PORT_CLOSED
= 0x5,
1763 LPC_CLIENT_DIED
= 0x6,
1764 LPC_EXCEPTION
= 0x7,
1765 LPC_DEBUG_EVENT
= 0x8,
1766 LPC_ERROR_EVENT
= 0x9,
1767 LPC_CONNECTION_REQUEST
= 0xa,
1768 LPC_CONNECTION_REFUSED
= 0xb /* ReactOS only */
1770 } LPC_TYPE
, *PLPC_TYPE
;
1772 typedef struct _LPC_SECTION_WRITE
1775 HANDLE SectionHandle
;
1776 ULONG SectionOffset
;
1779 PVOID TargetViewBase
;
1780 } LPC_SECTION_WRITE
, *PLPC_SECTION_WRITE
;
1782 typedef struct _LPC_SECTION_READ
1787 } LPC_SECTION_READ
, *PLPC_SECTION_READ
;
1789 typedef struct _LPC_MESSAGE
1794 USHORT VirtualRangesOffset
;
1797 ULONG SectionSize
; /* CallbackID */
1798 } LPC_MESSAGE
, *PLPC_MESSAGE
;
1800 #define LPC_MESSAGE_BASE_SIZE sizeof(LPC_MESSAGE)
1802 #define PORT_MESSAGE_TYPE(m) (LPC_TYPE)((m).Header.MessageType)
1804 #define PORT_MAX_DATA_LENGTH 0x104
1805 #define PORT_MAX_MESSAGE_LENGTH 0x148
1807 #endif /* __USE_W32API */
1809 #define MAX_MESSAGE_DATA (0x130)
1811 typedef struct _LPC_MAX_MESSAGE
1814 BYTE Data
[MAX_MESSAGE_DATA
];
1815 } LPC_MAX_MESSAGE
, *PLPC_MAX_MESSAGE
;
1817 typedef struct _LPC_PORT_BASIC_INFORMATION
1834 } LPC_PORT_BASIC_INFORMATION
, * PLPC_PORT_BASIC_INFORMATION
;
1837 typedef struct _KINTERRUPT
1840 KAFFINITY ProcessorEnableMask
;
1841 KSPIN_LOCK SpinLock
;
1842 PKSPIN_LOCK ActualLock
;
1844 BOOLEAN FloatingSave
;
1845 CHAR ProcessorNumber
;
1846 PKSERVICE_ROUTINE ServiceRoutine
;
1847 PVOID ServiceContext
;
1851 KINTERRUPT_MODE InterruptMode
;
1854 #ifndef __USE_W32API
1856 typedef struct _KINTERRUPT
*PKINTERRUPT
;
1858 typedef VOID STDCALL_FUNC
1859 (*PTIMER_APC_ROUTINE
)(
1860 IN PVOID TimerContext
,
1861 IN ULONG TimerLowValue
,
1862 IN LONG TimerHighValue
);
1864 #endif /* __USE_W32API */
1866 /* BEGIN REACTOS ONLY */
1868 typedef enum _TRAVERSE_METHOD
{
1869 TraverseMethodPreorder
,
1870 TraverseMethodInorder
,
1871 TraverseMethodPostorder
1874 typedef LONG STDCALL_FUNC
1875 (*PKEY_COMPARATOR
)(IN PVOID Key1
,
1878 typedef BOOLEAN STDCALL_FUNC
1879 (*PTRAVERSE_ROUTINE
)(IN PVOID Context
,
1883 struct _BINARY_TREE_NODE
;
1885 typedef struct _BINARY_TREE
1887 struct _BINARY_TREE_NODE
* RootNode
;
1888 PKEY_COMPARATOR Compare
;
1889 BOOLEAN UseNonPagedPool
;
1891 NPAGED_LOOKASIDE_LIST NonPaged
;
1892 PAGED_LOOKASIDE_LIST Paged
;
1895 KSPIN_LOCK NonPaged
;
1898 } BINARY_TREE
, *PBINARY_TREE
;
1901 struct _SPLAY_TREE_NODE
;
1903 typedef struct _SPLAY_TREE
1905 struct _SPLAY_TREE_NODE
* RootNode
;
1906 PKEY_COMPARATOR Compare
;
1908 BOOLEAN UseNonPagedPool
;
1910 NPAGED_LOOKASIDE_LIST NonPaged
;
1911 PAGED_LOOKASIDE_LIST Paged
;
1914 KSPIN_LOCK NonPaged
;
1918 } SPLAY_TREE
, *PSPLAY_TREE
;
1921 typedef struct _HASH_TABLE
1923 // Size of hash table in number of bits
1924 ULONG HashTableSize
;
1926 // Use non-paged pool memory?
1927 BOOLEAN UseNonPagedPool
;
1929 // Lock for this structure
1931 KSPIN_LOCK NonPaged
;
1935 // Pointer to array of hash buckets with splay trees
1936 PSPLAY_TREE HashTrees
;
1937 } HASH_TABLE
, *PHASH_TABLE
;
1940 /* END REACTOS ONLY */