1 #ifndef __INCLUDE_DDK_ZWTYPES_H
2 #define __INCLUDE_DDK_ZWTYPES_H
4 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
5 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
11 #define EVENT_READ_ACCESS 1
12 #define EVENT_WRITE_ACCESS 2
15 // file disposition values
18 #define FILE_SUPERSEDE 0x0000
19 #define FILE_OPEN 0x0001
20 #define FILE_CREATE 0x0002
21 #define FILE_OPEN_IF 0x0003
22 #define FILE_OVERWRITE 0x0004
23 #define FILE_OVERWRITE_IF 0x0005
24 #define FILE_MAXIMUM_DISPOSITION 0x0005
26 //process query / set information class
28 #define ProcessBasicInformation 0
29 #define ProcessQuotaLimits 1
30 #define ProcessIoCounters 2
31 #define ProcessVmCounters 3
32 #define ProcessTimes 4
33 #define ProcessBasePriority 5
34 #define ProcessRaisePriority 6
35 #define ProcessDebugPort 7
36 #define ProcessExceptionPort 8
37 #define ProcessAccessToken 9
38 #define ProcessLdtInformation 10
39 #define ProcessLdtSize 11
40 #define ProcessDefaultHardErrorMode 12
41 #define ProcessIoPortHandlers 13
42 #define ProcessPooledUsageAndLimits 14
43 #define ProcessWorkingSetWatch 15
44 #define ProcessUserModeIOPL 16
45 #define ProcessEnableAlignmentFaultFixup 17
46 #define ProcessPriorityClass 18
47 #define ProcessWx86Information 19
48 #define ProcessHandleCount 20
49 #define ProcessAffinityMask 21
50 #define ProcessImageFileName 22
51 #define MaxProcessInfoClass 23
53 // thread query / set information class
54 #define ThreadBasicInformation 0
56 #define ThreadPriority 2
57 #define ThreadBasePriority 3
58 #define ThreadAffinityMask 4
59 #define ThreadImpersonationToken 5
60 #define ThreadDescriptorTableEntry 6
61 #define ThreadEnableAlignmentFaultFixup 7
62 #define ThreadEventPair 8
63 #define ThreadQuerySetWin32StartAddress 9
64 #define ThreadZeroTlsCell 10
65 #define ThreadPerformanceCount 11
66 #define ThreadAmILastThread 12
67 #define ThreadIdealProcessor 13
68 #define ThreadPriorityBoost 14
69 #define MaxThreadInfoClass 15
71 // object handle information
73 #define ObjectBasicInformation 0
74 #define ObjectNameInformation 1
75 #define ObjectTypeInformation 2
76 #define ObjectAllInformation 3
77 #define ObjectDataInformation 4
79 // semaphore information
81 #define SemaphoreBasicInformation 0
85 #define EventBasicInformation 0
88 // {Nt|Zw}{Query|Set}SystemInformation
91 enum _SYSTEM_INFORMATION_CLASS
93 SystemInformationClassMin
= 0,
94 SystemBasicInformation
= 0, /* Q */
95 SystemProcessorInformation
= 1, /* Q */
96 SystemPerformanceInformation
= 2, /* Q */
97 SystemTimeInformation
= 3, /* Q */
98 SystemPathInformation
= 4,
99 SystemProcessInformation
= 5, /* Q */
100 SystemServiceDescriptorTableInfo
= 6, /* Q */
101 SystemIoConfigInformation
= 7, /* Q */
102 SystemProcessorTimeInformation
= 8, /* Q */
103 SystemNtGlobalFlagInformation
= 9, /* QS */
104 SystemInformation10
= 10,
105 SystemModuleInformation
= 11, /* Q */
106 SystemResourceLockInformation
= 12, /* Q */
107 SystemInformation13
= 13,
108 SystemInformation14
= 14,
109 SystemInformation15
= 15,
110 SystemHandleInformation
= 16, /* Q */
111 SystemObjectInformation
= 17, /* Q */
112 SystemPageFileInformation
= 18, /* Q */
113 SystemInstructionEmulationInfo
= 19, /* Q */
114 SystemInformation20
= 20,
115 SystemCacheInformation
= 21, /* QS */
116 SystemPoolTagInformation
= 22, /* Q (checked build only) */
117 SystemProcessorScheduleInfo
= 23, /* Q */
118 SystemDpcInformation
= 24, /* QS */
119 SystemInformation25
= 25,
120 SystemLoadImage
= 26, /* S (callable) */
121 SystemUnloadImage
= 27, /* S (callable) */
122 SystemTimeAdjustmentInformation
= 28, /* QS */
123 SystemInformation29
= 29,
124 SystemInformation30
= 30,
125 SystemInformation31
= 31,
126 SystemCrashDumpSectionInfo
= 32, /* Q */
127 SystemProcessorFaultCountInfo
= 33, /* Q */
128 SystemCrashDumpStateInfo
= 34, /* Q */
129 SystemDebuggerInformation
= 35, /* Q */
130 SystemThreadSwitchCountersInfo
= 36, /* Q */
131 SystemQuotaInformation
= 37, /* QS */
132 SystemLoadDriver
= 38, /* S */
133 SystemPrioritySeparationInfo
= 39, /* S */
134 SystemInformation40
= 40,
135 SystemInformation41
= 41,
136 SystemInformation42
= 42,
137 SystemInformation43
= 43,
138 SystemTimeZoneInformation
= 44, /* QS */
139 SystemLookasideInformation
= 45, /* Q */
140 SystemInformationClassMax
142 } SYSTEM_INFORMATION_CLASS
;
144 // SystemBasicInformation (0)
146 struct _SYSTEM_BASIC_INFORMATION
149 ULONG KeMaximumIncrement
;
151 ULONG MmNumberOfPhysicalPages
;
152 ULONG MmLowestPhysicalPage
;
153 ULONG MmHighestPhysicalPage
;
154 PVOID MmLowestUserAddress
;
155 PVOID MmLowestUserAddress1
;
156 PVOID MmHighestUserAddress
;
157 DWORD KeActiveProcessors
;
158 USHORT KeNumberProcessors
;
160 } SYSTEM_BASIC_INFORMATION
, *PSYSTEM_BASIC_INFORMATION
;
162 // SystemProcessorInformation (1)
164 struct _SYSTEM_PROCESSOR_INFORMATION
166 USHORT KeProcessorArchitecture
;
167 USHORT KeProcessorLevel
;
168 USHORT KeProcessorRevision
;
172 } SYSTEM_PROCESSOR_INFORMATION
, *PSYSTEM_PROCESSOR_INFORMATION
;
174 // SystemPerformanceInfo (2)
176 struct _SYSTEM_PERFORMANCE_INFO
178 LARGE_INTEGER TotalProcessorTime
;
179 LARGE_INTEGER IoReadTransferCount
;
180 LARGE_INTEGER IoWriteTransferCount
;
181 LARGE_INTEGER IoOtherTransferCount
;
182 ULONG IoReadOperationCount
;
183 ULONG IoWriteOperationCount
;
184 ULONG IoOtherOperationCount
;
185 ULONG MmAvailablePages
;
186 ULONG MmTotalCommitedPages
;
187 ULONG MmTotalCommitLimit
;
191 ULONG TransitionFaults
;
193 ULONG DemandZeroFaults
;
202 ULONG PoolPagedBytes
;
203 ULONG PoolNonPagedBytes
;
208 ULONG MmTotalSystemFreePtes
;
209 ULONG MmSystemCodepage
;
210 ULONG MmTotalSystemDriverPages
;
211 ULONG MmTotalSystemCodePages
;
215 ULONG MmSystemCachePage
;
216 ULONG MmPagedPoolPage
;
217 ULONG MmSystemDriverPage
;
218 ULONG CcFastReadNoWait
;
219 ULONG CcFastReadWait
;
220 ULONG CcFastReadResourceMiss
;
221 ULONG CcFastReadNotPossible
;
222 ULONG CcFastMdlReadNoWait
;
223 ULONG CcFastMdlReadWait
;
224 ULONG CcFastMdlReadResourceMiss
;
225 ULONG CcFastMdlReadNotPossible
;
226 ULONG CcMapDataNoWait
;
228 ULONG CcMapDataNoWaitMiss
;
229 ULONG CcMapDataWaitMiss
;
230 ULONG CcPinMappedDataCount
;
231 ULONG CcPinReadNoWait
;
233 ULONG CcPinReadNoWaitMiss
;
234 ULONG CcPinReadWaitMiss
;
235 ULONG CcCopyReadNoWait
;
236 ULONG CcCopyReadWait
;
237 ULONG CcCopyReadNoWaitMiss
;
238 ULONG CcCopyReadWaitMiss
;
239 ULONG CcMdlReadNoWait
;
241 ULONG CcMdlReadNoWaitMiss
;
242 ULONG CcMdlReadWaitMiss
;
243 ULONG CcReadaheadIos
;
244 ULONG CcLazyWriteIos
;
245 ULONG CcLazyWritePages
;
248 ULONG ContextSwitches
;
253 } SYSTEM_PERFORMANCE_INFO
, *PSYSTEM_PERFORMANCE_INFO
;
255 // SystemTimeInformation (3)
257 struct _SYSTEM_TIME_INFORMATION
261 TIME ExpTimeZoneBias
;
265 } SYSTEM_TIME_INFORMATION
, *PSYSTEM_TIME_INFORMATION
;
267 // SystemPathInformation (4)
270 struct _SYSTEM_PATH_INFORMATION
274 } SYSTEM_PATH_INFORMATION
, * PSYSTEM_PATH_INFORMATION
;
276 // SystemProcessThreadInfo (5)
278 struct _SYSTEM_THREAD_INFORMATION
286 ULONG DynamicPriority
;
290 KWAIT_REASON WaitReason
;
292 } SYSTEM_THREAD_INFORMATION
, *PSYSTEM_THREAD_INFORMATION
;
295 struct SYSTEM_PROCESS_INFORMATION
297 ULONG RelativeOffset
;
306 ULONG ParentProcessId
;
309 ULONG PeakVirtualSizeBytes
;
310 ULONG TotalVirtualSizeBytes
;
311 ULONG PageFaultCount
;
312 ULONG PeakWorkingSetSizeBytes
;
313 ULONG TotalWorkingSetSizeBytes
;
314 ULONG PeakPagedPoolUsagePages
;
315 ULONG TotalPagedPoolUsagePages
;
316 ULONG PeakNonPagedPoolUsagePages
;
317 ULONG TotalNonPagedPoolUsagePages
;
318 ULONG TotalPageFileUsageBytes
;
319 ULONG PeakPageFileUsageBytes
;
320 ULONG TotalPrivateBytes
;
321 SYSTEM_THREAD_INFORMATION ThreadSysInfo
[1];
323 } SYSTEM_PROCESS_INFORMATION
, *PSYSTEM_PROCESS_INFORMATION
;
325 // SystemServiceDescriptorTableInfo (6)
327 struct _SYSTEM_SDT_INFORMATION
330 ULONG NumberOfSystemServiceTables
;
331 ULONG NumberOfServices
[1];
332 ULONG ServiceCounters
[1];
334 } SYSTEM_SDT_INFORMATION
, *PSYSTEM_SDT_INFORMATION
;
336 // SystemIoConfigInformation (7)
338 struct _SYSTEM_IOCONFIG_INFORMATION
347 } SYSTEM_IOCONFIG_INFORMATION
, *PSYSTEM_IOCONFIG_INFORMATION
;
349 // SystemProcessorTimeInformation (8)
351 struct _SYSTEM_PROCESSORTIME_INFO
353 TIME TotalProcessorRunTime
;
354 TIME TotalProcessorTime
;
355 TIME TotalProcessorUserTime
;
357 TIME TotalInterruptTime
;
358 ULONG TotalInterrupts
;
361 } SYSTEM_PROCESSORTIME_INFO
, *PSYSTEM_PROCESSORTIME_INFO
;
363 // SystemNtGlobalFlagInformation (9)
365 struct _SYSTEM_GLOBAL_FLAG_INFO
369 } SYSTEM_GLOBAL_FLAG_INFO
, * PSYSTEM_GLOBAL_FLAG_INFO
;
371 // SystemInformation10 (10)
374 // SystemModuleInformation (11)
376 struct _SYSTEM_MODULE_ENTRY
380 ULONG ModuleBaseAddress
;
383 ULONG ModuleEntryIndex
;
384 USHORT ModuleNameLength
; /* Length of module name not including the path, this field contains valid value only for NTOSKRNL module*/
385 USHORT ModulePathLength
; /* Length of 'directory path' part of modulename*/
386 CHAR ModuleName
[256];
388 } SYSTEM_MODULE_ENTRY
, * PSYSTEM_MODULE_ENTRY
;
391 struct _SYSTEM_MODULE_INFORMATION
394 SYSTEM_MODULE_ENTRY Module
[1];
396 } SYSTEM_MODULE_INFORMATION
, *PSYSTEM_MODULE_INFORMATION
;
398 // SystemResourceLockInformation (12)
400 struct _SYSTEM_RESOURCE_LOCK_ENTRY
402 ULONG ResourceAddress
;
406 ULONG ContentionCount
;
408 ULONG NumberOfSharedWaiters
;
409 ULONG NumberOfExclusiveWaiters
;
411 } SYSTEM_RESOURCE_LOCK_ENTRY
, *PSYSTEM_RESOURCE_LOCK_ENTRY
;
414 struct _SYSTEM_RESOURCE_LOCK_INFO
417 SYSTEM_RESOURCE_LOCK_ENTRY Lock
[1];
419 } SYSTEM_RESOURCE_LOCK_INFO
, *PSYSTEM_RESOURCE_LOCK_INFO
;
421 // SystemInformation13 (13)
424 // SystemInformation14 (14)
427 // SystemInformation15 (15)
430 // SystemHandleInformation (16)
432 #define OBJECT_TYPE_0 0
433 #define OBJECT_TYPE_1 1
434 #define OBJECT_TYPE_OBJDIRECTORY 2
435 #define OBJECT_TYPE_SYMLINK 3
436 #define OBJECT_TYPE_TOKEN 4
437 #define OBJECT_TYPE_PROCESS 5
438 #define OBJECT_TYPE_THREAD 6
439 #define OBJECT_TYPE_EVENT 7
440 #define OBJECT_TYPE_8 8
441 #define OBJECT_TYPE_MUTANT 9
442 #define OBJECT_TYPE_SEMAPHORE 10
443 #define OBJECT_TYPE_TIMER 11
444 #define OBJECT_TYPE_12 12
445 #define OBJECT_TYPE_WINSTATION 13
446 #define OBJECT_TYPE_DESKTOP 14
447 #define OBJECT_TYPE_SECTION 15
448 #define OBJECT_TYPE_KEY 16
449 #define OBJECT_TYPE_PORT 17
450 #define OBJECT_TYPE_18 18
451 #define OBJECT_TYPE_19 19
452 #define OBJECT_TYPE_20 20
453 #define OBJECT_TYPE_21 21
454 #define OBJECT_TYPE_IOCOMPLETION 22
455 #define OBJECT_TYPE_FILE 23
458 struct _SYSTEM_HANDLE_ENTRY
467 } SYSTEM_HANDLE_ENTRY
, *PSYSTEM_HANDLE_ENTRY
;
470 struct _SYSTEM_HANDLE_INFORMATION
473 SYSTEM_HANDLE_ENTRY Handle
[1];
475 } SYSTEM_HANDLE_INFORMATION
, *PSYSTEM_HANDLE_INFORMATION
;
477 // SystemObjectInformation (17)
480 struct _SYSTEM_OBJECT_INFORMATION
484 } SYSTEM_OBJECT_INFORMATION
, *PSYSTEM_OBJECT_INFORMATION
;
486 // SystemPageFileInformation (18)
488 struct _SYSTEM_PAGEFILE_INFORMATION
490 ULONG RelativeOffset
;
491 ULONG CurrentSizePages
;
492 ULONG TotalUsedPages
;
494 UNICODE_STRING PagefileFileName
;
496 } SYSTEM_PAGEFILE_INFORMATION
, *PSYSTEM_PAGEFILE_INFORMATION
;
498 // SystemInstructionEmulationInfo (19)
500 struct _SYSTEM_VDM_INFORMATION
502 ULONG VdmSegmentNotPresentCount
;
504 ULONG VdmESPREFIXCount
;
505 ULONG VdmCSPREFIXCount
;
506 ULONG VdmSSPREFIXCount
;
507 ULONG VdmDSPREFIXCount
;
508 ULONG VdmFSPREFIXCount
;
509 ULONG VdmGSPREFIXCount
;
510 ULONG VdmOPER32PREFIXCount
;
511 ULONG VdmADDR32PREFIXCount
;
513 ULONG VdmINSWV86Count
;
521 ULONG VdmINBIMMCount
;
522 ULONG VdmINWIMMCount
;
523 ULONG VdmOUTBIMMCount
;
524 ULONG VdmOUTWIMMCount
;
529 ULONG VdmLOCKPREFIXCount
;
530 ULONG VdmREPNEPREFIXCount
;
531 ULONG VdmREPPREFIXCount
;
537 } SYSTEM_VDM_INFORMATION
, *PSYSTEM_VDM_INFORMATION
;
539 // SystemInformation20 (20)
542 // SystemCacheInformation (21)
544 struct _SYSTEM_CACHE_INFORMATION
548 ULONG PageFaultCount
;
549 ULONG MinimumWorkingSet
;
550 ULONG MaximumWorkingSet
;
553 } SYSTEM_CACHE_INFORMATION
;
555 // SystemPoolTagInformation (22)
556 // found by Klaus P. Gerlicher
557 // (implemented only in checked builds)
559 struct _POOL_TAG_STATS
561 ULONG AllocationCount
;
568 struct _SYSTEM_POOL_TAG_ENTRY
571 POOL_TAG_STATS Paged
;
572 POOL_TAG_STATS NonPaged
;
574 } SYSTEM_POOL_TAG_ENTRY
, * PSYSTEM_POOL_TAG_ENTRY
;
577 struct _SYSTEM_POOL_TAG_INFO
580 SYSTEM_POOL_TAG_ENTRY PoolEntry
[1];
582 } SYSTEM_POOL_TAG_INFO
, *PSYSTEM_POOL_TAG_INFO
;
584 // SystemProcessorScheduleInfo (23)
586 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
588 ULONG nContextSwitches
;
591 ULONG TimerResolution
;
595 } SYSTEM_PROCESSOR_SCHEDULE_INFO
, *PSYSTEM_PROCESSOR_SCHEDULE_INFO
;
597 // SystemDpcInformation (24)
599 struct _SYSTEM_DPC_INFORMATION
602 ULONG KiMaximumDpcQueueDepth
;
603 ULONG KiMinimumDpcRate
;
604 ULONG KiAdjustDpcThreshold
;
605 ULONG KiIdealDpcRate
;
607 } SYSTEM_DPC_INFORMATION
, *PSYSTEM_DPC_INFORMATION
;
609 // SystemInformation25 (25)
612 // SystemLoadImage (26)
614 struct _SYSTEM_IMAGE_LOAD
616 UNICODE_STRING ModuleFileName IN
;
617 PVOID BaseAddress OUT
;
619 PVOID EntryPoint OUT
;
620 PVOID ExportDirectory OUT
;
622 } SYSTEM_IMAGE_LOAD
, *PSYSTEM_IMAGE_LOAD
;
624 // SystemUnloadImage (27)
626 struct _SYSTEM_IMAGE_UNLOAD
628 PVOID Section IN
; /* see SYSTEM_IMAGE_LOAD.ModuleSection */
630 } SYSTEM_IMAGE_UNLOAD
, *PSYSTEM_IMAGE_UNLOAD
;
633 // SystemTimeAdjustmentInformation (28)
634 // (what is the right one?)
637 struct _SYSTEM_TIME_ADJUSTMENT_INFO
640 BOOL TimeAdjustmentDisabled
;
642 } SYSTEM_TIME_ADJUSTMENT_INFO
, *PSYSTEM_TIME_ADJUSTMENT_INFO
;
645 struct _SYSTEM_TIME_ADJUSTMENT_INFO
647 ULONG KeTimeAdjustment
;
648 ULONG KeMaximumIncrement
;
649 BOOLEAN KeTimeSynchronization
;
651 } SYSTEM_TIME_ADJUSTMENT_INFO
, *PSYSTEM_TIME_ADJUSTMENT_INFO
;
654 // SystemProcessorFaultCountInfo (33)
656 struct _SYSTEM_PROCESSOR_FAULT_INFO
658 ULONG nAlignmentFixup
;
659 ULONG nExceptionDispatches
;
660 ULONG nFloatingEmulation
;
663 } SYSTEM_PROCESSOR_FAULT_INFO
, *PSYSTEM_PROCESSOR_FAULT_INFO
;
665 // SystemCrashDumpStateInfo (34)
668 // SystemDebuggerInformation (35)
670 struct _SYSTEM_DEBUGGER_INFO
672 BOOLEAN KdDebuggerEnabled
;
673 BOOLEAN KdDebuggerPresent
;
675 } SYSTEM_DEBUGGER_INFO
, *PSYSTEM_DEBUGGER_INFO
;
677 // SystemInformation36 (36)
680 // SystemQuotaInformation (37)
682 struct _SYSTEM_QUOTA_INFORMATION
684 ULONG CmpGlobalQuota
;
685 ULONG CmpGlobalQuotaUsed
;
686 ULONG MmSizeofPagedPoolInBytes
;
688 } SYSTEM_QUOTA_INFORMATION
, *PSYSTEM_QUOTA_INFORMATION
;
690 // SystemLoadDriver (38)
692 struct _SYSTEM_DRIVER_LOAD
694 UNICODE_STRING DriverRegistryEntry
;
696 } SYSTEM_DRIVER_LOAD
, *PSYSTEM_DRIVER_LOAD
;
700 // memory information
702 #define MemoryBasicInformation 0
706 typedef enum SHUTDOWN_ACTION_TAG
{
717 // number of wait objects
719 #define THREAD_WAIT_OBJECTS 3
720 //#define MAXIMUM_WAIT_OBJECTS 64
724 #define REG_WHOLE_HIVE_VOLATILE 1
725 #define REG_REFRESH_HIVE 2
727 // object type access rights
729 #define OBJECT_TYPE_CREATE 0x0001
730 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
732 // directory access rights
734 #define DIRECTORY_QUERY 0x0001
735 #define DIRECTORY_TRAVERSE 0x0002
736 #define DIRECTORY_CREATE_OBJECT 0x0004
737 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
739 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
741 // symbolic link access rights
743 #define SYMBOLIC_LINK_QUERY 0x0001
744 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
746 typedef struct _PROCESS_WS_WATCH_INFORMATION
750 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
752 typedef struct _PROCESS_BASIC_INFORMATION
756 KAFFINITY AffinityMask
;
757 KPRIORITY BasePriority
;
758 ULONG UniqueProcessId
;
759 ULONG InheritedFromUniqueProcessId
;
760 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
762 typedef struct _QUOTA_LIMITS
764 ULONG PagedPoolLimit
;
765 ULONG NonPagedPoolLimit
;
766 ULONG MinimumWorkingSetSize
;
767 ULONG MaximumWorkingSetSize
;
770 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
772 typedef struct _IO_COUNTERS
774 ULONG ReadOperationCount
;
775 ULONG WriteOperationCount
;
776 ULONG OtherOperationCount
;
777 LARGE_INTEGER ReadTransferCount
;
778 LARGE_INTEGER WriteTransferCount
;
779 LARGE_INTEGER OtherTransferCount
;
780 } IO_COUNTERS
, *PIO_COUNTERS
;
783 typedef struct _VM_COUNTERS_
785 ULONG PeakVirtualSize
;
787 ULONG PageFaultCount
;
788 ULONG PeakWorkingSetSize
;
789 ULONG WorkingSetSize
;
790 ULONG QuotaPeakPagedPoolUsage
;
791 ULONG QuotaPagedPoolUsage
;
792 ULONG QuotaPeakNonPagedPoolUsage
;
793 ULONG QuotaNonPagedPoolUsage
;
795 ULONG PeakPagefileUsage
;
796 } VM_COUNTERS
, *PVM_COUNTERS
;
799 typedef struct _POOLED_USAGE_AND_LIMITS_
801 ULONG PeakPagedPoolUsage
;
802 ULONG PagedPoolUsage
;
803 ULONG PagedPoolLimit
;
804 ULONG PeakNonPagedPoolUsage
;
805 ULONG NonPagedPoolUsage
;
806 ULONG NonPagedPoolLimit
;
807 ULONG PeakPagefileUsage
;
810 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
813 typedef struct _PROCESS_ACCESS_TOKEN
817 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
819 typedef struct _KERNEL_USER_TIMES
826 typedef KERNEL_USER_TIMES
*PKERNEL_USER_TIMES
;
828 // thread information
830 // incompatible with MS NT
832 typedef struct _THREAD_BASIC_INFORMATION
835 PVOID TebBaseAddress
;
836 KAFFINITY AffinityMask
;
837 KPRIORITY BasePriority
;
838 ULONG UniqueThreadId
;
839 } THREAD_BASIC_INFORMATION
, *PTHREAD_BASIC_INFORMATION
;
841 // object information
843 typedef struct _OBJECT_NAME_INFORMATION
846 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
850 typedef struct _OBJECT_DATA_INFORMATION
852 BOOLEAN bInheritHandle
;
853 BOOLEAN bProtectFromClose
;
854 } OBJECT_DATA_INFORMATION
, *POBJECT_DATA_INFORMATION
;
857 typedef struct _OBJECT_TYPE_INFORMATION
862 ULONG ReferenceCount
;
863 } OBJECT_TYPE_INFORMATION
, *POBJECT_TYPE_INFORMATION
;
867 typedef struct _FILE_BASIC_INFORMATION
873 ULONG FileAttributes
;
874 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
876 typedef struct _FILE_STANDARD_INFORMATION
878 LARGE_INTEGER AllocationSize
;
879 LARGE_INTEGER EndOfFile
;
881 BOOLEAN DeletePending
;
883 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
885 typedef struct _FILE_POSITION_INFORMATION
887 LARGE_INTEGER CurrentByteOffset
;
888 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
890 typedef struct _FILE_ALIGNMENT_INFORMATION
892 ULONG AlignmentRequirement
;
893 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
895 typedef struct _FILE_DISPOSITION_INFORMATION
898 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
900 typedef struct _FILE_END_OF_FILE_INFORMATION
902 LARGE_INTEGER EndOfFile
;
903 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
905 typedef struct _FILE_NETWORK_OPEN_INFORMATION
911 LARGE_INTEGER AllocationSize
;
912 LARGE_INTEGER EndOfFile
;
913 ULONG FileAttributes
;
914 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
916 typedef struct _FILE_FULL_EA_INFORMATION
918 ULONG NextEntryOffset
;
921 USHORT EaValueLength
;
923 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
926 typedef struct _FILE_EA_INFORMATION
{
928 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
931 typedef struct _FILE_GET_EA_INFORMATION
{
932 ULONG NextEntryOffset
;
935 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
937 typedef struct _FILE_STREAM_INFORMATION
{
938 ULONG NextEntryOffset
;
939 ULONG StreamNameLength
;
940 LARGE_INTEGER StreamSize
;
941 LARGE_INTEGER StreamAllocationSize
;
943 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
945 typedef struct _FILE_ALLOCATION_INFORMATION
{
946 LARGE_INTEGER AllocationSize
;
947 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
949 typedef struct _FILE_NAME_INFORMATION
{
950 ULONG FileNameLength
;
952 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
954 typedef struct _FILE_NAMES_INFORMATION
956 ULONG NextEntryOffset
;
958 ULONG FileNameLength
;
960 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
963 typedef struct _FILE_RENAME_INFORMATION
{
966 ULONG FileNameLength
;
968 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
971 typedef struct _FILE_INTERNAL_INFORMATION
{
972 LARGE_INTEGER IndexNumber
;
973 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
975 typedef struct _FILE_ACCESS_INFORMATION
{
976 ACCESS_MASK AccessFlags
;
977 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
980 typedef struct _FILE_MODE_INFORMATION
{
982 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
984 typedef struct _FILE_COMPRESSION_INFORMATION
{
985 LARGE_INTEGER CompressedFileSize
;
986 USHORT CompressionFormat
;
987 UCHAR CompressionUnitShift
;
991 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
993 typedef struct _FILE_ALL_INFORMATION
{
994 FILE_BASIC_INFORMATION BasicInformation
;
995 FILE_STANDARD_INFORMATION StandardInformation
;
996 FILE_INTERNAL_INFORMATION InternalInformation
;
997 FILE_EA_INFORMATION EaInformation
;
998 FILE_ACCESS_INFORMATION AccessInformation
;
999 FILE_POSITION_INFORMATION PositionInformation
;
1000 FILE_MODE_INFORMATION ModeInformation
;
1001 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
1002 FILE_NAME_INFORMATION NameInformation
;
1003 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
1005 // file system information structures
1007 typedef struct _FILE_FS_DEVICE_INFORMATION
{
1008 DEVICE_TYPE DeviceType
;
1009 ULONG Characteristics
;
1010 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1013 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1014 TIME VolumeCreationTime
;
1015 ULONG VolumeSerialNumber
;
1016 ULONG VolumeLabelLength
;
1017 BOOLEAN SupportsObjects
;
1018 WCHAR VolumeLabel
[0];
1019 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1021 typedef struct _FILE_FS_SIZE_INFORMATION
{
1022 LARGE_INTEGER TotalAllocationUnits
;
1023 LARGE_INTEGER AvailableAllocationUnits
;
1024 ULONG SectorsPerAllocationUnit
;
1025 ULONG BytesPerSector
;
1026 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1028 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
1029 ULONG FileSystemAttributes
;
1030 LONG MaximumComponentNameLength
;
1031 ULONG FileSystemNameLength
;
1032 WCHAR FileSystemName
[0];
1033 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
1036 FileSystemAttributes is one of the following values:
1038 FILE_CASE_SENSITIVE_SEARCH 0x00000001
1039 FILE_CASE_PRESERVED_NAMES 0x00000002
1040 FILE_UNICODE_ON_DISK 0x00000004
1041 FILE_PERSISTENT_ACLS 0x00000008
1042 FILE_FILE_COMPRESSION 0x00000010
1043 FILE_VOLUME_QUOTAS 0x00000020
1044 FILE_VOLUME_IS_COMPRESSED 0x00008000
1046 typedef struct _FILE_FS_LABEL_INFORMATION
{
1047 ULONG VolumeLabelLength
;
1048 WCHAR VolumeLabel
[0];
1049 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1051 // read file scatter / write file scatter
1052 //FIXME I am a win32 struct aswell
1054 typedef union _FILE_SEGMENT_ELEMENT
{
1057 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1059 // directory information
1061 typedef struct _OBJDIR_INFORMATION
{
1062 UNICODE_STRING ObjectName
;
1063 UNICODE_STRING ObjectTypeName
; // Directory, Device ...
1065 } OBJDIR_INFORMATION
, *POBJDIR_INFORMATION
;
1068 typedef struct _FILE_DIRECTORY_INFORMATION
{
1069 ULONG NextEntryOffset
;
1072 TIME LastAccessTime
;
1075 LARGE_INTEGER EndOfFile
;
1076 LARGE_INTEGER AllocationSize
;
1077 ULONG FileAttributes
;
1078 ULONG FileNameLength
;
1080 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
1082 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
1083 ULONG NextEntryOffset
;
1086 TIME LastAccessTime
;
1089 LARGE_INTEGER EndOfFile
;
1090 LARGE_INTEGER AllocationSize
;
1091 ULONG FileAttributes
;
1092 ULONG FileNameLength
;
1094 WCHAR FileName
[0]; // variable size
1095 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
,
1096 FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
1099 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
{
1100 ULONG NextEntryOffset
;
1103 TIME LastAccessTime
;
1106 LARGE_INTEGER EndOfFile
;
1107 LARGE_INTEGER AllocationSize
;
1108 ULONG FileAttributes
;
1109 ULONG FileNameLength
;
1111 CHAR ShortNameLength
;
1112 WCHAR ShortName
[12]; // 8.3 name
1114 } FILE_BOTH_DIRECTORY_INFORMATION
, *PFILE_BOTH_DIRECTORY_INFORMATION
,
1115 FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
1119 NotifyFilter / CompletionFilter:
1121 FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
1122 FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
1123 FILE_NOTIFY_CHANGE_NAME 0x00000003
1124 FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
1125 FILE_NOTIFY_CHANGE_SIZE 0x00000008
1126 FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
1127 FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
1128 FILE_NOTIFY_CHANGE_CREATION 0x00000040
1129 FILE_NOTIFY_CHANGE_EA 0x00000080
1130 FILE_NOTIFY_CHANGE_SECURITY 0x00000100
1131 FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
1132 FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
1133 FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
1136 typedef struct _FILE_NOTIFY_INFORMATION
{
1138 ULONG FileNameLength
;
1140 } FILE_NOTIFY_INFORMATION
;
1144 Action is one of the following values:
1146 FILE_ACTION_ADDED 0x00000001
1147 FILE_ACTION_REMOVED 0x00000002
1148 FILE_ACTION_MODIFIED 0x00000003
1149 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
1150 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
1151 FILE_ACTION_ADDED_STREAM 0x00000006
1152 FILE_ACTION_REMOVED_STREAM 0x00000007
1153 FILE_ACTION_MODIFIED_STREAM 0x00000008
1158 //FIXME: I am a win32 object
1161 (*PTIMERAPCROUTINE
)(
1162 LPVOID lpArgToCompletionRoutine
,
1163 DWORD dwTimerLowValue
,
1164 DWORD dwTimerHighValue
1168 // File System Control commands ( related to defragging )
1170 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
1171 #define FSCTL_GET_VOLUME_BITMAP 0x9006F
1172 #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
1173 #define FSCTL_MOVE_FILE 0x90074
1175 typedef struct _MAPPING_PAIR
1179 } MAPPING_PAIR
, *PMAPPING_PAIR
;
1181 typedef struct _GET_RETRIEVAL_DESCRIPTOR
1183 ULONG NumberOfPairs
;
1185 MAPPING_PAIR Pair
[0]; // variable size
1186 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
1188 typedef struct _BITMAP_DESCRIPTOR
1191 ULONGLONG ClustersToEndOfVol
;
1192 BYTE Map
[0]; // variable size
1193 } BITMAP_DESCRIPTOR
, *PBITMAP_DESCRIPTOR
;
1195 typedef struct _MOVEFILE_DESCRIPTOR
1199 LARGE_INTEGER StartVcn
;
1200 LARGE_INTEGER TargetLcn
;
1203 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
1206 // semaphore information
1208 typedef struct _SEMAPHORE_BASIC_INFORMATION
1212 } SEMAPHORE_BASIC_INFORMATION
, *PSEMAPHORE_BASIC_INFORMATION
;
1214 // event information
1216 typedef struct _EVENT_BASIC_INFORMATION
1218 BOOL AutomaticReset
;
1220 } EVENT_BASIC_INFORMATION
, *PEVENT_INFORMATION
;
1222 //typedef enum _TIMER_TYPE
1224 // NotificationTimer,
1225 // SynchronizationTimer
1229 struct _LPC_PORT_BASIC_INFORMATION
1246 } LPC_PORT_BASIC_INFORMATION
, * PLPC_PORT_BASIC_INFORMATION
;