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 _DEBUG_CONTROL_CODE
36 DebugGetTraceInformation
= 1,
37 DebugSetInternalBreakpoint
,
39 DebugClearSpecialCalls
,
40 DebugQuerySpecialCalls
,
45 typedef enum _KPROFILE_SOURCE
51 // file disposition values
53 #define FILE_SUPERSEDE 0x0000
54 #define FILE_OPEN 0x0001
55 #define FILE_CREATE 0x0002
56 #define FILE_OPEN_IF 0x0003
57 #define FILE_OVERWRITE 0x0004
58 #define FILE_OVERWRITE_IF 0x0005
59 #define FILE_MAXIMUM_DISPOSITION 0x0005
61 // job query / set information class
63 typedef enum _JOBOBJECTINFOCLASS
{ // Q S
64 JobObjectBasicAccountingInformation
= 1, // Y N
65 JobObjectBasicLimitInformation
, // Y Y
66 JobObjectBasicProcessIdList
, // Y N
67 JobObjectBasicUIRestrictions
, // Y Y
68 JobObjectSecurityLimitInformation
, // Y Y
69 JobObjectEndOfJobTimeInformation
, // N Y
70 JobObjectAssociateCompletionPortInformation
, // N Y
71 JobObjectBasicAndIoAccountingInformation
, // Y N
72 JobObjectExtendedLimitInformation
, // Y Y
76 // {Nt|Zw}{Query|Set}SystemInformation
77 // (GN means Gary Nebbet in "NT/W2K Native API Reference")
80 enum _SYSTEM_INFORMATION_CLASS
82 SystemInformationClassMin
= 0,
83 SystemBasicInformation
= 0, /* Q */
85 SystemProcessorInformation
= 1, /* Q */
87 SystemPerformanceInformation
= 2, /* Q */
89 SystemTimeOfDayInformation
= 3, /* Q */
91 SystemPathInformation
= 4, /* Q (checked build only) */
92 SystemNotImplemented1
= 4, /* Q (GN) */
94 SystemProcessInformation
= 5, /* Q */
95 SystemProcessesAndThreadsInformation
= 5, /* Q (GN) */
97 SystemCallCountInfoInformation
= 6, /* Q */
98 SystemCallCounts
= 6, /* Q (GN) */
100 SystemDeviceInformation
= 7, /* Q */
101 // It conflicts with symbol in ntoskrnl/io/resource.c
102 // SystemConfigurationInformation = 7, /* Q (GN) */
104 SystemProcessorPerformanceInformation
= 8, /* Q */
105 SystemProcessorTimes
= 8, /* Q (GN) */
107 SystemFlagsInformation
= 9, /* QS */
108 SystemGlobalFlag
= 9, /* QS (GN) */
110 SystemCallTimeInformation
= 10,
111 SystemNotImplemented2
= 10, /* (GN) */
113 SystemModuleInformation
= 11, /* Q */
115 SystemLocksInformation
= 12, /* Q */
116 SystemLockInformation
= 12, /* Q (GN) */
118 SystemStackTraceInformation
= 13,
119 SystemNotImplemented3
= 13, /* Q (GN) */
121 SystemPagedPoolInformation
= 14,
122 SystemNotImplemented4
= 14, /* Q (GN) */
124 SystemNonPagedPoolInformation
= 15,
125 SystemNotImplemented5
= 15, /* Q (GN) */
127 SystemHandleInformation
= 16, /* Q */
129 SystemObjectInformation
= 17, /* Q */
131 SystemPageFileInformation
= 18, /* Q */
132 SystemPagefileInformation
= 18, /* Q (GN) */
134 SystemVdmInstemulInformation
= 19, /* Q */
135 SystemInstructionEmulationCounts
= 19, /* Q (GN) */
137 SystemVdmBopInformation
= 20,
138 SystemInvalidInfoClass1
= 20, /* (GN) */
140 SystemFileCacheInformation
= 21, /* QS */
141 SystemCacheInformation
= 21, /* QS (GN) */
143 SystemPoolTagInformation
= 22, /* Q (checked build only) */
145 SystemInterruptInformation
= 23, /* Q */
146 SystemProcessorStatistics
= 23, /* Q (GN) */
148 SystemDpcBehaviourInformation
= 24, /* QS */
149 SystemDpcInformation
= 24, /* QS (GN) */
151 SystemFullMemoryInformation
= 25,
152 SystemNotImplemented6
= 25, /* (GN) */
154 SystemLoadImage
= 26, /* S (callable) (GN) */
156 SystemUnloadImage
= 27, /* S (callable) (GN) */
158 SystemTimeAdjustmentInformation
= 28, /* QS */
159 SystemTimeAdjustment
= 28, /* QS (GN) */
161 SystemSummaryMemoryInformation
= 29,
162 SystemNotImplemented7
= 29, /* (GN) */
164 SystemNextEventIdInformation
= 30,
165 SystemNotImplemented8
= 30, /* (GN) */
167 SystemEventIdsInformation
= 31,
168 SystemNotImplemented9
= 31, /* (GN) */
170 SystemCrashDumpInformation
= 32, /* Q */
172 SystemExceptionInformation
= 33, /* Q */
174 SystemCrashDumpStateInformation
= 34, /* Q */
176 SystemKernelDebuggerInformation
= 35, /* Q */
178 SystemContextSwitchInformation
= 36, /* Q */
180 SystemRegistryQuotaInformation
= 37, /* QS */
182 SystemLoadAndCallImage
= 38, /* S (GN) */
184 SystemPrioritySeparation
= 39, /* S */
186 SystemPlugPlayBusInformation
= 40,
187 SystemNotImplemented10
= 40, /* Q (GN) */
189 SystemDockInformation
= 41,
190 SystemNotImplemented11
= 41, /* Q (GN) */
192 SystemPowerInformation
= 42,
193 SystemInvalidInfoClass2
= 42, /* (GN) */
195 SystemProcessorSpeedInformation
= 43,
196 SystemInvalidInfoClass3
= 43, /* (GN) */
198 SystemCurrentTimeZoneInformation
= 44, /* QS */
199 SystemTimeZoneInformation
= 44, /* QS (GN) */
201 SystemLookasideInformation
= 45, /* Q */
203 SystemSetTimeSlipEvent
= 46, /* S (GN) */
205 SystemCreateSession
= 47, /* S (GN) */
207 SystemDeleteSession
= 48, /* S (GN) */
209 SystemInvalidInfoClass4
= 49, /* (GN) */
211 SystemRangeStartInformation
= 50, /* Q (GN) */
213 SystemVerifierInformation
= 51, /* QS (GN) */
215 SystemAddVerifier
= 52, /* S (GN) */
217 SystemSessionProcessesInformation
= 53, /* Q (GN) */
218 SystemInformationClassMax
220 } SYSTEM_INFORMATION_CLASS
;
222 // SystemBasicInformation (0)
223 // Modified by Andrew Greenwood (15th July 2003) to match Win 32 API headers
225 struct _SYSTEM_BASIC_INFORMATION
228 ULONG MaximumIncrement
;
229 ULONG PhysicalPageSize
;
230 ULONG NumberOfPhysicalPages
;
231 ULONG LowestPhysicalPage
;
232 ULONG HighestPhysicalPage
;
233 ULONG AllocationGranularity
;
234 ULONG LowestUserAddress
;
235 ULONG HighestUserAddress
;
236 KAFFINITY ActiveProcessors
;
237 CCHAR NumberProcessors
;
238 } SYSTEM_BASIC_INFORMATION
, *PSYSTEM_BASIC_INFORMATION
;
240 // SystemProcessorInformation (1)
241 // Modified by Andrew Greenwood (15th July 2003) to match Win 32 API headers
242 typedef struct _SYSTEM_PROCESSOR_INFORMATION
{
243 USHORT ProcessorArchitecture
;
244 USHORT ProcessorLevel
;
245 USHORT ProcessorRevision
;
248 } SYSTEM_PROCESSOR_INFORMATION
, *PSYSTEM_PROCESSOR_INFORMATION
;
250 // SystemPerformanceInfo (2)
251 // Modified by Andrew Greenwood (15th July 2003) to match Win 32 API headers
252 typedef struct _SYSTEM_PERFORMANCE_INFORMATION
{
253 LARGE_INTEGER IdleTime
;
254 LARGE_INTEGER ReadTransferCount
;
255 LARGE_INTEGER WriteTransferCount
;
256 LARGE_INTEGER OtherTransferCount
;
257 ULONG ReadOperationCount
;
258 ULONG WriteOperationCount
;
259 ULONG OtherOperationCount
;
260 ULONG AvailablePages
;
261 ULONG TotalCommittedPages
;
262 ULONG TotalCommitLimit
;
263 ULONG PeakCommitment
;
265 ULONG WriteCopyFaults
;
266 ULONG TransitionFaults
;
267 ULONG CacheTransitionFaults
;
268 ULONG DemandZeroFaults
;
273 ULONG PagefilePagesWritten
;
274 ULONG PagefilePageWriteIos
;
275 ULONG MappedFilePagesWritten
;
276 ULONG MappedFilePageWriteIos
;
277 ULONG PagedPoolUsage
;
278 ULONG NonPagedPoolUsage
;
279 ULONG PagedPoolAllocs
;
280 ULONG PagedPoolFrees
;
281 ULONG NonPagedPoolAllocs
;
282 ULONG NonPagedPoolFrees
;
283 ULONG TotalFreeSystemPtes
;
284 ULONG SystemCodePage
;
285 ULONG TotalSystemDriverPages
;
286 ULONG TotalSystemCodePages
;
287 ULONG SmallNonPagedLookasideListAllocateHits
;
288 ULONG SmallPagedLookasideListAllocateHits
;
290 ULONG MmSystemCachePage
;
292 ULONG SystemDriverPage
;
293 ULONG FastReadNoWait
;
295 ULONG FastReadResourceMiss
;
296 ULONG FastReadNotPossible
;
297 ULONG FastMdlReadNoWait
;
298 ULONG FastMdlReadWait
;
299 ULONG FastMdlReadResourceMiss
;
300 ULONG FastMdlReadNotPossible
;
303 ULONG MapDataNoWaitMiss
;
304 ULONG MapDataWaitMiss
;
305 ULONG PinMappedDataCount
;
308 ULONG PinReadNoWaitMiss
;
309 ULONG PinReadWaitMiss
;
310 ULONG CopyReadNoWait
;
312 ULONG CopyReadNoWaitMiss
;
313 ULONG CopyReadWaitMiss
;
316 ULONG MdlReadNoWaitMiss
;
317 ULONG MdlReadWaitMiss
;
320 ULONG LazyWritePages
;
323 ULONG ContextSwitches
;
324 ULONG FirstLevelTbFills
;
325 ULONG SecondLevelTbFills
;
327 } SYSTEM_PERFORMANCE_INFORMATION
, *PSYSTEM_PERFORMANCE_INFORMATION
;
329 // SystemProcessThreadInfo (5)
330 typedef struct _SYSTEM_THREAD_INFORMATION
340 ULONG ContextSwitches
;
342 KWAIT_REASON WaitReason
;
343 } SYSTEM_THREAD_INFORMATION
, *PSYSTEM_THREAD_INFORMATION
;
345 typedef struct SYSTEM_PROCESS_INFORMATION
347 ULONG NextEntryOffset
;
348 ULONG NumberOfThreads
;
349 LARGE_INTEGER SpareLi1
;
350 LARGE_INTEGER SpareLi2
;
351 LARGE_INTEGER SpareLi3
;
355 UNICODE_STRING ImageName
;
357 HANDLE UniqueProcessId
;
358 HANDLE InheritedFromUniqueProcessId
;
362 ULONG PeakVirtualSize
;
364 ULONG PageFaultCount
;
365 ULONG PeakWorkingSetSize
;
366 ULONG WorkingSetSize
;
367 ULONG QuotaPeakPagedPoolUsage
;
368 ULONG QuotaPagedPoolUsage
;
369 ULONG QuotaPeakNonPagedPoolUsage
;
370 ULONG QuotaNonPagedPoolUsage
;
372 ULONG PeakPagefileUsage
;
373 ULONG PrivatePageCount
;
374 } SYSTEM_PROCESS_INFORMATION
, *PSYSTEM_PROCESS_INFORMATION
;
376 // SystemModuleInformation (11)
377 typedef struct _SYSTEM_MODULE_INFORMATION_ENTRY
{
384 /* Length of module name not including the path, this
385 field contains valid value only for NTOSKRNL module */
390 } SYSTEM_MODULE_INFORMATION_ENTRY
, *PSYSTEM_MODULE_INFORMATION_ENTRY
;
392 typedef struct _SYSTEM_MODULE_INFORMATION
{
394 SYSTEM_MODULE_INFORMATION_ENTRY Module
[1];
395 } SYSTEM_MODULE_INFORMATION
, *PSYSTEM_MODULE_INFORMATION
;
397 // SystemHandleInformation (16)
400 struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO
402 USHORT UniqueProcessId
;
403 USHORT CreatorBackTraceIndex
;
404 UCHAR ObjectTypeIndex
;
405 UCHAR HandleAttributes
;
410 } SYSTEM_HANDLE_TABLE_ENTRY_INFO
, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO
;
413 struct _SYSTEM_HANDLE_INFORMATION
415 ULONG NumberOfHandles
;
416 SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles
[1];
418 } SYSTEM_HANDLE_INFORMATION
, *PSYSTEM_HANDLE_INFORMATION
;
420 // SystemObjectInformation (17)
422 struct _SYSTEM_OBJECT_TYPE_INFORMATION
424 ULONG NextEntryOffset
;
428 ULONG InvalidAttributes
;
429 GENERIC_MAPPING GenericMapping
;
430 ACCESS_MASK ValidAccessMask
;
435 } SYSTEM_OBJECT_TYPE_INFORMATION
, *PSYSTEM_OBJECT_TYPE_INFORMATION
;
438 struct _SYSTEM_OBJECT_INFORMATION
440 ULONG NextEntryOffset
;
442 ULONG CreatorProcessId
;
447 ULONG PagedPoolUsage
;
448 ULONG NonPagedPoolUsage
;
449 ULONG ExclusiveProcessId
;
450 PSECURITY_DESCRIPTOR SecurityDescriptor
;
453 } SYSTEM_OBJECT_INFORMATION
, *PSYSTEM_OBJECT_INFORMATION
;
455 // SystemPageFileInformation (18)
457 struct _SYSTEM_PAGEFILE_INFORMATION
459 ULONG NextEntryOffset
;
463 UNICODE_STRING PageFileName
;
465 } SYSTEM_PAGEFILE_INFORMATION
, *PSYSTEM_PAGEFILE_INFORMATION
;
467 // SystemCacheInformation (21)
469 struct _SYSTEM_CACHE_INFORMATION
473 ULONG PageFaultCount
;
474 ULONG MinimumWorkingSet
;
475 ULONG MaximumWorkingSet
;
476 ULONG TransitionSharedPages
;
477 ULONG TransitionSharedPagesPeak
;
480 } SYSTEM_CACHE_INFORMATION
;
482 // SystemInterruptInformation (23)
484 struct _SYSTEM_INTERRUPT_INFORMATION
486 ULONG ContextSwitches
;
490 ULONG DpcBypassCount
;
491 ULONG ApcBypassCount
;
493 } SYSTEM_INTERRUPT_INFORMATION
, *PSYSTEM_INTERRUPT_INFORMATION
;
495 // SystemDpcInformation (24)
497 struct _SYSTEM_DPC_INFORMATION
500 ULONG KiMaximumDpcQueueDepth
;
501 ULONG KiMinimumDpcRate
;
502 ULONG KiAdjustDpcThreshold
;
503 ULONG KiIdealDpcRate
;
505 } SYSTEM_DPC_INFORMATION
, *PSYSTEM_DPC_INFORMATION
;
507 // SystemLoadImage (26)
508 typedef struct _SYSTEM_LOAD_IMAGE
510 UNICODE_STRING ModuleName
;
512 PVOID SectionPointer
;
514 PVOID ExportDirectory
;
515 } SYSTEM_LOAD_IMAGE
, *PSYSTEM_LOAD_IMAGE
;
517 // SystemUnloadImage (27)
518 typedef struct _SYSTEM_UNLOAD_IMAGE
521 } SYSTEM_UNLOAD_IMAGE
, *PSYSTEM_UNLOAD_IMAGE
;
523 // SystemTimeAdjustmentInformation (28)
525 struct _SYSTEM_QUERY_TIME_ADJUSTMENT
527 ULONG TimeAdjustment
;
528 ULONG MaximumIncrement
;
529 BOOLEAN TimeSynchronization
;
531 } SYSTEM_QUERY_TIME_ADJUSTMENT
, *PSYSTEM_QUERY_TIME_ADJUSTMENT
;
534 struct _SYSTEM_SET_TIME_ADJUSTMENT
536 ULONG TimeAdjustment
;
537 BOOLEAN TimeSynchronization
;
539 } SYSTEM_SET_TIME_ADJUSTMENT
, *PSYSTEM_SET_TIME_ADJUSTMENT
;
543 typedef enum _ATOM_INFORMATION_CLASS
545 AtomBasicInformation
= 0,
546 AtomTableInformation
= 1,
547 } ATOM_INFORMATION_CLASS
;
549 typedef struct _ATOM_BASIC_INFORMATION
555 } ATOM_BASIC_INFORMATION
, *PATOM_BASIC_INFORMATION
;
557 // SystemLoadAndCallImage(38)
558 typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE
560 UNICODE_STRING ModuleName
;
561 } SYSTEM_LOAD_AND_CALL_IMAGE
, *PSYSTEM_LOAD_AND_CALL_IMAGE
;
563 // SystemRegistryQuotaInformation (37)
564 typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION
{
565 ULONG RegistryQuotaAllowed
;
566 ULONG RegistryQuotaUsed
;
568 } SYSTEM_REGISTRY_QUOTA_INFORMATION
, *PSYSTEM_REGISTRY_QUOTA_INFORMATION
;
571 // SystemTimeZoneInformation (44)
573 struct _SYSTEM_TIME_ZONE_INFORMATION
576 WCHAR StandardName
[32];
579 WCHAR DaylightName
[32];
583 } SYSTEM_TIME_ZONE_INFORMATION
, * PSYSTEM_TIME_ZONE_INFORMATION
;
585 // SystemLookasideInformation (45)
587 struct _SYSTEM_LOOKASIDE_INFORMATION
591 ULONG TotalAllocates
;
592 ULONG AllocatesMisses
;
599 } SYSTEM_LOOKASIDE_INFORMATION
, * PSYSTEM_LOOKASIDE_INFORMATION
;
601 // SystemSetTimeSlipEvent (46)
603 struct _SYSTEM_SET_TIME_SLIP_EVENT
605 HANDLE TimeSlipEvent
; /* IN */
607 } SYSTEM_SET_TIME_SLIP_EVENT
, * PSYSTEM_SET_TIME_SLIP_EVENT
;
609 // SystemCreateSession (47)
610 // (available only on TSE/NT5+)
612 struct _SYSTEM_CREATE_SESSION
614 ULONG SessionId
; /* OUT */
616 } SYSTEM_CREATE_SESSION
, * PSYSTEM_CREATE_SESSION
;
618 // SystemDeleteSession (48)
619 // (available only on TSE/NT5+)
621 struct _SYSTEM_DELETE_SESSION
623 ULONG SessionId
; /* IN */
625 } SYSTEM_DELETE_SESSION
, * PSYSTEM_DELETE_SESSION
;
627 // SystemRangeStartInformation (50)
629 struct _SYSTEM_RANGE_START_INFORMATION
631 PVOID SystemRangeStart
;
633 } SYSTEM_RANGE_START_INFORMATION
, * PSYSTEM_RANGE_START_INFORMATION
;
635 // SystemSessionProcessesInformation (53)
636 // (available only on TSE/NT5+)
638 struct _SYSTEM_SESSION_PROCESSES_INFORMATION
642 PVOID Buffer
; /* same format as in SystemProcessInformation */
644 } SYSTEM_SESSION_PROCESSES_INFORMATION
, * PSYSTEM_SESSION_PROCESSES_INFORMATION
;
646 // memory information
648 typedef enum _MEMORY_INFORMATION_CLASS
{
649 MemoryBasicInformation
,
650 MemoryWorkingSetList
,
651 MemorySectionName
//,
652 //MemoryBasicVlmInformation //???
653 } MEMORY_INFORMATION_CLASS
;
655 typedef struct _MEMORY_BASIC_INFORMATION
{ // Information Class 0
657 PVOID AllocationBase
;
658 ULONG AllocationProtect
;
663 } MEMORY_BASIC_INFORMATION
, *PMEMORY_BASIC_INFORMATION
;
665 typedef struct _MEMORY_WORKING_SET_LIST
{ // Information Class 1
667 ULONG WorkingSetList
[1];
668 } MEMORY_WORKING_SET_LIST
, *PMEMORY_WORKING_SET_LIST
;
670 // Information Class 2
671 /*#define _MEMORY_SECTION_NAME_STATIC(__bufsize__) \
673 UNICODE_STRING SectionFileName; \
674 WCHAR NameBuffer[(__bufsize__)]; \
679 UNICODE_STRING SectionFileName
;
680 WCHAR NameBuffer
[ANYSIZE_ARRAY
];
681 } MEMORY_SECTION_NAME
, *PMEMORY_SECTION_NAME
;
683 // Information class 0
684 typedef struct _PROCESS_BASIC_INFORMATION
688 KAFFINITY AffinityMask
;
689 KPRIORITY BasePriority
;
690 HANDLE UniqueProcessId
;
691 HANDLE InheritedFromUniqueProcessId
;
692 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
694 // Information class 1
695 typedef struct _QUOTA_LIMITS
697 ULONG PagedPoolLimit
;
698 ULONG NonPagedPoolLimit
;
699 SIZE_T MinimumWorkingSetSize
;
700 SIZE_T MaximumWorkingSetSize
;
703 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
705 // Information class 2
706 typedef struct _IO_COUNTERS
708 LARGE_INTEGER ReadOperationCount
;
709 LARGE_INTEGER WriteOperationCount
;
710 LARGE_INTEGER OtherOperationCount
;
711 LARGE_INTEGER ReadTransferCount
;
712 LARGE_INTEGER WriteTransferCount
;
713 LARGE_INTEGER OtherTransferCount
;
714 } IO_COUNTERS
, *PIO_COUNTERS
;
716 // Information class 3
717 typedef struct _VM_COUNTERS_
719 ULONG PeakVirtualSize
;
721 ULONG PageFaultCount
;
722 ULONG PeakWorkingSetSize
;
723 ULONG WorkingSetSize
;
724 ULONG QuotaPeakPagedPoolUsage
;
725 ULONG QuotaPagedPoolUsage
;
726 ULONG QuotaPeakNonPagedPoolUsage
;
727 ULONG QuotaNonPagedPoolUsage
;
729 ULONG PeakPagefileUsage
;
730 } VM_COUNTERS
, *PVM_COUNTERS
;
732 // Information class 4
733 typedef struct _KERNEL_USER_TIMES
735 LARGE_INTEGER CreateTime
;
736 LARGE_INTEGER ExitTime
;
737 LARGE_INTEGER KernelTime
;
738 LARGE_INTEGER UserTime
;
739 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
741 // Information class 9
742 typedef struct _PROCESS_ACCESS_TOKEN
746 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
748 // Information class 14
749 typedef struct _POOLED_USAGE_AND_LIMITS_
751 ULONG PeakPagedPoolUsage
;
752 ULONG PagedPoolUsage
;
753 ULONG PagedPoolLimit
;
754 ULONG PeakNonPagedPoolUsage
;
755 ULONG NonPagedPoolUsage
;
756 ULONG NonPagedPoolLimit
;
757 ULONG PeakPagefileUsage
;
760 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
762 // Information class 15
763 typedef struct _PROCESS_WS_WATCH_INFORMATION
767 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
769 // Information class 18
770 typedef struct _PROCESS_PRIORITY_CLASS
774 } PROCESS_PRIORITY_CLASS
, *PPROCESS_PRIORITY_CLASS
;
776 // Information class 23
777 typedef struct _PROCESS_DEVICEMAP_INFORMATION
781 HANDLE DirectoryHandle
;
788 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
790 // Information class 24
791 typedef struct _PROCESS_SESSION_INFORMATION
794 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
796 // thread information
798 // incompatible with MS NT
800 typedef struct _THREAD_BASIC_INFORMATION
803 PVOID TebBaseAddress
; // PNT_TIB (GN)
805 KAFFINITY AffinityMask
;
807 KPRIORITY BasePriority
;
808 } THREAD_BASIC_INFORMATION
, *PTHREAD_BASIC_INFORMATION
;
813 typedef struct _FILE_BASIC_INFORMATION
815 LARGE_INTEGER CreationTime
;
816 LARGE_INTEGER LastAccessTime
;
817 LARGE_INTEGER LastWriteTime
;
818 LARGE_INTEGER ChangeTime
;
819 ULONG FileAttributes
;
820 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
822 typedef struct _FILE_STANDARD_INFORMATION
824 LARGE_INTEGER AllocationSize
;
825 LARGE_INTEGER EndOfFile
;
827 BOOLEAN DeletePending
;
829 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
831 typedef struct _FILE_POSITION_INFORMATION
833 LARGE_INTEGER CurrentByteOffset
;
834 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
836 typedef struct _FILE_ALIGNMENT_INFORMATION
838 ULONG AlignmentRequirement
;
839 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
841 typedef struct _FILE_DISPOSITION_INFORMATION
843 BOOLEAN DoDeleteFile
;
844 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
846 typedef struct _FILE_END_OF_FILE_INFORMATION
848 LARGE_INTEGER EndOfFile
;
849 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
851 typedef struct _FILE_NETWORK_OPEN_INFORMATION
853 LARGE_INTEGER CreationTime
;
854 LARGE_INTEGER LastAccessTime
;
855 LARGE_INTEGER LastWriteTime
;
856 LARGE_INTEGER ChangeTime
;
857 LARGE_INTEGER AllocationSize
;
858 LARGE_INTEGER EndOfFile
;
859 ULONG FileAttributes
;
860 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
862 typedef struct _FILE_FULL_EA_INFORMATION
864 ULONG NextEntryOffset
;
867 USHORT EaValueLength
;
869 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
872 typedef struct _FILE_EA_INFORMATION
{
874 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
877 typedef struct _FILE_GET_EA_INFORMATION
{
878 ULONG NextEntryOffset
;
881 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
883 typedef struct _FILE_STREAM_INFORMATION
{
884 ULONG NextEntryOffset
;
885 ULONG StreamNameLength
;
886 LARGE_INTEGER StreamSize
;
887 LARGE_INTEGER StreamAllocationSize
;
889 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
891 typedef struct _FILE_ALLOCATION_INFORMATION
{
892 LARGE_INTEGER AllocationSize
;
893 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
895 typedef struct _FILE_NAME_INFORMATION
{
896 ULONG FileNameLength
;
898 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
900 typedef struct _FILE_NAMES_INFORMATION
902 ULONG NextEntryOffset
;
904 ULONG FileNameLength
;
906 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
909 typedef struct _FILE_RENAME_INFORMATION
{
912 ULONG FileNameLength
;
914 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
917 typedef struct _FILE_INTERNAL_INFORMATION
{
918 LARGE_INTEGER IndexNumber
;
919 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
921 typedef struct _FILE_ACCESS_INFORMATION
{
922 ACCESS_MASK AccessFlags
;
923 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
926 typedef struct _FILE_MODE_INFORMATION
{
928 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
931 typedef struct _FILE_PIPE_INFORMATION
{
933 ULONG CompletionMode
;
934 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
936 typedef struct _FILE_PIPE_LOCAL_INFORMATION
{
938 ULONG NamedPipeConfiguration
;
939 ULONG MaximumInstances
;
940 ULONG CurrentInstances
;
942 ULONG ReadDataAvailable
;
944 ULONG WriteQuotaAvailable
;
945 ULONG NamedPipeState
;
947 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
949 typedef struct _FILE_PIPE_REMOTE_INFORMATION
{
950 LARGE_INTEGER CollectDataTime
;
951 ULONG MaximumCollectionCount
;
952 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
954 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
{
955 ULONG MaxMessageSize
;
956 ULONG Unknown
; /* ?? */
959 LARGE_INTEGER Timeout
;
960 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
962 typedef struct _FILE_MAILSLOT_SET_INFORMATION
{
963 LARGE_INTEGER Timeout
;
964 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
966 typedef struct _FILE_COMPRESSION_INFORMATION
{
967 LARGE_INTEGER CompressedFileSize
;
968 USHORT CompressionFormat
;
969 UCHAR CompressionUnitShift
;
973 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
975 typedef struct _FILE_COMPLETION_INFORMATION
{ // Information Class 30
976 HANDLE IoCompletionHandle
;
978 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
980 typedef struct _FILE_ALL_INFORMATION
{
981 FILE_BASIC_INFORMATION BasicInformation
;
982 FILE_STANDARD_INFORMATION StandardInformation
;
983 FILE_INTERNAL_INFORMATION InternalInformation
;
984 FILE_EA_INFORMATION EaInformation
;
985 FILE_ACCESS_INFORMATION AccessInformation
;
986 FILE_POSITION_INFORMATION PositionInformation
;
987 FILE_MODE_INFORMATION ModeInformation
;
988 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
989 FILE_NAME_INFORMATION NameInformation
;
990 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
993 // file system information structures
995 typedef struct _FILE_FS_DEVICE_INFORMATION
{
996 DEVICE_TYPE DeviceType
;
997 ULONG Characteristics
;
998 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1001 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1002 TIME VolumeCreationTime
;
1003 ULONG VolumeSerialNumber
;
1004 ULONG VolumeLabelLength
;
1005 BOOLEAN SupportsObjects
;
1006 WCHAR VolumeLabel
[0];
1007 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1009 typedef struct _FILE_FS_SIZE_INFORMATION
{
1010 LARGE_INTEGER TotalAllocationUnits
;
1011 LARGE_INTEGER AvailableAllocationUnits
;
1012 ULONG SectorsPerAllocationUnit
;
1013 ULONG BytesPerSector
;
1014 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1016 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
1017 ULONG FileSystemAttributes
;
1018 LONG MaximumComponentNameLength
;
1019 ULONG FileSystemNameLength
;
1020 WCHAR FileSystemName
[0];
1021 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
1024 FileSystemAttributes is one of the following values:
1026 FILE_CASE_SENSITIVE_SEARCH 0x00000001
1027 FILE_CASE_PRESERVED_NAMES 0x00000002
1028 FILE_UNICODE_ON_DISK 0x00000004
1029 FILE_PERSISTENT_ACLS 0x00000008
1030 FILE_FILE_COMPRESSION 0x00000010
1031 FILE_VOLUME_QUOTAS 0x00000020
1032 FILE_VOLUME_IS_COMPRESSED 0x00008000
1034 typedef struct _FILE_FS_LABEL_INFORMATION
{
1035 ULONG VolumeLabelLength
;
1036 WCHAR VolumeLabel
[0];
1037 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1040 typedef struct _FILE_DIRECTORY_INFORMATION
{
1041 ULONG NextEntryOffset
;
1043 LARGE_INTEGER CreationTime
;
1044 LARGE_INTEGER LastAccessTime
;
1045 LARGE_INTEGER LastWriteTime
;
1046 LARGE_INTEGER ChangeTime
;
1047 LARGE_INTEGER EndOfFile
;
1048 LARGE_INTEGER AllocationSize
;
1049 ULONG FileAttributes
;
1050 ULONG FileNameLength
;
1052 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
1054 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
1055 ULONG NextEntryOffset
;
1057 LARGE_INTEGER CreationTime
;
1058 LARGE_INTEGER LastAccessTime
;
1059 LARGE_INTEGER LastWriteTime
;
1060 LARGE_INTEGER ChangeTime
;
1061 LARGE_INTEGER EndOfFile
;
1062 LARGE_INTEGER AllocationSize
;
1063 ULONG FileAttributes
;
1064 ULONG FileNameLength
;
1066 WCHAR FileName
[0]; // variable size
1067 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
,
1068 FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
1071 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
{
1072 ULONG NextEntryOffset
;
1074 LARGE_INTEGER CreationTime
;
1075 LARGE_INTEGER LastAccessTime
;
1076 LARGE_INTEGER LastWriteTime
;
1077 LARGE_INTEGER ChangeTime
;
1078 LARGE_INTEGER EndOfFile
;
1079 LARGE_INTEGER AllocationSize
;
1080 ULONG FileAttributes
;
1081 ULONG FileNameLength
;
1083 CHAR ShortNameLength
;
1084 WCHAR ShortName
[12]; // 8.3 name
1086 } FILE_BOTH_DIRECTORY_INFORMATION
, *PFILE_BOTH_DIRECTORY_INFORMATION
,
1087 FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
1090 NotifyFilter / CompletionFilter:
1092 FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
1093 FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
1094 FILE_NOTIFY_CHANGE_NAME 0x00000003
1095 FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
1096 FILE_NOTIFY_CHANGE_SIZE 0x00000008
1097 FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
1098 FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
1099 FILE_NOTIFY_CHANGE_CREATION 0x00000040
1100 FILE_NOTIFY_CHANGE_EA 0x00000080
1101 FILE_NOTIFY_CHANGE_SECURITY 0x00000100
1102 FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
1103 FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
1104 FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
1107 typedef struct _FILE_NOTIFY_INFORMATION
{
1108 ULONG NextEntryOffset
;
1112 } FILE_NOTIFY_INFORMATION
, *PFILE_NOTIFY_INFORMATION
;
1114 #define FSCTL_GET_VOLUME_BITMAP 0x9006F
1115 #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
1116 #define FSCTL_MOVE_FILE 0x90074
1118 /* Structure copied from ntifs.h (Must be in sync!) */
1119 #include <pshpack8.h>
1120 typedef struct _RETRIEVAL_POINTERS_BUFFER
{
1122 LARGE_INTEGER StartingVcn
;
1124 LARGE_INTEGER NextVcn
;
1127 } RETRIEVAL_POINTERS_BUFFER
, *PRETRIEVAL_POINTERS_BUFFER
;
1128 #include <poppack.h>
1130 typedef struct _SECTION_BASIC_INFORMATION
1135 } SECTION_BASIC_INFORMATION
, *PSECTION_BASIC_INFORMATION
;
1137 typedef enum _SECTION_INFORMATION_CLASS
1139 SectionBasicInformation
,
1140 SectionImageInformation
,
1141 } SECTION_INFORMATION_CLASS
;
1145 typedef enum SHUTDOWN_ACTION_TAG
{
1151 typedef enum _IO_COMPLETION_INFORMATION_CLASS
{
1152 IoCompletionBasicInformation
1153 } IO_COMPLETION_INFORMATION_CLASS
;
1155 typedef struct _IO_COMPLETION_BASIC_INFORMATION
{
1157 } IO_COMPLETION_BASIC_INFORMATION
, *PIO_COMPLETION_BASIC_INFORMATION
;
1159 #else /* __USE_W32API */
1161 #define DebugDbgLoadSymbols ((DEBUG_CONTROL_CODE)0xffffffff)
1163 #endif /* __USE_W32API */
1166 #include <ddk/ntddk.h>
1167 #endif /* __USE_W32API */
1168 #ifndef NtCurrentProcess
1169 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
1170 #endif /* NtCurrentProcess */
1171 #ifndef NtCurrentThread
1172 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
1173 #endif /* NtCurrentThread */
1177 extern ULONG EXPORTED NtBuildNumber
;
1179 extern ULONG IMPORTED NtBuildNumber
;
1182 /* Microsoft-style declarations */
1184 extern EXPORTED ULONG NtBuildNumber
;
1186 extern IMPORTED ULONG NtBuildNumber
;
1188 #endif /* __GNUC__ */
1191 // event access mask
1193 #define EVENT_READ_ACCESS 1
1194 #define EVENT_WRITE_ACCESS 2
1196 //process query / set information class
1198 #define ProcessBasicInformation 0
1199 #define ProcessQuotaLimits 1
1200 #define ProcessIoCounters 2
1201 #define ProcessVmCounters 3
1202 #define ProcessTimes 4
1203 #define ProcessBasePriority 5
1204 #define ProcessRaisePriority 6
1205 #define ProcessDebugPort 7
1206 #define ProcessExceptionPort 8
1207 #define ProcessAccessToken 9
1208 #define ProcessLdtInformation 10
1209 #define ProcessLdtSize 11
1210 #define ProcessDefaultHardErrorMode 12
1211 #define ProcessIoPortHandlers 13
1212 #define ProcessPooledUsageAndLimits 14
1213 #define ProcessWorkingSetWatch 15
1214 #define ProcessUserModeIOPL 16
1215 #define ProcessEnableAlignmentFaultFixup 17
1216 #define ProcessPriorityClass 18
1217 #define ProcessWx86Information 19
1218 #define ProcessHandleCount 20
1219 #define ProcessAffinityMask 21
1220 #define ProcessPriorityBoost 22
1221 #define ProcessDeviceMap 23
1222 #define ProcessSessionInformation 24
1223 #define ProcessForegroundInformation 25
1224 #define ProcessWow64Information 26
1225 #define ProcessImageFileName 27
1226 #define ProcessLUIDDeviceMapsEnabled 28
1227 #define ProcessBreakOnTermination 29
1228 #define ProcessDebugObjectHandle 30
1229 #define ProcessDebugFlags 31
1230 #define ProcessHandleTracing 32
1231 #define ProcessUnknown33 33
1232 #define ProcessUnknown34 34
1233 #define ProcessUnknown35 35
1234 #define ProcessCookie 36
1235 #define MaxProcessInfoClass 36
1238 * thread query / set information class
1240 #define ThreadBasicInformation 0
1241 #define ThreadTimes 1
1242 #define ThreadPriority 2
1243 #define ThreadBasePriority 3
1244 #define ThreadAffinityMask 4
1245 #define ThreadImpersonationToken 5
1246 #define ThreadDescriptorTableEntry 6
1247 #define ThreadEnableAlignmentFaultFixup 7
1248 #define ThreadEventPair 8
1249 #define ThreadQuerySetWin32StartAddress 9
1250 #define ThreadZeroTlsCell 10
1251 #define ThreadPerformanceCount 11
1252 #define ThreadAmILastThread 12
1253 #define ThreadIdealProcessor 13
1254 #define ThreadPriorityBoost 14
1255 #define ThreadSetTlsArrayAddress 15
1256 #define ThreadIsIoPending 16
1257 #define ThreadHideFromDebugger 17
1258 #define MaxThreadInfoClass 17
1261 typedef struct _ATOM_TABLE_INFORMATION
1263 ULONG NumberOfAtoms
;
1265 } ATOM_TABLE_INFORMATION
, *PATOM_TABLE_INFORMATION
;
1268 // mutant information
1270 typedef enum _MUTANT_INFORMATION_CLASS
1272 MutantBasicInformation
= 0
1273 } MUTANT_INFORMATION_CLASS
;
1275 typedef struct _MUTANT_BASIC_INFORMATION
1278 BOOLEAN OwnedByCaller
;
1279 BOOLEAN AbandonedState
;
1280 } MUTANT_BASIC_INFORMATION
, *PMUTANT_BASIC_INFORMATION
;
1283 // SystemTimeOfDayInformation (3)
1285 struct _SYSTEM_TIMEOFDAY_INFORMATION
1287 LARGE_INTEGER BootTime
;
1288 LARGE_INTEGER CurrentTime
;
1289 LARGE_INTEGER TimeZoneBias
;
1292 } SYSTEM_TIMEOFDAY_INFORMATION
, *PSYSTEM_TIMEOFDAY_INFORMATION
;
1294 // SystemPathInformation (4)
1297 struct _SYSTEM_PATH_INFORMATION
1301 } SYSTEM_PATH_INFORMATION
, * PSYSTEM_PATH_INFORMATION
;
1303 // SystemProcessInformation (5)
1305 #ifndef __USE_W32API
1307 typedef struct _SYSTEM_THREADS
{
1308 LARGE_INTEGER KernelTime
;
1309 LARGE_INTEGER UserTime
;
1310 LARGE_INTEGER CreateTime
;
1315 KPRIORITY BasePriority
;
1316 ULONG ContextSwitchCount
;
1318 KWAIT_REASON WaitReason
;
1319 } SYSTEM_THREADS
, *PSYSTEM_THREADS
;
1321 #endif /* __USE_W32API */
1323 typedef struct _SYSTEM_PROCESSES_NT4
1325 SIZE_T NextEntryDelta
;
1328 LARGE_INTEGER CreateTime
;
1329 LARGE_INTEGER UserTime
;
1330 LARGE_INTEGER KernelTime
;
1331 UNICODE_STRING ProcessName
;
1332 KPRIORITY BasePriority
;
1334 HANDLE InheritedFromProcessId
;
1337 VM_COUNTERS VmCounters
;
1338 SYSTEM_THREADS Threads
[ANYSIZE_ARRAY
];
1339 } SYSTEM_PROCESSES_NT4
, *PSYSTEM_PROCESSES_NT4
;
1341 typedef struct _SYSTEM_PROCESSES_NT5
1343 SIZE_T NextEntryDelta
;
1346 LARGE_INTEGER CreateTime
;
1347 LARGE_INTEGER UserTime
;
1348 LARGE_INTEGER KernelTime
;
1349 UNICODE_STRING ProcessName
;
1350 KPRIORITY BasePriority
;
1352 HANDLE InheritedFromProcessId
;
1355 VM_COUNTERS VmCounters
;
1356 IO_COUNTERS IoCounters
;
1357 SYSTEM_THREADS Threads
[ANYSIZE_ARRAY
];
1358 } SYSTEM_PROCESSES_NT5
, *PSYSTEM_PROCESSES_NT5
;
1360 #ifndef __USE_W32API
1362 /* Not sure. What version are we emulating? */
1363 typedef SYSTEM_PROCESSES_NT5 SYSTEM_PROCESSES
, *PSYSTEM_PROCESSES
;
1365 #endif /* __USE_W32API */
1367 // SystemCallCountInformation (6)
1369 struct _SYSTEM_SDT_INFORMATION
1372 ULONG NumberOfSystemServiceTables
;
1373 ULONG NumberOfServices
[1];
1374 ULONG ServiceCounters
[1];
1376 } SYSTEM_SDT_INFORMATION
, *PSYSTEM_SDT_INFORMATION
;
1378 // SystemDeviceInformation (7)
1380 struct _SYSTEM_DEVICE_INFORMATION
1382 ULONG NumberOfDisks
;
1383 ULONG NumberOfFloppies
;
1384 ULONG NumberOfCdRoms
;
1385 ULONG NumberOfTapes
;
1386 ULONG NumberOfSerialPorts
;
1387 ULONG NumberOfParallelPorts
;
1388 } SYSTEM_DEVICE_INFORMATION
, *PSYSTEM_DEVICE_INFORMATION
;
1390 // SystemProcessorPerformanceInformation (8)
1391 // (one per processor in the system)
1393 struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
1395 LARGE_INTEGER IdleTime
;
1396 LARGE_INTEGER KernelTime
;
1397 LARGE_INTEGER UserTime
;
1398 LARGE_INTEGER DpcTime
;
1399 LARGE_INTEGER InterruptTime
;
1400 ULONG InterruptCount
;
1403 } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
;
1405 // SystemFlagsInformation (9)
1407 struct _SYSTEM_FLAGS_INFORMATION
1411 } SYSTEM_FLAGS_INFORMATION
, * PSYSTEM_FLAGS_INFORMATION
;
1413 #define FLG_STOP_ON_EXCEPTION 0x00000001
1414 #define FLG_SHOW_LDR_SNAPS 0x00000002
1415 #define FLG_DEBUG_INITIAL_COMMAND 0x00000004
1416 #define FLG_STOP_ON_HANG_GUI 0x00000008
1417 #define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
1418 #define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
1419 #define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
1420 #define FLG_HEAP_VALIDATE_ALL 0x00000080
1421 #define FLG_POOL_ENABLE_TAIL_CHECK 0x00000100
1422 #define FLG_POOL_ENABLE_FREE_CHECK 0x00000200
1423 #define FLG_POOL_ENABLE_TAGGING 0x00000400
1424 #define FLG_HEAP_ENABLE_TAGGING 0x00000800
1425 #define FLG_USER_STACK_TRACE_DB 0x00001000
1426 #define FLG_KERNEL_STACK_TRACE_DB 0x00002000
1427 #define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
1428 #define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
1429 #define FLG_IGNORE_DEBUG_PRIV 0x00010000
1430 #define FLG_ENABLE_CSRDEBUG 0x00020000
1431 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
1432 #define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
1433 #define FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
1434 #define FLG_HEAP_DISABLE_COALESCING 0x00200000
1435 #define FLG_ENABLE_CLOSE_EXCEPTION 0x00400000
1436 #define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
1437 #define FLG_UNKNOWN_01000000 0x01000000
1438 #define FLG_UNKNOWN_02000000 0x02000000
1439 #define FLG_UNKNOWN_04000000 0x04000000
1440 #define FLG_ENABLE_DBGPRINT_BUFFERING 0x08000000
1441 #define FLG_UNKNOWN_10000000 0x10000000
1442 #define FLG_UNKNOWN_20000000 0x20000000
1443 #define FLG_UNKNOWN_40000000 0x40000000
1444 #define FLG_UNKNOWN_80000000 0x80000000
1446 // SystemCallTimeInformation (10)
1449 // SystemLocksInformation (12)
1451 struct _SYSTEM_RESOURCE_LOCK_ENTRY
1453 ULONG ResourceAddress
;
1457 ULONG ContentionCount
;
1459 ULONG NumberOfSharedWaiters
;
1460 ULONG NumberOfExclusiveWaiters
;
1462 } SYSTEM_RESOURCE_LOCK_ENTRY
, *PSYSTEM_RESOURCE_LOCK_ENTRY
;
1465 struct _SYSTEM_RESOURCE_LOCK_INFO
1468 SYSTEM_RESOURCE_LOCK_ENTRY Lock
[1];
1470 } SYSTEM_RESOURCE_LOCK_INFO
, *PSYSTEM_RESOURCE_LOCK_INFO
;
1472 // SystemInformation13 (13)
1475 // SystemInformation14 (14)
1478 // SystemInformation15 (15)
1481 // SystemInstructionEmulationInfo (19)
1483 struct _SYSTEM_VDM_INFORMATION
1485 ULONG VdmSegmentNotPresentCount
;
1487 ULONG VdmESPREFIXCount
;
1488 ULONG VdmCSPREFIXCount
;
1489 ULONG VdmSSPREFIXCount
;
1490 ULONG VdmDSPREFIXCount
;
1491 ULONG VdmFSPREFIXCount
;
1492 ULONG VdmGSPREFIXCount
;
1493 ULONG VdmOPER32PREFIXCount
;
1494 ULONG VdmADDR32PREFIXCount
;
1496 ULONG VdmINSWV86Count
;
1497 ULONG VdmOUTSBCount
;
1498 ULONG VdmOUTSWCount
;
1499 ULONG VdmPUSHFCount
;
1501 ULONG VdmINTNNCount
;
1504 ULONG VdmINBIMMCount
;
1505 ULONG VdmINWIMMCount
;
1506 ULONG VdmOUTBIMMCount
;
1507 ULONG VdmOUTWIMMCount
;
1512 ULONG VdmLOCKPREFIXCount
;
1513 ULONG VdmREPNEPREFIXCount
;
1514 ULONG VdmREPPREFIXCount
;
1520 } SYSTEM_VDM_INFORMATION
, *PSYSTEM_VDM_INFORMATION
;
1522 // SystemInformation20 (20)
1525 // SystemPoolTagInformation (22)
1526 // found by Klaus P. Gerlicher
1527 // (implemented only in checked builds)
1529 struct _POOL_TAG_STATS
1531 ULONG AllocationCount
;
1538 struct _SYSTEM_POOL_TAG_ENTRY
1541 POOL_TAG_STATS Paged
;
1542 POOL_TAG_STATS NonPaged
;
1544 } SYSTEM_POOL_TAG_ENTRY
, * PSYSTEM_POOL_TAG_ENTRY
;
1547 struct _SYSTEM_POOL_TAG_INFO
1550 SYSTEM_POOL_TAG_ENTRY PoolEntry
[1];
1552 } SYSTEM_POOL_TAG_INFO
, *PSYSTEM_POOL_TAG_INFO
;
1554 // SystemProcessorScheduleInfo (23)
1556 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
1558 ULONG nContextSwitches
;
1561 ULONG TimerResolution
;
1565 } SYSTEM_PROCESSOR_SCHEDULE_INFO
, *PSYSTEM_PROCESSOR_SCHEDULE_INFO
;
1567 // SystemInformation25 (25)
1570 // SystemProcessorFaultCountInfo (33)
1572 struct _SYSTEM_PROCESSOR_FAULT_INFO
1574 ULONG nAlignmentFixup
;
1575 ULONG nExceptionDispatches
;
1576 ULONG nFloatingEmulation
;
1579 } SYSTEM_PROCESSOR_FAULT_INFO
, *PSYSTEM_PROCESSOR_FAULT_INFO
;
1581 // SystemCrashDumpStateInfo (34)
1584 // SystemDebuggerInformation (35)
1586 struct _SYSTEM_DEBUGGER_INFO
1588 BOOLEAN KdDebuggerEnabled
;
1589 BOOLEAN KdDebuggerPresent
;
1591 } SYSTEM_DEBUGGER_INFO
, *PSYSTEM_DEBUGGER_INFO
;
1593 // SystemInformation36 (36)
1596 // SystemQuotaInformation (37)
1598 struct _SYSTEM_QUOTA_INFORMATION
1600 ULONG CmpGlobalQuota
;
1601 ULONG CmpGlobalQuotaUsed
;
1602 ULONG MmSizeofPagedPoolInBytes
;
1604 } SYSTEM_QUOTA_INFORMATION
, *PSYSTEM_QUOTA_INFORMATION
;
1609 // SystemVerifierInformation (51)
1612 // SystemAddVerifier (52)
1620 // number of wait objects
1622 #define THREAD_WAIT_OBJECTS 3
1623 //#define MAXIMUM_WAIT_OBJECTS 64
1625 // object type access rights
1627 #define OBJECT_TYPE_CREATE 0x0001
1628 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1630 // directory access rights
1632 #ifndef __USE_W32API
1633 #define DIRECTORY_QUERY 0x0001
1634 #define DIRECTORY_TRAVERSE 0x0002
1635 #define DIRECTORY_CREATE_OBJECT 0x0004
1636 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
1639 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
1641 // symbolic link access rights
1643 #define SYMBOLIC_LINK_QUERY 0x0001
1644 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1647 /* object information class */
1649 #ifndef __USE_W32API
1651 typedef enum _OBJECT_INFORMATION_CLASS
1653 ObjectBasicInformation
,
1654 ObjectNameInformation
,
1655 ObjectTypeInformation
,
1656 ObjectAllTypesInformation
,
1657 ObjectHandleInformation
1658 } OBJECT_INFORMATION_CLASS
;
1661 // directory information
1663 typedef struct _OBJECT_DIRECTORY_INFORMATION
1665 UNICODE_STRING ObjectName
;
1666 UNICODE_STRING ObjectTypeName
; // Directory, Device ...
1667 } OBJECT_DIRECTORY_INFORMATION
, *POBJECT_DIRECTORY_INFORMATION
;
1670 /* system battery state */
1671 typedef struct _SYSTEM_BATTERY_STATE
{
1673 BOOLEAN BatteryPresent
;
1675 BOOLEAN Discharging
;
1678 ULONG RemainingCapacity
;
1680 ULONG EstimatedTime
;
1681 ULONG DefaultAlert1
;
1682 ULONG DefaultAlert2
;
1683 } SYSTEM_BATTERY_STATE
, *PSYSTEM_BATTERY_STATE
;
1686 // power information levels
1687 typedef enum _POWER_INFORMATION_LEVEL
{
1688 SystemPowerPolicyAc
,
1689 SystemPowerPolicyDc
,
1690 VerifySystemPolicyAc
,
1691 VerifySystemPolicyDc
,
1692 SystemPowerCapabilities
,
1694 SystemPowerStateHandler
,
1695 ProcessorStateHandler
,
1696 SystemPowerPolicyCurrent
,
1697 AdministratorPowerPolicy
,
1698 SystemReserveHiberFile
,
1699 ProcessorInformation
,
1700 SystemPowerInformationData
1701 } POWER_INFORMATION_LEVEL
;
1703 #endif /* __USE_W32API */
1706 Action is one of the following values:
1708 FILE_ACTION_ADDED 0x00000001
1709 FILE_ACTION_REMOVED 0x00000002
1710 FILE_ACTION_MODIFIED 0x00000003
1711 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
1712 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
1713 FILE_ACTION_ADDED_STREAM 0x00000006
1714 FILE_ACTION_REMOVED_STREAM 0x00000007
1715 FILE_ACTION_MODIFIED_STREAM 0x00000008
1720 // File System Control commands ( related to defragging )
1722 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
1724 //typedef enum _TIMER_TYPE
1726 // NotificationTimer,
1727 // SynchronizationTimer
1730 typedef struct _TIMER_BASIC_INFORMATION
1732 LARGE_INTEGER TimeRemaining
;
1733 BOOLEAN SignalState
;
1734 } TIMER_BASIC_INFORMATION
, *PTIMER_BASIC_INFORMATION
;
1736 typedef enum _TIMER_INFORMATION_CLASS
1738 TimerBasicInformation
1739 } TIMER_INFORMATION_CLASS
;
1741 #ifndef __USE_W32API
1745 UNUSED_MSG_TYPE
= 0x0, /* ReactOS */
1746 LPC_NEW_MESSAGE
= 0x0, /* NT */
1750 LPC_LOST_REPLY
= 0x4,
1751 LPC_PORT_CLOSED
= 0x5,
1752 LPC_CLIENT_DIED
= 0x6,
1753 LPC_EXCEPTION
= 0x7,
1754 LPC_DEBUG_EVENT
= 0x8,
1755 LPC_ERROR_EVENT
= 0x9,
1756 LPC_CONNECTION_REQUEST
= 0xa,
1757 LPC_CONNECTION_REFUSED
= 0xb /* ReactOS only */
1759 } LPC_TYPE
, *PLPC_TYPE
;
1761 typedef struct _LPC_SECTION_WRITE
1764 HANDLE SectionHandle
;
1765 ULONG SectionOffset
;
1768 PVOID TargetViewBase
;
1769 } LPC_SECTION_WRITE
, *PLPC_SECTION_WRITE
;
1771 typedef struct _LPC_SECTION_READ
1776 } LPC_SECTION_READ
, *PLPC_SECTION_READ
;
1778 typedef struct _LPC_MESSAGE
1783 USHORT VirtualRangesOffset
;
1786 ULONG SectionSize
; /* CallbackID */
1787 } LPC_MESSAGE
, *PLPC_MESSAGE
;
1789 #define LPC_MESSAGE_BASE_SIZE sizeof(LPC_MESSAGE)
1791 #define PORT_MESSAGE_TYPE(m) (LPC_TYPE)((m).Header.MessageType)
1793 #define PORT_MAX_DATA_LENGTH 0x104
1794 #define PORT_MAX_MESSAGE_LENGTH 0x148
1796 #endif /* __USE_W32API */
1798 #define MAX_MESSAGE_DATA (0x130)
1800 typedef struct _LPC_MAX_MESSAGE
1803 BYTE Data
[MAX_MESSAGE_DATA
];
1804 } LPC_MAX_MESSAGE
, *PLPC_MAX_MESSAGE
;
1806 typedef struct _LPC_PORT_BASIC_INFORMATION
1823 } LPC_PORT_BASIC_INFORMATION
, * PLPC_PORT_BASIC_INFORMATION
;
1826 typedef struct _KINTERRUPT
1829 KAFFINITY ProcessorEnableMask
;
1830 KSPIN_LOCK SpinLock
;
1831 PKSPIN_LOCK ActualLock
;
1833 BOOLEAN FloatingSave
;
1834 CHAR ProcessorNumber
;
1835 PKSERVICE_ROUTINE ServiceRoutine
;
1836 PVOID ServiceContext
;
1840 KINTERRUPT_MODE InterruptMode
;
1843 #ifndef __USE_W32API
1845 typedef struct _KINTERRUPT
*PKINTERRUPT
;
1847 typedef VOID STDCALL_FUNC
1848 (*PTIMER_APC_ROUTINE
)(
1849 IN PVOID TimerContext
,
1850 IN ULONG TimerLowValue
,
1851 IN LONG TimerHighValue
);
1853 #endif /* __USE_W32API */
1855 /* BEGIN REACTOS ONLY */
1857 typedef enum _TRAVERSE_METHOD
{
1858 TraverseMethodPreorder
,
1859 TraverseMethodInorder
,
1860 TraverseMethodPostorder
1863 typedef LONG STDCALL_FUNC
1864 (*PKEY_COMPARATOR
)(IN PVOID Key1
,
1867 typedef BOOLEAN STDCALL_FUNC
1868 (*PTRAVERSE_ROUTINE
)(IN PVOID Context
,
1872 struct _BINARY_TREE_NODE
;
1874 typedef struct _BINARY_TREE
1876 struct _BINARY_TREE_NODE
* RootNode
;
1877 PKEY_COMPARATOR Compare
;
1878 BOOLEAN UseNonPagedPool
;
1880 NPAGED_LOOKASIDE_LIST NonPaged
;
1881 PAGED_LOOKASIDE_LIST Paged
;
1884 KSPIN_LOCK NonPaged
;
1887 } BINARY_TREE
, *PBINARY_TREE
;
1890 struct _SPLAY_TREE_NODE
;
1892 typedef struct _SPLAY_TREE
1894 struct _SPLAY_TREE_NODE
* RootNode
;
1895 PKEY_COMPARATOR Compare
;
1897 BOOLEAN UseNonPagedPool
;
1899 NPAGED_LOOKASIDE_LIST NonPaged
;
1900 PAGED_LOOKASIDE_LIST Paged
;
1903 KSPIN_LOCK NonPaged
;
1907 } SPLAY_TREE
, *PSPLAY_TREE
;
1910 typedef struct _HASH_TABLE
1912 // Size of hash table in number of bits
1913 ULONG HashTableSize
;
1915 // Use non-paged pool memory?
1916 BOOLEAN UseNonPagedPool
;
1918 // Lock for this structure
1920 KSPIN_LOCK NonPaged
;
1924 // Pointer to array of hash buckets with splay trees
1925 PSPLAY_TREE HashTrees
;
1926 } HASH_TABLE
, *PHASH_TABLE
;
1929 /* END REACTOS ONLY */