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
58 // thread query / set information class
59 #define ThreadBasicInformation 0
61 #define ThreadPriority 2
62 #define ThreadBasePriority 3
63 #define ThreadAffinityMask 4
64 #define ThreadImpersonationToken 5
65 #define ThreadDescriptorTableEntry 6
66 #define ThreadEnableAlignmentFaultFixup 7
67 #define ThreadEventPair 8
68 #define ThreadQuerySetWin32StartAddress 9
69 #define ThreadZeroTlsCell 10
70 #define ThreadPerformanceCount 11
71 #define ThreadAmILastThread 12
72 #define ThreadIdealProcessor 13
73 #define ThreadPriorityBoost 14
74 #define MaxThreadInfoClass 15
76 // object handle information
78 #define ObjectBasicInformation 0
79 #define ObjectNameInformation 1
80 #define ObjectTypeInformation 2
81 #define ObjectAllInformation 3
82 #define ObjectDataInformation 4
85 // semaphore information
87 typedef enum _SEMAPHORE_INFORMATION_CLASS
89 SemaphoreBasicInformation
= 0
90 } SEMAPHORE_INFORMATION_CLASS
;
92 typedef struct _SEMAPHORE_BASIC_INFORMATION
96 } SEMAPHORE_BASIC_INFORMATION
, *PSEMAPHORE_BASIC_INFORMATION
;
101 typedef enum _EVENT_INFORMATION_CLASS
103 EventBasicInformation
= 0
104 } EVENT_INFORMATION_CLASS
;
106 typedef struct _EVENT_BASIC_INFORMATION
108 EVENT_TYPE EventType
;
110 } EVENT_BASIC_INFORMATION
, *PEVENT_BASIC_INFORMATION
;
113 // system information
114 // {Nt|Zw}{Query|Set}SystemInformation
117 enum _SYSTEM_INFORMATION_CLASS
119 SystemInformationClassMin
= 0,
120 SystemBasicInformation
= 0, /* Q */
121 SystemProcessorInformation
= 1, /* Q */
122 SystemPerformanceInformation
= 2, /* Q */
123 SystemTimeInformation
= 3, /* Q */
124 SystemPathInformation
= 4,
125 SystemProcessInformation
= 5, /* Q */
126 SystemServiceDescriptorTableInfo
= 6, /* Q */
127 SystemIoConfigInformation
= 7, /* Q */
128 SystemProcessorTimeInformation
= 8, /* Q */
129 SystemNtGlobalFlagInformation
= 9, /* QS */
130 SystemInformation10
= 10,
131 SystemModuleInformation
= 11, /* Q */
132 SystemResourceLockInformation
= 12, /* Q */
133 SystemInformation13
= 13,
134 SystemInformation14
= 14,
135 SystemInformation15
= 15,
136 SystemHandleInformation
= 16, /* Q */
137 SystemObjectInformation
= 17, /* Q */
138 SystemPageFileInformation
= 18, /* Q */
139 SystemInstructionEmulationInfo
= 19, /* Q */
140 SystemInformation20
= 20,
141 SystemCacheInformation
= 21, /* QS */
142 SystemPoolTagInformation
= 22, /* Q (checked build only) */
143 SystemProcessorScheduleInfo
= 23, /* Q */
144 SystemDpcInformation
= 24, /* QS */
145 SystemFullMemoryInformation
= 25,
146 SystemLoadGdiDriverInformation
= 26, /* S (callable) */
147 SystemUnloadGdiDriverInformation
= 27, /* S (callable) */
148 SystemTimeAdjustmentInformation
= 28, /* QS */
149 SystemInformation29
= 29,
150 SystemInformation30
= 30,
151 SystemInformation31
= 31,
152 SystemCrashDumpSectionInfo
= 32, /* Q */
153 SystemProcessorFaultCountInfo
= 33, /* Q */
154 SystemCrashDumpStateInfo
= 34, /* Q */
155 SystemDebuggerInformation
= 35, /* Q */
156 SystemThreadSwitchCountersInfo
= 36, /* Q */
157 SystemQuotaInformation
= 37, /* QS */
158 SystemLoadDriver
= 38, /* S */
159 SystemPrioritySeparationInfo
= 39, /* S */
160 SystemInformation40
= 40,
161 SystemInformation41
= 41,
162 SystemInformation42
= 42,
163 SystemInformation43
= 43,
164 SystemTimeZoneInformation
= 44, /* QS */
165 SystemLookasideInformation
= 45, /* Q */
166 SystemInformationClassMax
168 } SYSTEM_INFORMATION_CLASS
;
170 // SystemBasicInformation (0)
172 struct _SYSTEM_BASIC_INFORMATION
175 ULONG KeMaximumIncrement
;
177 ULONG MmNumberOfPhysicalPages
;
178 ULONG MmLowestPhysicalPage
;
179 ULONG MmHighestPhysicalPage
;
180 PVOID MmLowestUserAddress
;
181 PVOID MmLowestUserAddress1
;
182 PVOID MmHighestUserAddress
;
183 DWORD KeActiveProcessors
;
184 USHORT KeNumberProcessors
;
186 } SYSTEM_BASIC_INFORMATION
, *PSYSTEM_BASIC_INFORMATION
;
188 // SystemProcessorInformation (1)
190 struct _SYSTEM_PROCESSOR_INFORMATION
192 USHORT KeProcessorArchitecture
;
193 USHORT KeProcessorLevel
;
194 USHORT KeProcessorRevision
;
198 } SYSTEM_PROCESSOR_INFORMATION
, *PSYSTEM_PROCESSOR_INFORMATION
;
200 // SystemPerformanceInfo (2)
202 struct _SYSTEM_PERFORMANCE_INFO
204 LARGE_INTEGER TotalProcessorTime
;
205 LARGE_INTEGER IoReadTransferCount
;
206 LARGE_INTEGER IoWriteTransferCount
;
207 LARGE_INTEGER IoOtherTransferCount
;
208 ULONG IoReadOperationCount
;
209 ULONG IoWriteOperationCount
;
210 ULONG IoOtherOperationCount
;
211 ULONG MmAvailablePages
;
212 ULONG MmTotalCommitedPages
;
213 ULONG MmTotalCommitLimit
;
217 ULONG TransitionFaults
;
219 ULONG DemandZeroFaults
;
228 ULONG PoolPagedBytes
;
229 ULONG PoolNonPagedBytes
;
234 ULONG MmTotalSystemFreePtes
;
235 ULONG MmSystemCodepage
;
236 ULONG MmTotalSystemDriverPages
;
237 ULONG MmTotalSystemCodePages
;
241 ULONG MmSystemCachePage
;
242 ULONG MmPagedPoolPage
;
243 ULONG MmSystemDriverPage
;
244 ULONG CcFastReadNoWait
;
245 ULONG CcFastReadWait
;
246 ULONG CcFastReadResourceMiss
;
247 ULONG CcFastReadNotPossible
;
248 ULONG CcFastMdlReadNoWait
;
249 ULONG CcFastMdlReadWait
;
250 ULONG CcFastMdlReadResourceMiss
;
251 ULONG CcFastMdlReadNotPossible
;
252 ULONG CcMapDataNoWait
;
254 ULONG CcMapDataNoWaitMiss
;
255 ULONG CcMapDataWaitMiss
;
256 ULONG CcPinMappedDataCount
;
257 ULONG CcPinReadNoWait
;
259 ULONG CcPinReadNoWaitMiss
;
260 ULONG CcPinReadWaitMiss
;
261 ULONG CcCopyReadNoWait
;
262 ULONG CcCopyReadWait
;
263 ULONG CcCopyReadNoWaitMiss
;
264 ULONG CcCopyReadWaitMiss
;
265 ULONG CcMdlReadNoWait
;
267 ULONG CcMdlReadNoWaitMiss
;
268 ULONG CcMdlReadWaitMiss
;
269 ULONG CcReadaheadIos
;
270 ULONG CcLazyWriteIos
;
271 ULONG CcLazyWritePages
;
274 ULONG ContextSwitches
;
279 } SYSTEM_PERFORMANCE_INFO
, *PSYSTEM_PERFORMANCE_INFO
;
281 // SystemTimeInformation (3)
283 struct _SYSTEM_TIME_INFORMATION
287 TIME ExpTimeZoneBias
;
291 } SYSTEM_TIME_INFORMATION
, *PSYSTEM_TIME_INFORMATION
;
293 // SystemPathInformation (4)
296 struct _SYSTEM_PATH_INFORMATION
300 } SYSTEM_PATH_INFORMATION
, * PSYSTEM_PATH_INFORMATION
;
302 // SystemProcessThreadInfo (5)
304 struct _SYSTEM_THREAD_INFORMATION
312 ULONG DynamicPriority
;
316 KWAIT_REASON WaitReason
;
318 } SYSTEM_THREAD_INFORMATION
, *PSYSTEM_THREAD_INFORMATION
;
321 struct SYSTEM_PROCESS_INFORMATION
323 ULONG RelativeOffset
;
332 ULONG ParentProcessId
;
335 ULONG PeakVirtualSizeBytes
;
336 ULONG TotalVirtualSizeBytes
;
337 ULONG PageFaultCount
;
338 ULONG PeakWorkingSetSizeBytes
;
339 ULONG TotalWorkingSetSizeBytes
;
340 ULONG PeakPagedPoolUsagePages
;
341 ULONG TotalPagedPoolUsagePages
;
342 ULONG PeakNonPagedPoolUsagePages
;
343 ULONG TotalNonPagedPoolUsagePages
;
344 ULONG TotalPageFileUsageBytes
;
345 ULONG PeakPageFileUsageBytes
;
346 ULONG TotalPrivateBytes
;
347 SYSTEM_THREAD_INFORMATION ThreadSysInfo
[1];
349 } SYSTEM_PROCESS_INFORMATION
, *PSYSTEM_PROCESS_INFORMATION
;
351 // SystemServiceDescriptorTableInfo (6)
353 struct _SYSTEM_SDT_INFORMATION
356 ULONG NumberOfSystemServiceTables
;
357 ULONG NumberOfServices
[1];
358 ULONG ServiceCounters
[1];
360 } SYSTEM_SDT_INFORMATION
, *PSYSTEM_SDT_INFORMATION
;
362 // SystemIoConfigInformation (7)
364 struct _SYSTEM_IOCONFIG_INFORMATION
373 } SYSTEM_IOCONFIG_INFORMATION
, *PSYSTEM_IOCONFIG_INFORMATION
;
375 // SystemProcessorTimeInformation (8)
377 struct _SYSTEM_PROCESSORTIME_INFO
379 TIME TotalProcessorRunTime
;
380 TIME TotalProcessorTime
;
381 TIME TotalProcessorUserTime
;
383 TIME TotalInterruptTime
;
384 ULONG TotalInterrupts
;
387 } SYSTEM_PROCESSORTIME_INFO
, *PSYSTEM_PROCESSORTIME_INFO
;
389 // SystemNtGlobalFlagInformation (9)
391 struct _SYSTEM_GLOBAL_FLAG_INFO
395 } SYSTEM_GLOBAL_FLAG_INFO
, * PSYSTEM_GLOBAL_FLAG_INFO
;
397 // SystemInformation10 (10)
400 // SystemModuleInformation (11)
402 struct _SYSTEM_MODULE_ENTRY
406 ULONG ModuleBaseAddress
;
409 ULONG ModuleEntryIndex
;
410 USHORT ModuleNameLength
; /* Length of module name not including the path, this field contains valid value only for NTOSKRNL module*/
411 USHORT ModulePathLength
; /* Length of 'directory path' part of modulename*/
412 CHAR ModuleName
[256];
414 } SYSTEM_MODULE_ENTRY
, * PSYSTEM_MODULE_ENTRY
;
417 struct _SYSTEM_MODULE_INFORMATION
420 SYSTEM_MODULE_ENTRY Module
[1];
422 } SYSTEM_MODULE_INFORMATION
, *PSYSTEM_MODULE_INFORMATION
;
424 // SystemResourceLockInformation (12)
426 struct _SYSTEM_RESOURCE_LOCK_ENTRY
428 ULONG ResourceAddress
;
432 ULONG ContentionCount
;
434 ULONG NumberOfSharedWaiters
;
435 ULONG NumberOfExclusiveWaiters
;
437 } SYSTEM_RESOURCE_LOCK_ENTRY
, *PSYSTEM_RESOURCE_LOCK_ENTRY
;
440 struct _SYSTEM_RESOURCE_LOCK_INFO
443 SYSTEM_RESOURCE_LOCK_ENTRY Lock
[1];
445 } SYSTEM_RESOURCE_LOCK_INFO
, *PSYSTEM_RESOURCE_LOCK_INFO
;
447 // SystemInformation13 (13)
450 // SystemInformation14 (14)
453 // SystemInformation15 (15)
456 // SystemHandleInformation (16)
459 struct _SYSTEM_HANDLE_ENTRY
468 } SYSTEM_HANDLE_ENTRY
, *PSYSTEM_HANDLE_ENTRY
;
471 struct _SYSTEM_HANDLE_INFORMATION
474 SYSTEM_HANDLE_ENTRY Handle
[1];
476 } SYSTEM_HANDLE_INFORMATION
, *PSYSTEM_HANDLE_INFORMATION
;
478 // SystemObjectInformation (17)
481 struct _SYSTEM_OBJECT_INFORMATION
485 } SYSTEM_OBJECT_INFORMATION
, *PSYSTEM_OBJECT_INFORMATION
;
487 // SystemPageFileInformation (18)
489 struct _SYSTEM_PAGEFILE_INFORMATION
491 ULONG RelativeOffset
;
492 ULONG CurrentSizePages
;
493 ULONG TotalUsedPages
;
495 UNICODE_STRING PagefileFileName
;
497 } SYSTEM_PAGEFILE_INFORMATION
, *PSYSTEM_PAGEFILE_INFORMATION
;
499 // SystemInstructionEmulationInfo (19)
501 struct _SYSTEM_VDM_INFORMATION
503 ULONG VdmSegmentNotPresentCount
;
505 ULONG VdmESPREFIXCount
;
506 ULONG VdmCSPREFIXCount
;
507 ULONG VdmSSPREFIXCount
;
508 ULONG VdmDSPREFIXCount
;
509 ULONG VdmFSPREFIXCount
;
510 ULONG VdmGSPREFIXCount
;
511 ULONG VdmOPER32PREFIXCount
;
512 ULONG VdmADDR32PREFIXCount
;
514 ULONG VdmINSWV86Count
;
522 ULONG VdmINBIMMCount
;
523 ULONG VdmINWIMMCount
;
524 ULONG VdmOUTBIMMCount
;
525 ULONG VdmOUTWIMMCount
;
530 ULONG VdmLOCKPREFIXCount
;
531 ULONG VdmREPNEPREFIXCount
;
532 ULONG VdmREPPREFIXCount
;
538 } SYSTEM_VDM_INFORMATION
, *PSYSTEM_VDM_INFORMATION
;
540 // SystemInformation20 (20)
543 // SystemCacheInformation (21)
545 struct _SYSTEM_CACHE_INFORMATION
549 ULONG PageFaultCount
;
550 ULONG MinimumWorkingSet
;
551 ULONG MaximumWorkingSet
;
554 } SYSTEM_CACHE_INFORMATION
;
556 // SystemPoolTagInformation (22)
557 // found by Klaus P. Gerlicher
558 // (implemented only in checked builds)
560 struct _POOL_TAG_STATS
562 ULONG AllocationCount
;
569 struct _SYSTEM_POOL_TAG_ENTRY
572 POOL_TAG_STATS Paged
;
573 POOL_TAG_STATS NonPaged
;
575 } SYSTEM_POOL_TAG_ENTRY
, * PSYSTEM_POOL_TAG_ENTRY
;
578 struct _SYSTEM_POOL_TAG_INFO
581 SYSTEM_POOL_TAG_ENTRY PoolEntry
[1];
583 } SYSTEM_POOL_TAG_INFO
, *PSYSTEM_POOL_TAG_INFO
;
585 // SystemProcessorScheduleInfo (23)
587 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
589 ULONG nContextSwitches
;
592 ULONG TimerResolution
;
596 } SYSTEM_PROCESSOR_SCHEDULE_INFO
, *PSYSTEM_PROCESSOR_SCHEDULE_INFO
;
598 // SystemDpcInformation (24)
600 struct _SYSTEM_DPC_INFORMATION
603 ULONG KiMaximumDpcQueueDepth
;
604 ULONG KiMinimumDpcRate
;
605 ULONG KiAdjustDpcThreshold
;
606 ULONG KiIdealDpcRate
;
608 } SYSTEM_DPC_INFORMATION
, *PSYSTEM_DPC_INFORMATION
;
610 // SystemInformation25 (25)
613 // SystemLoadGdiDriverInformation (26)
614 // SystemUnloadGdiDriverInformation (27)
615 typedef struct _SYSTEM_GDI_DRIVER_INFORMATION
617 UNICODE_STRING DriverName
;
619 PVOID SectionPointer
;
621 // PIMAGE_EXPORT_DIRECTORY ExportSectionPointer;
622 PVOID ExportSectionPointer
;
623 } SYSTEM_GDI_DRIVER_INFORMATION
, *PSYSTEM_GDI_DRIVER_INFORMATION
;
625 // SystemTimeAdjustmentInformation (28)
626 // (what is the right one?)
629 struct _SYSTEM_TIME_ADJUSTMENT_INFO
632 BOOL TimeAdjustmentDisabled
;
634 } SYSTEM_TIME_ADJUSTMENT_INFO
, *PSYSTEM_TIME_ADJUSTMENT_INFO
;
637 struct _SYSTEM_TIME_ADJUSTMENT_INFO
639 ULONG KeTimeAdjustment
;
640 ULONG KeMaximumIncrement
;
641 BOOLEAN KeTimeSynchronization
;
643 } SYSTEM_TIME_ADJUSTMENT_INFO
, *PSYSTEM_TIME_ADJUSTMENT_INFO
;
646 // SystemProcessorFaultCountInfo (33)
648 struct _SYSTEM_PROCESSOR_FAULT_INFO
650 ULONG nAlignmentFixup
;
651 ULONG nExceptionDispatches
;
652 ULONG nFloatingEmulation
;
655 } SYSTEM_PROCESSOR_FAULT_INFO
, *PSYSTEM_PROCESSOR_FAULT_INFO
;
657 // SystemCrashDumpStateInfo (34)
660 // SystemDebuggerInformation (35)
662 struct _SYSTEM_DEBUGGER_INFO
664 BOOLEAN KdDebuggerEnabled
;
665 BOOLEAN KdDebuggerPresent
;
667 } SYSTEM_DEBUGGER_INFO
, *PSYSTEM_DEBUGGER_INFO
;
669 // SystemInformation36 (36)
672 // SystemQuotaInformation (37)
674 struct _SYSTEM_QUOTA_INFORMATION
676 ULONG CmpGlobalQuota
;
677 ULONG CmpGlobalQuotaUsed
;
678 ULONG MmSizeofPagedPoolInBytes
;
680 } SYSTEM_QUOTA_INFORMATION
, *PSYSTEM_QUOTA_INFORMATION
;
682 // SystemLoadDriver (38)
684 struct _SYSTEM_DRIVER_LOAD
686 UNICODE_STRING DriverRegistryEntry
;
688 } SYSTEM_DRIVER_LOAD
, *PSYSTEM_DRIVER_LOAD
;
692 // memory information
694 #define MemoryBasicInformation 0
698 typedef enum SHUTDOWN_ACTION_TAG
{
709 // number of wait objects
711 #define THREAD_WAIT_OBJECTS 3
712 //#define MAXIMUM_WAIT_OBJECTS 64
716 #define REG_WHOLE_HIVE_VOLATILE 1
717 #define REG_REFRESH_HIVE 2
719 // object type access rights
721 #define OBJECT_TYPE_CREATE 0x0001
722 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
724 // directory access rights
726 #define DIRECTORY_QUERY 0x0001
727 #define DIRECTORY_TRAVERSE 0x0002
728 #define DIRECTORY_CREATE_OBJECT 0x0004
729 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
731 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
733 // symbolic link access rights
735 #define SYMBOLIC_LINK_QUERY 0x0001
736 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
738 typedef struct _PROCESS_WS_WATCH_INFORMATION
742 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
744 typedef struct _PROCESS_BASIC_INFORMATION
748 KAFFINITY AffinityMask
;
749 KPRIORITY BasePriority
;
750 ULONG UniqueProcessId
;
751 ULONG InheritedFromUniqueProcessId
;
752 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
754 typedef struct _QUOTA_LIMITS
756 ULONG PagedPoolLimit
;
757 ULONG NonPagedPoolLimit
;
758 ULONG MinimumWorkingSetSize
;
759 ULONG MaximumWorkingSetSize
;
762 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
764 typedef struct _IO_COUNTERS
766 ULONG ReadOperationCount
;
767 ULONG WriteOperationCount
;
768 ULONG OtherOperationCount
;
769 LARGE_INTEGER ReadTransferCount
;
770 LARGE_INTEGER WriteTransferCount
;
771 LARGE_INTEGER OtherTransferCount
;
772 } IO_COUNTERS
, *PIO_COUNTERS
;
775 typedef struct _VM_COUNTERS_
777 ULONG PeakVirtualSize
;
779 ULONG PageFaultCount
;
780 ULONG PeakWorkingSetSize
;
781 ULONG WorkingSetSize
;
782 ULONG QuotaPeakPagedPoolUsage
;
783 ULONG QuotaPagedPoolUsage
;
784 ULONG QuotaPeakNonPagedPoolUsage
;
785 ULONG QuotaNonPagedPoolUsage
;
787 ULONG PeakPagefileUsage
;
788 } VM_COUNTERS
, *PVM_COUNTERS
;
791 typedef struct _POOLED_USAGE_AND_LIMITS_
793 ULONG PeakPagedPoolUsage
;
794 ULONG PagedPoolUsage
;
795 ULONG PagedPoolLimit
;
796 ULONG PeakNonPagedPoolUsage
;
797 ULONG NonPagedPoolUsage
;
798 ULONG NonPagedPoolLimit
;
799 ULONG PeakPagefileUsage
;
802 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
805 typedef struct _PROCESS_ACCESS_TOKEN
809 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
811 typedef struct _KERNEL_USER_TIMES
818 typedef KERNEL_USER_TIMES
*PKERNEL_USER_TIMES
;
820 // thread information
822 // incompatible with MS NT
824 typedef struct _THREAD_BASIC_INFORMATION
827 PVOID TebBaseAddress
;
828 KAFFINITY AffinityMask
;
829 KPRIORITY BasePriority
;
830 ULONG UniqueThreadId
;
831 } THREAD_BASIC_INFORMATION
, *PTHREAD_BASIC_INFORMATION
;
833 // object information
835 typedef struct _OBJECT_NAME_INFORMATION
838 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
842 typedef struct _OBJECT_DATA_INFORMATION
844 BOOLEAN bInheritHandle
;
845 BOOLEAN bProtectFromClose
;
846 } OBJECT_DATA_INFORMATION
, *POBJECT_DATA_INFORMATION
;
849 typedef struct _OBJECT_TYPE_INFORMATION
854 ULONG ReferenceCount
;
855 } OBJECT_TYPE_INFORMATION
, *POBJECT_TYPE_INFORMATION
;
859 typedef struct _FILE_BASIC_INFORMATION
865 ULONG FileAttributes
;
866 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
868 typedef struct _FILE_STANDARD_INFORMATION
870 LARGE_INTEGER AllocationSize
;
871 LARGE_INTEGER EndOfFile
;
873 BOOLEAN DeletePending
;
875 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
877 typedef struct _FILE_POSITION_INFORMATION
879 LARGE_INTEGER CurrentByteOffset
;
880 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
882 typedef struct _FILE_ALIGNMENT_INFORMATION
884 ULONG AlignmentRequirement
;
885 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
887 typedef struct _FILE_DISPOSITION_INFORMATION
889 BOOLEAN DoDeleteFile
;
890 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
892 typedef struct _FILE_END_OF_FILE_INFORMATION
894 LARGE_INTEGER EndOfFile
;
895 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
897 typedef struct _FILE_NETWORK_OPEN_INFORMATION
903 LARGE_INTEGER AllocationSize
;
904 LARGE_INTEGER EndOfFile
;
905 ULONG FileAttributes
;
906 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
908 typedef struct _FILE_FULL_EA_INFORMATION
910 ULONG NextEntryOffset
;
913 USHORT EaValueLength
;
915 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
918 typedef struct _FILE_EA_INFORMATION
{
920 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
923 typedef struct _FILE_GET_EA_INFORMATION
{
924 ULONG NextEntryOffset
;
927 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
929 typedef struct _FILE_STREAM_INFORMATION
{
930 ULONG NextEntryOffset
;
931 ULONG StreamNameLength
;
932 LARGE_INTEGER StreamSize
;
933 LARGE_INTEGER StreamAllocationSize
;
935 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
937 typedef struct _FILE_ALLOCATION_INFORMATION
{
938 LARGE_INTEGER AllocationSize
;
939 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
941 typedef struct _FILE_NAME_INFORMATION
{
942 ULONG FileNameLength
;
944 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
946 typedef struct _FILE_NAMES_INFORMATION
948 ULONG NextEntryOffset
;
950 ULONG FileNameLength
;
952 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
955 typedef struct _FILE_RENAME_INFORMATION
{
958 ULONG FileNameLength
;
960 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
963 typedef struct _FILE_INTERNAL_INFORMATION
{
964 LARGE_INTEGER IndexNumber
;
965 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
967 typedef struct _FILE_ACCESS_INFORMATION
{
968 ACCESS_MASK AccessFlags
;
969 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
972 typedef struct _FILE_MODE_INFORMATION
{
974 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
976 typedef struct _FILE_COMPRESSION_INFORMATION
{
977 LARGE_INTEGER CompressedFileSize
;
978 USHORT CompressionFormat
;
979 UCHAR CompressionUnitShift
;
983 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
985 typedef struct _FILE_ALL_INFORMATION
{
986 FILE_BASIC_INFORMATION BasicInformation
;
987 FILE_STANDARD_INFORMATION StandardInformation
;
988 FILE_INTERNAL_INFORMATION InternalInformation
;
989 FILE_EA_INFORMATION EaInformation
;
990 FILE_ACCESS_INFORMATION AccessInformation
;
991 FILE_POSITION_INFORMATION PositionInformation
;
992 FILE_MODE_INFORMATION ModeInformation
;
993 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
994 FILE_NAME_INFORMATION NameInformation
;
995 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
997 // file system information structures
999 typedef struct _FILE_FS_DEVICE_INFORMATION
{
1000 DEVICE_TYPE DeviceType
;
1001 ULONG Characteristics
;
1002 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1005 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1006 TIME VolumeCreationTime
;
1007 ULONG VolumeSerialNumber
;
1008 ULONG VolumeLabelLength
;
1009 BOOLEAN SupportsObjects
;
1010 WCHAR VolumeLabel
[0];
1011 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1013 typedef struct _FILE_FS_SIZE_INFORMATION
{
1014 LARGE_INTEGER TotalAllocationUnits
;
1015 LARGE_INTEGER AvailableAllocationUnits
;
1016 ULONG SectorsPerAllocationUnit
;
1017 ULONG BytesPerSector
;
1018 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1020 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
1021 ULONG FileSystemAttributes
;
1022 LONG MaximumComponentNameLength
;
1023 ULONG FileSystemNameLength
;
1024 WCHAR FileSystemName
[0];
1025 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
1028 FileSystemAttributes is one of the following values:
1030 FILE_CASE_SENSITIVE_SEARCH 0x00000001
1031 FILE_CASE_PRESERVED_NAMES 0x00000002
1032 FILE_UNICODE_ON_DISK 0x00000004
1033 FILE_PERSISTENT_ACLS 0x00000008
1034 FILE_FILE_COMPRESSION 0x00000010
1035 FILE_VOLUME_QUOTAS 0x00000020
1036 FILE_VOLUME_IS_COMPRESSED 0x00008000
1038 typedef struct _FILE_FS_LABEL_INFORMATION
{
1039 ULONG VolumeLabelLength
;
1040 WCHAR VolumeLabel
[0];
1041 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1043 // read file scatter / write file scatter
1044 //FIXME I am a win32 struct aswell
1046 typedef union _FILE_SEGMENT_ELEMENT
{
1049 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1051 // directory information
1053 typedef struct _OBJDIR_INFORMATION
{
1054 UNICODE_STRING ObjectName
;
1055 UNICODE_STRING ObjectTypeName
; // Directory, Device ...
1057 } OBJDIR_INFORMATION
, *POBJDIR_INFORMATION
;
1060 typedef struct _FILE_DIRECTORY_INFORMATION
{
1061 ULONG NextEntryOffset
;
1064 TIME LastAccessTime
;
1067 LARGE_INTEGER EndOfFile
;
1068 LARGE_INTEGER AllocationSize
;
1069 ULONG FileAttributes
;
1070 ULONG FileNameLength
;
1072 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
1074 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
1075 ULONG NextEntryOffset
;
1078 TIME LastAccessTime
;
1081 LARGE_INTEGER EndOfFile
;
1082 LARGE_INTEGER AllocationSize
;
1083 ULONG FileAttributes
;
1084 ULONG FileNameLength
;
1086 WCHAR FileName
[0]; // variable size
1087 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
,
1088 FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
1091 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
{
1092 ULONG NextEntryOffset
;
1095 TIME LastAccessTime
;
1098 LARGE_INTEGER EndOfFile
;
1099 LARGE_INTEGER AllocationSize
;
1100 ULONG FileAttributes
;
1101 ULONG FileNameLength
;
1103 CHAR ShortNameLength
;
1104 WCHAR ShortName
[12]; // 8.3 name
1106 } FILE_BOTH_DIRECTORY_INFORMATION
, *PFILE_BOTH_DIRECTORY_INFORMATION
,
1107 FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
1111 NotifyFilter / CompletionFilter:
1113 FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
1114 FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
1115 FILE_NOTIFY_CHANGE_NAME 0x00000003
1116 FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
1117 FILE_NOTIFY_CHANGE_SIZE 0x00000008
1118 FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
1119 FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
1120 FILE_NOTIFY_CHANGE_CREATION 0x00000040
1121 FILE_NOTIFY_CHANGE_EA 0x00000080
1122 FILE_NOTIFY_CHANGE_SECURITY 0x00000100
1123 FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
1124 FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
1125 FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
1128 typedef struct _FILE_NOTIFY_INFORMATION
{
1130 ULONG FileNameLength
;
1132 } FILE_NOTIFY_INFORMATION
;
1136 Action is one of the following values:
1138 FILE_ACTION_ADDED 0x00000001
1139 FILE_ACTION_REMOVED 0x00000002
1140 FILE_ACTION_MODIFIED 0x00000003
1141 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
1142 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
1143 FILE_ACTION_ADDED_STREAM 0x00000006
1144 FILE_ACTION_REMOVED_STREAM 0x00000007
1145 FILE_ACTION_MODIFIED_STREAM 0x00000008
1150 //FIXME: I am a win32 object
1153 (*PTIMERAPCROUTINE
)(
1154 LPVOID lpArgToCompletionRoutine
,
1155 DWORD dwTimerLowValue
,
1156 DWORD dwTimerHighValue
1160 // File System Control commands ( related to defragging )
1162 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
1163 #define FSCTL_GET_VOLUME_BITMAP 0x9006F
1164 #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
1165 #define FSCTL_MOVE_FILE 0x90074
1167 typedef struct _MAPPING_PAIR
1171 } MAPPING_PAIR
, *PMAPPING_PAIR
;
1173 typedef struct _GET_RETRIEVAL_DESCRIPTOR
1175 ULONG NumberOfPairs
;
1177 MAPPING_PAIR Pair
[0]; // variable size
1178 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
1180 typedef struct _BITMAP_DESCRIPTOR
1183 ULONGLONG ClustersToEndOfVol
;
1184 BYTE Map
[0]; // variable size
1185 } BITMAP_DESCRIPTOR
, *PBITMAP_DESCRIPTOR
;
1187 typedef struct _MOVEFILE_DESCRIPTOR
1191 LARGE_INTEGER StartVcn
;
1192 LARGE_INTEGER TargetLcn
;
1195 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
1199 //typedef enum _TIMER_TYPE
1201 // NotificationTimer,
1202 // SynchronizationTimer
1206 struct _LPC_PORT_BASIC_INFORMATION
1223 } LPC_PORT_BASIC_INFORMATION
, * PLPC_PORT_BASIC_INFORMATION
;