1 #ifndef __INCLUDE_DDK_ZWTYPES_H
2 #define __INCLUDE_DDK_ZWTYPES_H
4 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
5 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
8 extern ULONG EXPORTED NtBuildNumber
;
10 extern ULONG IMPORTED NtBuildNumber
;
16 #define EVENT_READ_ACCESS 1
17 #define EVENT_WRITE_ACCESS 2
20 // file disposition values
23 #define FILE_SUPERSEDE 0x0000
24 #define FILE_OPEN 0x0001
25 #define FILE_CREATE 0x0002
26 #define FILE_OPEN_IF 0x0003
27 #define FILE_OVERWRITE 0x0004
28 #define FILE_OVERWRITE_IF 0x0005
29 #define FILE_MAXIMUM_DISPOSITION 0x0005
31 //process query / set information class
33 #define ProcessBasicInformation 0
34 #define ProcessQuotaLimits 1
35 #define ProcessIoCounters 2
36 #define ProcessVmCounters 3
37 #define ProcessTimes 4
38 #define ProcessBasePriority 5
39 #define ProcessRaisePriority 6
40 #define ProcessDebugPort 7
41 #define ProcessExceptionPort 8
42 #define ProcessAccessToken 9
43 #define ProcessLdtInformation 10
44 #define ProcessLdtSize 11
45 #define ProcessDefaultHardErrorMode 12
46 #define ProcessIoPortHandlers 13
47 #define ProcessPooledUsageAndLimits 14
48 #define ProcessWorkingSetWatch 15
49 #define ProcessUserModeIOPL 16
50 #define ProcessEnableAlignmentFaultFixup 17
51 #define ProcessPriorityClass 18
52 #define ProcessWx86Information 19
53 #define ProcessHandleCount 20
54 #define ProcessAffinityMask 21
55 #define ProcessImageFileName 22
56 #define MaxProcessInfoClass 23
59 * thread query / set information class
61 #define ThreadBasicInformation 0
63 #define ThreadPriority 2
64 #define ThreadBasePriority 3
65 #define ThreadAffinityMask 4
66 #define ThreadImpersonationToken 5
67 #define ThreadDescriptorTableEntry 6
68 #define ThreadEnableAlignmentFaultFixup 7
69 #define ThreadEventPair 8
70 #define ThreadQuerySetWin32StartAddress 9
71 #define ThreadZeroTlsCell 10
72 #define ThreadPerformanceCount 11
73 #define ThreadAmILastThread 12
74 #define ThreadIdealProcessor 13
75 #define ThreadPriorityBoost 14
76 #define ThreadSetTlsArrayAddress 15
77 #define ThreadIsIoPending 16
78 #define ThreadHideFromDebugger 17
79 #define MaxThreadInfoClass 17
81 // object handle information
83 #define ObjectBasicInformation 0
84 #define ObjectNameInformation 1
85 #define ObjectTypeInformation 2
86 #define ObjectAllInformation 3
87 #define ObjectDataInformation 4
90 // semaphore information
92 typedef enum _SEMAPHORE_INFORMATION_CLASS
94 SemaphoreBasicInformation
= 0
95 } SEMAPHORE_INFORMATION_CLASS
;
97 typedef struct _SEMAPHORE_BASIC_INFORMATION
101 } SEMAPHORE_BASIC_INFORMATION
, *PSEMAPHORE_BASIC_INFORMATION
;
106 typedef enum _EVENT_INFORMATION_CLASS
108 EventBasicInformation
= 0
109 } EVENT_INFORMATION_CLASS
;
111 typedef struct _EVENT_BASIC_INFORMATION
113 EVENT_TYPE EventType
;
115 } EVENT_BASIC_INFORMATION
, *PEVENT_BASIC_INFORMATION
;
118 // system information
119 // {Nt|Zw}{Query|Set}SystemInformation
122 enum _SYSTEM_INFORMATION_CLASS
124 SystemInformationClassMin
= 0,
125 SystemBasicInformation
= 0, /* Q */
126 SystemProcessorInformation
= 1, /* Q */
127 SystemPerformanceInformation
= 2, /* Q */
128 SystemTimeOfDayInformation
= 3, /* Q */
129 SystemPathInformation
= 4, /* Q (checked build only) */
130 SystemProcessInformation
= 5, /* Q */
131 SystemCallCountInfoInformation
= 6, /* Q */
132 SystemDeviceInformation
= 7, /* Q */
133 SystemProcessorPerformanceInformation
= 8, /* Q */
134 SystemFlagsInformation
= 9, /* QS */
135 SystemCallTimeInformation
= 10,
136 SystemModuleInformation
= 11, /* Q */
137 SystemLocksInformation
= 12, /* Q */
138 SystemStackTraceInformation
= 13,
139 SystemPagedPoolInformation
= 14,
140 SystemNonPagedPoolInformation
= 15,
141 SystemHandleInformation
= 16, /* Q */
142 SystemObjectInformation
= 17, /* Q */
143 SystemPageFileInformation
= 18, /* Q */
144 SystemVdmInstemulInformation
= 19, /* Q */
145 SystemVdmBopInformation
= 20,
146 SystemFileCacheInformation
= 21, /* QS */
147 SystemPoolTagInformation
= 22, /* Q (checked build only) */
148 SystemInterruptInformation
= 23, /* Q */
149 SystemDpcBehaviourInformation
= 24, /* QS */
150 SystemFullMemoryInformation
= 25,
151 SystemLoadGdiDriverInformation
= 26, /* S (callable) */
152 SystemUnloadGdiDriverInformation
= 27, /* S (callable) */
153 SystemTimeAdjustmentInformation
= 28, /* QS */
154 SystemSummryMemoryInformation
= 29,
155 SystemNextEventIdInformation
= 30,
156 SystemEventIdsInformation
= 31,
157 SystemCrashDumpInformation
= 32, /* Q */
158 SystemExceptionInformation
= 33, /* Q */
159 SystemCrashDumpStateInformation
= 34, /* Q */
160 SystemKernelDebuggerInformation
= 35, /* Q */
161 SystemContextSwitchInformation
= 36, /* Q */
162 SystemRegistryQuotaInformation
= 37, /* QS */
163 SystemExtendServiceTableInformation
= 38, /* S */
164 SystemPrioritySeperation
= 39, /* S */
165 SystemPlugPlayBusInformation
= 40,
166 SystemDockInformation
= 41,
167 SystemPowerInformation
= 42,
168 SystemProcessorSpeedInformation
= 43,
169 SystemCurrentTimeZoneInformation
= 44, /* QS */
170 SystemLookasideInformation
= 45, /* Q */
171 SystemInformationClassMax
173 } SYSTEM_INFORMATION_CLASS
;
175 // SystemBasicInformation (0)
177 struct _SYSTEM_BASIC_INFORMATION
180 ULONG TimerResolution
;
182 ULONG NumberOfPhysicalPages
;
183 ULONG LowestPhysicalPageNumber
;
184 ULONG HighestPhysicalPageNumber
;
185 ULONG AllocationGranularity
;
186 ULONG MinimumUserModeAddress
;
187 ULONG MaximumUserModeAddress
;
188 KAFFINITY ActiveProcessorsAffinityMask
;
189 CCHAR NumberOfProcessors
;
190 } SYSTEM_BASIC_INFORMATION
, *PSYSTEM_BASIC_INFORMATION
;
192 // SystemProcessorInformation (1)
194 struct _SYSTEM_PROCESSOR_INFORMATION
196 USHORT ProcessorArchitecture
;
197 USHORT ProcessorLevel
;
198 USHORT ProcessorRevision
;
200 ULONG ProcessorFeatureBits
;
201 } SYSTEM_PROCESSOR_INFORMATION
, *PSYSTEM_PROCESSOR_INFORMATION
;
203 // SystemPerformanceInfo (2)
205 struct _SYSTEM_PERFORMANCE_INFORMATION
207 LARGE_INTEGER IdleProcessorTime
;
208 LARGE_INTEGER IoReadTransferCount
;
209 LARGE_INTEGER IoWriteTransferCount
;
210 LARGE_INTEGER IoOtherTransferCount
;
211 ULONG IoReadOperationCount
;
212 ULONG IoWriteOperationCount
;
213 ULONG IoOtherOperationCount
;
214 ULONG AvailablePages
;
217 ULONG PeakCommitment
;
218 ULONG PageFaultCount
;
219 ULONG CopyOnWriteCount
;
220 ULONG TransitionCount
;
221 ULONG CacheTransitionCount
;
222 ULONG DemandZeroCount
;
224 ULONG PageReadIoCount
;
225 ULONG CacheReadCount
;
227 ULONG DirtyPagesWriteCount
;
228 ULONG DirtyWriteIoCount
;
229 ULONG MappedPagesWriteCount
;
230 ULONG MappedWriteIoCount
;
231 ULONG PagedPoolPages
;
232 ULONG NonPagedPoolPages
;
237 ULONG MmTotalSystemFreePtes
;
238 ULONG MmSystemCodepage
;
239 ULONG MmTotalSystemDriverPages
;
240 ULONG MmTotalSystemCodePages
;
244 ULONG MmSystemCachePage
;
245 ULONG MmPagedPoolPage
;
246 ULONG MmSystemDriverPage
;
247 ULONG CcFastReadNoWait
;
248 ULONG CcFastReadWait
;
249 ULONG CcFastReadResourceMiss
;
250 ULONG CcFastReadNotPossible
;
251 ULONG CcFastMdlReadNoWait
;
252 ULONG CcFastMdlReadWait
;
253 ULONG CcFastMdlReadResourceMiss
;
254 ULONG CcFastMdlReadNotPossible
;
255 ULONG CcMapDataNoWait
;
257 ULONG CcMapDataNoWaitMiss
;
258 ULONG CcMapDataWaitMiss
;
259 ULONG CcPinMappedDataCount
;
260 ULONG CcPinReadNoWait
;
262 ULONG CcPinReadNoWaitMiss
;
263 ULONG CcPinReadWaitMiss
;
264 ULONG CcCopyReadNoWait
;
265 ULONG CcCopyReadWait
;
266 ULONG CcCopyReadNoWaitMiss
;
267 ULONG CcCopyReadWaitMiss
;
268 ULONG CcMdlReadNoWait
;
270 ULONG CcMdlReadNoWaitMiss
;
271 ULONG CcMdlReadWaitMiss
;
272 ULONG CcReadaheadIos
;
273 ULONG CcLazyWriteIos
;
274 ULONG CcLazyWritePages
;
277 ULONG ContextSwitches
;
282 } SYSTEM_PERFORMANCE_INFO
, *PSYSTEM_PERFORMANCE_INFO
;
284 // SystemTimeOfDayInformation (3)
286 struct _SYSTEM_TIMEOFDAY_INFORMATION
288 LARGE_INTEGER BootTime
;
289 LARGE_INTEGER CurrentTime
;
290 LARGE_INTEGER TimeZoneBias
;
293 } SYSTEM_TIMEOFDAY_INFORMATION
, *PSYSTEM_TIMEOFDAY_INFORMATION
;
295 // SystemPathInformation (4)
298 struct _SYSTEM_PATH_INFORMATION
302 } SYSTEM_PATH_INFORMATION
, * PSYSTEM_PATH_INFORMATION
;
304 // SystemProcessInformation (5)
306 struct _SYSTEM_THREAD_INFORMATION
314 ULONG DynamicPriority
;
318 KWAIT_REASON WaitReason
;
320 } SYSTEM_THREAD_INFORMATION
, *PSYSTEM_THREAD_INFORMATION
;
323 struct SYSTEM_PROCESS_INFORMATION
325 ULONG RelativeOffset
;
334 ULONG ParentProcessId
;
337 ULONG PeakVirtualSizeBytes
;
338 ULONG TotalVirtualSizeBytes
;
339 ULONG PageFaultCount
;
340 ULONG PeakWorkingSetSizeBytes
;
341 ULONG TotalWorkingSetSizeBytes
;
342 ULONG PeakPagedPoolUsagePages
;
343 ULONG TotalPagedPoolUsagePages
;
344 ULONG PeakNonPagedPoolUsagePages
;
345 ULONG TotalNonPagedPoolUsagePages
;
346 ULONG TotalPageFileUsageBytes
;
347 ULONG PeakPageFileUsageBytes
;
348 ULONG TotalPrivateBytes
;
349 SYSTEM_THREAD_INFORMATION ThreadSysInfo
[1];
351 } SYSTEM_PROCESS_INFORMATION
, *PSYSTEM_PROCESS_INFORMATION
;
353 // SystemCallCountInformation (6)
355 struct _SYSTEM_SDT_INFORMATION
358 ULONG NumberOfSystemServiceTables
;
359 ULONG NumberOfServices
[1];
360 ULONG ServiceCounters
[1];
362 } SYSTEM_SDT_INFORMATION
, *PSYSTEM_SDT_INFORMATION
;
364 // SystemDeviceInformation (7)
366 struct _SYSTEM_DEVICE_INFORMATION
369 ULONG NumberOfFloppies
;
370 ULONG NumberOfCdRoms
;
372 ULONG NumberOfSerialPorts
;
373 ULONG NumberOfParallelPorts
;
374 } SYSTEM_DEVICE_INFORMATION
, *PSYSTEM_DEVICE_INFORMATION
;
376 // SystemProcessorPerformanceInformation (8)
378 struct _SYSTEM_PROCESSORTIME_INFO
380 TIME TotalProcessorRunTime
;
381 TIME TotalProcessorTime
;
382 TIME TotalProcessorUserTime
;
384 TIME TotalInterruptTime
;
385 ULONG TotalInterrupts
;
388 } SYSTEM_PROCESSORTIME_INFO
, *PSYSTEM_PROCESSORTIME_INFO
;
390 // SystemFlagsInformation (9)
392 struct _SYSTEM_FLAGS_INFORMATION
396 } SYSTEM_FLAGS_INFORMATION
, * PSYSTEM_FLAGS_INFORMATION
;
398 #define FLG_STOP_ON_EXCEPTION 0x00000001
399 #define FLG_SHOW_LDR_SNAPS 0x00000002
400 #define FLG_DEBUG_INITIAL_COMMAND 0x00000004
401 #define FLG_STOP_ON_HANG_GUI 0x00000008
402 #define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
403 #define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
404 #define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
405 #define FLG_HEAP_VALIDATE_ALL 0x00000080
406 #define FLG_POOL_ENABLE_TAIL_CHECK 0x00000100
407 #define FLG_POOL_ENABLE_FREE_CHECK 0x00000200
408 #define FLG_POOL_ENABLE_TAGGING 0x00000400
409 #define FLG_HEAP_ENABLE_TAGGING 0x00000800
410 #define FLG_USER_STACK_TRACE_DB 0x00001000
411 #define FLG_KERNEL_STACK_TRACE_DB 0x00002000
412 #define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
413 #define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
414 #define FLG_IGNORE_DEBUG_PRIV 0x00010000
415 #define FLG_ENABLE_CSRDEBUG 0x00020000
416 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
417 #define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
418 #define FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
419 #define FLG_HEAP_DISABLE_COALESCING 0x00200000
420 #define FLG_ENABLE_CLOSE_EXCEPTION 0x00400000
421 #define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
422 #define FLG_UNKNOWN_01000000 0x01000000
423 #define FLG_UNKNOWN_02000000 0x02000000
424 #define FLG_UNKNOWN_04000000 0x04000000
425 #define FLG_ENABLE_DBGPRINT_BUFFERING 0x08000000
426 #define FLG_UNKNOWN_10000000 0x10000000
427 #define FLG_UNKNOWN_20000000 0x20000000
428 #define FLG_UNKNOWN_40000000 0x40000000
429 #define FLG_UNKNOWN_80000000 0x80000000
431 // SystemCallTimeInformation (10)
434 // SystemModuleInformation (11)
436 struct _SYSTEM_MODULE_ENTRY
444 USHORT NameLength
; /* Length of module name not including the path, this field contains valid value only for NTOSKRNL module*/
445 USHORT PathLength
; /* Length of 'directory path' part of modulename*/
447 } SYSTEM_MODULE_ENTRY
, * PSYSTEM_MODULE_ENTRY
;
450 struct _SYSTEM_MODULE_INFORMATION
453 SYSTEM_MODULE_ENTRY Module
[1];
454 } SYSTEM_MODULE_INFORMATION
, *PSYSTEM_MODULE_INFORMATION
;
456 // SystemLocksInformation (12)
458 struct _SYSTEM_RESOURCE_LOCK_ENTRY
460 ULONG ResourceAddress
;
464 ULONG ContentionCount
;
466 ULONG NumberOfSharedWaiters
;
467 ULONG NumberOfExclusiveWaiters
;
469 } SYSTEM_RESOURCE_LOCK_ENTRY
, *PSYSTEM_RESOURCE_LOCK_ENTRY
;
472 struct _SYSTEM_RESOURCE_LOCK_INFO
475 SYSTEM_RESOURCE_LOCK_ENTRY Lock
[1];
477 } SYSTEM_RESOURCE_LOCK_INFO
, *PSYSTEM_RESOURCE_LOCK_INFO
;
479 // SystemInformation13 (13)
482 // SystemInformation14 (14)
485 // SystemInformation15 (15)
488 // SystemHandleInformation (16)
491 struct _SYSTEM_HANDLE_ENTRY
500 } SYSTEM_HANDLE_ENTRY
, *PSYSTEM_HANDLE_ENTRY
;
503 struct _SYSTEM_HANDLE_INFORMATION
506 SYSTEM_HANDLE_ENTRY Handle
[1];
508 } SYSTEM_HANDLE_INFORMATION
, *PSYSTEM_HANDLE_INFORMATION
;
510 // SystemObjectInformation (17)
513 struct _SYSTEM_OBJECT_INFORMATION
517 } SYSTEM_OBJECT_INFORMATION
, *PSYSTEM_OBJECT_INFORMATION
;
519 // SystemPageFileInformation (18)
521 struct _SYSTEM_PAGEFILE_INFORMATION
523 ULONG RelativeOffset
;
524 ULONG CurrentSizePages
;
525 ULONG TotalUsedPages
;
527 UNICODE_STRING PagefileFileName
;
529 } SYSTEM_PAGEFILE_INFORMATION
, *PSYSTEM_PAGEFILE_INFORMATION
;
531 // SystemInstructionEmulationInfo (19)
533 struct _SYSTEM_VDM_INFORMATION
535 ULONG VdmSegmentNotPresentCount
;
537 ULONG VdmESPREFIXCount
;
538 ULONG VdmCSPREFIXCount
;
539 ULONG VdmSSPREFIXCount
;
540 ULONG VdmDSPREFIXCount
;
541 ULONG VdmFSPREFIXCount
;
542 ULONG VdmGSPREFIXCount
;
543 ULONG VdmOPER32PREFIXCount
;
544 ULONG VdmADDR32PREFIXCount
;
546 ULONG VdmINSWV86Count
;
554 ULONG VdmINBIMMCount
;
555 ULONG VdmINWIMMCount
;
556 ULONG VdmOUTBIMMCount
;
557 ULONG VdmOUTWIMMCount
;
562 ULONG VdmLOCKPREFIXCount
;
563 ULONG VdmREPNEPREFIXCount
;
564 ULONG VdmREPPREFIXCount
;
570 } SYSTEM_VDM_INFORMATION
, *PSYSTEM_VDM_INFORMATION
;
572 // SystemInformation20 (20)
575 // SystemCacheInformation (21)
577 struct _SYSTEM_CACHE_INFORMATION
581 ULONG PageFaultCount
;
582 ULONG MinimumWorkingSet
;
583 ULONG MaximumWorkingSet
;
586 } SYSTEM_CACHE_INFORMATION
;
588 // SystemPoolTagInformation (22)
589 // found by Klaus P. Gerlicher
590 // (implemented only in checked builds)
592 struct _POOL_TAG_STATS
594 ULONG AllocationCount
;
601 struct _SYSTEM_POOL_TAG_ENTRY
604 POOL_TAG_STATS Paged
;
605 POOL_TAG_STATS NonPaged
;
607 } SYSTEM_POOL_TAG_ENTRY
, * PSYSTEM_POOL_TAG_ENTRY
;
610 struct _SYSTEM_POOL_TAG_INFO
613 SYSTEM_POOL_TAG_ENTRY PoolEntry
[1];
615 } SYSTEM_POOL_TAG_INFO
, *PSYSTEM_POOL_TAG_INFO
;
617 // SystemProcessorScheduleInfo (23)
619 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
621 ULONG nContextSwitches
;
624 ULONG TimerResolution
;
628 } SYSTEM_PROCESSOR_SCHEDULE_INFO
, *PSYSTEM_PROCESSOR_SCHEDULE_INFO
;
630 // SystemDpcInformation (24)
632 struct _SYSTEM_DPC_INFORMATION
635 ULONG KiMaximumDpcQueueDepth
;
636 ULONG KiMinimumDpcRate
;
637 ULONG KiAdjustDpcThreshold
;
638 ULONG KiIdealDpcRate
;
640 } SYSTEM_DPC_INFORMATION
, *PSYSTEM_DPC_INFORMATION
;
642 // SystemInformation25 (25)
645 // SystemLoadGdiDriverInformation (26)
646 // SystemUnloadGdiDriverInformation (27)
647 typedef struct _SYSTEM_GDI_DRIVER_INFORMATION
649 UNICODE_STRING DriverName
;
651 PVOID SectionPointer
;
653 // PIMAGE_EXPORT_DIRECTORY ExportSectionPointer;
654 PVOID ExportSectionPointer
;
655 } SYSTEM_GDI_DRIVER_INFORMATION
, *PSYSTEM_GDI_DRIVER_INFORMATION
;
657 // SystemTimeAdjustmentInformation (28)
658 // (what is the right one?)
661 struct _SYSTEM_TIME_ADJUSTMENT_INFO
664 BOOL TimeAdjustmentDisabled
;
666 } SYSTEM_TIME_ADJUSTMENT_INFO
, *PSYSTEM_TIME_ADJUSTMENT_INFO
;
669 struct _SYSTEM_TIME_ADJUSTMENT_INFO
671 ULONG KeTimeAdjustment
;
672 ULONG KeMaximumIncrement
;
673 BOOLEAN KeTimeSynchronization
;
675 } SYSTEM_TIME_ADJUSTMENT_INFO
, *PSYSTEM_TIME_ADJUSTMENT_INFO
;
678 // SystemProcessorFaultCountInfo (33)
680 struct _SYSTEM_PROCESSOR_FAULT_INFO
682 ULONG nAlignmentFixup
;
683 ULONG nExceptionDispatches
;
684 ULONG nFloatingEmulation
;
687 } SYSTEM_PROCESSOR_FAULT_INFO
, *PSYSTEM_PROCESSOR_FAULT_INFO
;
689 // SystemCrashDumpStateInfo (34)
692 // SystemDebuggerInformation (35)
694 struct _SYSTEM_DEBUGGER_INFO
696 BOOLEAN KdDebuggerEnabled
;
697 BOOLEAN KdDebuggerPresent
;
699 } SYSTEM_DEBUGGER_INFO
, *PSYSTEM_DEBUGGER_INFO
;
701 // SystemInformation36 (36)
704 // SystemQuotaInformation (37)
706 struct _SYSTEM_QUOTA_INFORMATION
708 ULONG CmpGlobalQuota
;
709 ULONG CmpGlobalQuotaUsed
;
710 ULONG MmSizeofPagedPoolInBytes
;
712 } SYSTEM_QUOTA_INFORMATION
, *PSYSTEM_QUOTA_INFORMATION
;
714 // SystemLoadDriver (38)
716 struct _SYSTEM_DRIVER_LOAD
718 UNICODE_STRING DriverRegistryEntry
;
720 } SYSTEM_DRIVER_LOAD
, *PSYSTEM_DRIVER_LOAD
;
722 // SystemTimeZoneInformation (44)
724 struct _SYSTEM_TIME_ZONE_INFORMATION
727 WCHAR StandardName
[32];
730 WCHAR DaylightName
[32];
734 } SYSTEM_TIME_ZONE_INFORMATION
, * PSYSTEM_TIME_ZONE_INFORMATION
;
736 // memory information
738 #define MemoryBasicInformation 0
742 typedef enum SHUTDOWN_ACTION_TAG
{
753 // number of wait objects
755 #define THREAD_WAIT_OBJECTS 3
756 //#define MAXIMUM_WAIT_OBJECTS 64
760 #define REG_WHOLE_HIVE_VOLATILE 1
761 #define REG_REFRESH_HIVE 2
763 // object type access rights
765 #define OBJECT_TYPE_CREATE 0x0001
766 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
768 // directory access rights
770 #define DIRECTORY_QUERY 0x0001
771 #define DIRECTORY_TRAVERSE 0x0002
772 #define DIRECTORY_CREATE_OBJECT 0x0004
773 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
775 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
777 // symbolic link access rights
779 #define SYMBOLIC_LINK_QUERY 0x0001
780 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
782 typedef struct _PROCESS_WS_WATCH_INFORMATION
786 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
788 typedef struct _PROCESS_BASIC_INFORMATION
792 KAFFINITY AffinityMask
;
793 KPRIORITY BasePriority
;
794 ULONG UniqueProcessId
;
795 ULONG InheritedFromUniqueProcessId
;
796 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
798 typedef struct _QUOTA_LIMITS
800 ULONG PagedPoolLimit
;
801 ULONG NonPagedPoolLimit
;
802 ULONG MinimumWorkingSetSize
;
803 ULONG MaximumWorkingSetSize
;
806 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
808 typedef struct _IO_COUNTERS
810 ULONG ReadOperationCount
;
811 ULONG WriteOperationCount
;
812 ULONG OtherOperationCount
;
813 LARGE_INTEGER ReadTransferCount
;
814 LARGE_INTEGER WriteTransferCount
;
815 LARGE_INTEGER OtherTransferCount
;
816 } IO_COUNTERS
, *PIO_COUNTERS
;
819 typedef struct _VM_COUNTERS_
821 ULONG PeakVirtualSize
;
823 ULONG PageFaultCount
;
824 ULONG PeakWorkingSetSize
;
825 ULONG WorkingSetSize
;
826 ULONG QuotaPeakPagedPoolUsage
;
827 ULONG QuotaPagedPoolUsage
;
828 ULONG QuotaPeakNonPagedPoolUsage
;
829 ULONG QuotaNonPagedPoolUsage
;
831 ULONG PeakPagefileUsage
;
832 } VM_COUNTERS
, *PVM_COUNTERS
;
835 typedef struct _POOLED_USAGE_AND_LIMITS_
837 ULONG PeakPagedPoolUsage
;
838 ULONG PagedPoolUsage
;
839 ULONG PagedPoolLimit
;
840 ULONG PeakNonPagedPoolUsage
;
841 ULONG NonPagedPoolUsage
;
842 ULONG NonPagedPoolLimit
;
843 ULONG PeakPagefileUsage
;
846 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
849 typedef struct _PROCESS_ACCESS_TOKEN
853 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
855 typedef struct _KERNEL_USER_TIMES
862 typedef KERNEL_USER_TIMES
*PKERNEL_USER_TIMES
;
864 // thread information
866 // incompatible with MS NT
868 typedef struct _THREAD_BASIC_INFORMATION
871 PVOID TebBaseAddress
;
873 KAFFINITY AffinityMask
;
875 KPRIORITY BasePriority
;
876 } THREAD_BASIC_INFORMATION
, *PTHREAD_BASIC_INFORMATION
;
878 // object information
880 typedef struct _OBJECT_NAME_INFORMATION
883 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
887 typedef struct _OBJECT_DATA_INFORMATION
889 BOOLEAN bInheritHandle
;
890 BOOLEAN bProtectFromClose
;
891 } OBJECT_DATA_INFORMATION
, *POBJECT_DATA_INFORMATION
;
894 typedef struct _OBJECT_TYPE_INFORMATION
899 ULONG ReferenceCount
;
900 } OBJECT_TYPE_INFORMATION
, *POBJECT_TYPE_INFORMATION
;
904 typedef struct _FILE_BASIC_INFORMATION
910 ULONG FileAttributes
;
911 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
913 typedef struct _FILE_STANDARD_INFORMATION
915 LARGE_INTEGER AllocationSize
;
916 LARGE_INTEGER EndOfFile
;
918 BOOLEAN DeletePending
;
920 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
922 typedef struct _FILE_POSITION_INFORMATION
924 LARGE_INTEGER CurrentByteOffset
;
925 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
927 typedef struct _FILE_ALIGNMENT_INFORMATION
929 ULONG AlignmentRequirement
;
930 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
932 typedef struct _FILE_DISPOSITION_INFORMATION
934 BOOLEAN DoDeleteFile
;
935 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
937 typedef struct _FILE_END_OF_FILE_INFORMATION
939 LARGE_INTEGER EndOfFile
;
940 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
942 typedef struct _FILE_NETWORK_OPEN_INFORMATION
948 LARGE_INTEGER AllocationSize
;
949 LARGE_INTEGER EndOfFile
;
950 ULONG FileAttributes
;
951 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
953 typedef struct _FILE_FULL_EA_INFORMATION
955 ULONG NextEntryOffset
;
958 USHORT EaValueLength
;
960 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
963 typedef struct _FILE_EA_INFORMATION
{
965 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
968 typedef struct _FILE_GET_EA_INFORMATION
{
969 ULONG NextEntryOffset
;
972 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
974 typedef struct _FILE_STREAM_INFORMATION
{
975 ULONG NextEntryOffset
;
976 ULONG StreamNameLength
;
977 LARGE_INTEGER StreamSize
;
978 LARGE_INTEGER StreamAllocationSize
;
980 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
982 typedef struct _FILE_ALLOCATION_INFORMATION
{
983 LARGE_INTEGER AllocationSize
;
984 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
986 typedef struct _FILE_NAME_INFORMATION
{
987 ULONG FileNameLength
;
989 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
991 typedef struct _FILE_NAMES_INFORMATION
993 ULONG NextEntryOffset
;
995 ULONG FileNameLength
;
997 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
1000 typedef struct _FILE_RENAME_INFORMATION
{
1003 ULONG FileNameLength
;
1005 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
1008 typedef struct _FILE_INTERNAL_INFORMATION
{
1009 LARGE_INTEGER IndexNumber
;
1010 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
1012 typedef struct _FILE_ACCESS_INFORMATION
{
1013 ACCESS_MASK AccessFlags
;
1014 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
1017 typedef struct _FILE_MODE_INFORMATION
{
1019 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
1021 typedef struct _FILE_COMPRESSION_INFORMATION
{
1022 LARGE_INTEGER CompressedFileSize
;
1023 USHORT CompressionFormat
;
1024 UCHAR CompressionUnitShift
;
1028 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
1030 typedef struct _FILE_ALL_INFORMATION
{
1031 FILE_BASIC_INFORMATION BasicInformation
;
1032 FILE_STANDARD_INFORMATION StandardInformation
;
1033 FILE_INTERNAL_INFORMATION InternalInformation
;
1034 FILE_EA_INFORMATION EaInformation
;
1035 FILE_ACCESS_INFORMATION AccessInformation
;
1036 FILE_POSITION_INFORMATION PositionInformation
;
1037 FILE_MODE_INFORMATION ModeInformation
;
1038 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
1039 FILE_NAME_INFORMATION NameInformation
;
1040 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
1042 // file system information structures
1044 typedef struct _FILE_FS_DEVICE_INFORMATION
{
1045 DEVICE_TYPE DeviceType
;
1046 ULONG Characteristics
;
1047 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1050 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1051 TIME VolumeCreationTime
;
1052 ULONG VolumeSerialNumber
;
1053 ULONG VolumeLabelLength
;
1054 BOOLEAN SupportsObjects
;
1055 WCHAR VolumeLabel
[0];
1056 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1058 typedef struct _FILE_FS_SIZE_INFORMATION
{
1059 LARGE_INTEGER TotalAllocationUnits
;
1060 LARGE_INTEGER AvailableAllocationUnits
;
1061 ULONG SectorsPerAllocationUnit
;
1062 ULONG BytesPerSector
;
1063 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1065 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
1066 ULONG FileSystemAttributes
;
1067 LONG MaximumComponentNameLength
;
1068 ULONG FileSystemNameLength
;
1069 WCHAR FileSystemName
[0];
1070 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
1073 FileSystemAttributes is one of the following values:
1075 FILE_CASE_SENSITIVE_SEARCH 0x00000001
1076 FILE_CASE_PRESERVED_NAMES 0x00000002
1077 FILE_UNICODE_ON_DISK 0x00000004
1078 FILE_PERSISTENT_ACLS 0x00000008
1079 FILE_FILE_COMPRESSION 0x00000010
1080 FILE_VOLUME_QUOTAS 0x00000020
1081 FILE_VOLUME_IS_COMPRESSED 0x00008000
1083 typedef struct _FILE_FS_LABEL_INFORMATION
{
1084 ULONG VolumeLabelLength
;
1085 WCHAR VolumeLabel
[0];
1086 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1088 // read file scatter / write file scatter
1089 //FIXME I am a win32 struct aswell
1091 typedef union _FILE_SEGMENT_ELEMENT
{
1094 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1096 // directory information
1098 typedef struct _OBJDIR_INFORMATION
{
1099 UNICODE_STRING ObjectName
;
1100 UNICODE_STRING ObjectTypeName
; // Directory, Device ...
1102 } OBJDIR_INFORMATION
, *POBJDIR_INFORMATION
;
1105 typedef struct _FILE_DIRECTORY_INFORMATION
{
1106 ULONG NextEntryOffset
;
1109 TIME LastAccessTime
;
1112 LARGE_INTEGER EndOfFile
;
1113 LARGE_INTEGER AllocationSize
;
1114 ULONG FileAttributes
;
1115 ULONG FileNameLength
;
1117 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
1119 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
1120 ULONG NextEntryOffset
;
1123 TIME LastAccessTime
;
1126 LARGE_INTEGER EndOfFile
;
1127 LARGE_INTEGER AllocationSize
;
1128 ULONG FileAttributes
;
1129 ULONG FileNameLength
;
1131 WCHAR FileName
[0]; // variable size
1132 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
,
1133 FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
1136 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
{
1137 ULONG NextEntryOffset
;
1140 TIME LastAccessTime
;
1143 LARGE_INTEGER EndOfFile
;
1144 LARGE_INTEGER AllocationSize
;
1145 ULONG FileAttributes
;
1146 ULONG FileNameLength
;
1148 CHAR ShortNameLength
;
1149 WCHAR ShortName
[12]; // 8.3 name
1151 } FILE_BOTH_DIRECTORY_INFORMATION
, *PFILE_BOTH_DIRECTORY_INFORMATION
,
1152 FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
1156 NotifyFilter / CompletionFilter:
1158 FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
1159 FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
1160 FILE_NOTIFY_CHANGE_NAME 0x00000003
1161 FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
1162 FILE_NOTIFY_CHANGE_SIZE 0x00000008
1163 FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
1164 FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
1165 FILE_NOTIFY_CHANGE_CREATION 0x00000040
1166 FILE_NOTIFY_CHANGE_EA 0x00000080
1167 FILE_NOTIFY_CHANGE_SECURITY 0x00000100
1168 FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
1169 FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
1170 FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
1173 typedef struct _FILE_NOTIFY_INFORMATION
{
1175 ULONG FileNameLength
;
1177 } FILE_NOTIFY_INFORMATION
;
1181 Action is one of the following values:
1183 FILE_ACTION_ADDED 0x00000001
1184 FILE_ACTION_REMOVED 0x00000002
1185 FILE_ACTION_MODIFIED 0x00000003
1186 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
1187 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
1188 FILE_ACTION_ADDED_STREAM 0x00000006
1189 FILE_ACTION_REMOVED_STREAM 0x00000007
1190 FILE_ACTION_MODIFIED_STREAM 0x00000008
1195 //FIXME: I am a win32 object
1198 (*PTIMERAPCROUTINE
)(
1199 LPVOID lpArgToCompletionRoutine
,
1200 DWORD dwTimerLowValue
,
1201 DWORD dwTimerHighValue
1205 // File System Control commands ( related to defragging )
1207 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
1208 #define FSCTL_GET_VOLUME_BITMAP 0x9006F
1209 #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
1210 #define FSCTL_MOVE_FILE 0x90074
1212 typedef struct _MAPPING_PAIR
1216 } MAPPING_PAIR
, *PMAPPING_PAIR
;
1218 typedef struct _GET_RETRIEVAL_DESCRIPTOR
1220 ULONG NumberOfPairs
;
1222 MAPPING_PAIR Pair
[0]; // variable size
1223 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
1225 typedef struct _BITMAP_DESCRIPTOR
1228 ULONGLONG ClustersToEndOfVol
;
1229 BYTE Map
[0]; // variable size
1230 } BITMAP_DESCRIPTOR
, *PBITMAP_DESCRIPTOR
;
1232 typedef struct _MOVEFILE_DESCRIPTOR
1236 LARGE_INTEGER StartVcn
;
1237 LARGE_INTEGER TargetLcn
;
1240 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
1244 //typedef enum _TIMER_TYPE
1246 // NotificationTimer,
1247 // SynchronizationTimer
1251 struct _LPC_PORT_BASIC_INFORMATION
1268 } LPC_PORT_BASIC_INFORMATION
, * PLPC_PORT_BASIC_INFORMATION
;