1 #ifndef __INCLUDE_DDK_ZWTYPES_H
2 #define __INCLUDE_DDK_ZWTYPES_H
4 typedef enum _DEBUG_CONTROL_CODE
6 DebugGetTraceInformation
= 1,
7 DebugSetInternalBreakpoint
,
9 DebugClearSpecialCalls
,
10 DebugQuerySpecialCalls
,
15 typedef enum _KPROFILE_SOURCE
20 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
21 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
24 extern ULONG EXPORTED NtBuildNumber
;
26 extern ULONG IMPORTED NtBuildNumber
;
32 #define EVENT_READ_ACCESS 1
33 #define EVENT_WRITE_ACCESS 2
36 // file disposition values
39 #define FILE_SUPERSEDE 0x0000
40 #define FILE_OPEN 0x0001
41 #define FILE_CREATE 0x0002
42 #define FILE_OPEN_IF 0x0003
43 #define FILE_OVERWRITE 0x0004
44 #define FILE_OVERWRITE_IF 0x0005
45 #define FILE_MAXIMUM_DISPOSITION 0x0005
47 // job query / set information class
49 typedef enum _JOBOBJECTINFOCLASS
{ // Q S
50 JobObjectBasicAccountingInformation
= 1, // Y N
51 JobObjectBasicLimitInformation
, // Y Y
52 JobObjectBasicProcessIdList
, // Y N
53 JobObjectBasicUIRestrictions
, // Y Y
54 JobObjectSecurityLimitInformation
, // Y Y
55 JobObjectEndOfJobTimeInformation
, // N Y
56 JobObjectAssociateCompletionPortInformation
, // N Y
57 JobObjectBasicAndIoAccountingInformation
, // Y N
58 JobObjectExtendedLimitInformation
, // Y Y
61 //process query / set information class
63 #define ProcessBasicInformation 0
64 #define ProcessQuotaLimits 1
65 #define ProcessIoCounters 2
66 #define ProcessVmCounters 3
67 #define ProcessTimes 4
68 #define ProcessBasePriority 5
69 #define ProcessRaisePriority 6
70 #define ProcessDebugPort 7
71 #define ProcessExceptionPort 8
72 #define ProcessAccessToken 9
73 #define ProcessLdtInformation 10
74 #define ProcessLdtSize 11
75 #define ProcessDefaultHardErrorMode 12
76 #define ProcessIoPortHandlers 13
77 #define ProcessPooledUsageAndLimits 14
78 #define ProcessWorkingSetWatch 15
79 #define ProcessUserModeIOPL 16
80 #define ProcessEnableAlignmentFaultFixup 17
81 #define ProcessPriorityClass 18
82 #define ProcessWx86Information 19
83 #define ProcessHandleCount 20
84 #define ProcessAffinityMask 21
85 #define ProcessPriorityBoost 22
86 #define ProcessDeviceMap 23
87 #define ProcessSessionInformation 24
88 #define ProcessForegroundInformation 25
89 #define ProcessWow64Information 26
90 /* ReactOS private. */
91 #define ProcessImageFileName 27
92 #define ProcessDesktop 28
93 #define MaxProcessInfoClass 29
96 * thread query / set information class
98 #define ThreadBasicInformation 0
100 #define ThreadPriority 2
101 #define ThreadBasePriority 3
102 #define ThreadAffinityMask 4
103 #define ThreadImpersonationToken 5
104 #define ThreadDescriptorTableEntry 6
105 #define ThreadEnableAlignmentFaultFixup 7
106 #define ThreadEventPair 8
107 #define ThreadQuerySetWin32StartAddress 9
108 #define ThreadZeroTlsCell 10
109 #define ThreadPerformanceCount 11
110 #define ThreadAmILastThread 12
111 #define ThreadIdealProcessor 13
112 #define ThreadPriorityBoost 14
113 #define ThreadSetTlsArrayAddress 15
114 #define ThreadIsIoPending 16
115 #define ThreadHideFromDebugger 17
116 #define MaxThreadInfoClass 17
118 // object handle information
120 #define ObjectBasicInformation 0
121 #define ObjectNameInformation 1
122 #define ObjectTypeInformation 2
123 #define ObjectAllInformation 3
124 #define ObjectDataInformation 4
128 typedef enum _ATOM_INFORMATION_CLASS
130 AtomBasicInformation
= 0,
131 AtomTableInformation
= 1,
132 } ATOM_INFORMATION_CLASS
;
134 typedef struct _ATOM_BASIC_INFORMATION
140 } ATOM_BASIC_INFORMATION
, *PATOM_BASIC_INFORMATION
;
142 typedef struct _ATOM_TABLE_INFORMATION
146 } ATOM_TABLE_INFORMATION
, *PATOM_TABLE_INFORMATION
;
149 // mutant information
151 typedef enum _MUTANT_INFORMATION_CLASS
153 MutantBasicInformation
= 0
154 } MUTANT_INFORMATION_CLASS
;
156 typedef struct _MUTANT_BASIC_INFORMATION
161 } MUTANT_BASIC_INFORMATION
, *PMUTANT_BASIC_INFORMATION
;
164 // semaphore information
166 typedef enum _SEMAPHORE_INFORMATION_CLASS
168 SemaphoreBasicInformation
= 0
169 } SEMAPHORE_INFORMATION_CLASS
;
171 typedef struct _SEMAPHORE_BASIC_INFORMATION
175 } SEMAPHORE_BASIC_INFORMATION
, *PSEMAPHORE_BASIC_INFORMATION
;
180 typedef enum _EVENT_INFORMATION_CLASS
182 EventBasicInformation
= 0
183 } EVENT_INFORMATION_CLASS
;
185 typedef struct _EVENT_BASIC_INFORMATION
187 EVENT_TYPE EventType
;
189 } EVENT_BASIC_INFORMATION
, *PEVENT_BASIC_INFORMATION
;
192 // system information
193 // {Nt|Zw}{Query|Set}SystemInformation
194 // (GN means Gary Nebbet in "NT/W2K Native API Reference")
197 enum _SYSTEM_INFORMATION_CLASS
199 SystemInformationClassMin
= 0,
200 SystemBasicInformation
= 0, /* Q */
202 SystemProcessorInformation
= 1, /* Q */
204 SystemPerformanceInformation
= 2, /* Q */
206 SystemTimeOfDayInformation
= 3, /* Q */
208 SystemPathInformation
= 4, /* Q (checked build only) */
209 SystemNotImplemented1
= 4, /* Q (GN) */
211 SystemProcessInformation
= 5, /* Q */
212 SystemProcessesAndThreadsInformation
= 5, /* Q (GN) */
214 SystemCallCountInfoInformation
= 6, /* Q */
215 SystemCallCounts
= 6, /* Q (GN) */
217 SystemDeviceInformation
= 7, /* Q */
218 // It conflicts with symbol in ntoskrnl/io/resource.c
219 // SystemConfigurationInformation = 7, /* Q (GN) */
221 SystemProcessorPerformanceInformation
= 8, /* Q */
222 SystemProcessorTimes
= 8, /* Q (GN) */
224 SystemFlagsInformation
= 9, /* QS */
225 SystemGlobalFlag
= 9, /* QS (GN) */
227 SystemCallTimeInformation
= 10,
228 SystemNotImplemented2
= 10, /* (GN) */
230 SystemModuleInformation
= 11, /* Q */
232 SystemLocksInformation
= 12, /* Q */
233 SystemLockInformation
= 12, /* Q (GN) */
235 SystemStackTraceInformation
= 13,
236 SystemNotImplemented3
= 13, /* Q (GN) */
238 SystemPagedPoolInformation
= 14,
239 SystemNotImplemented4
= 14, /* Q (GN) */
241 SystemNonPagedPoolInformation
= 15,
242 SystemNotImplemented5
= 15, /* Q (GN) */
244 SystemHandleInformation
= 16, /* Q */
246 SystemObjectInformation
= 17, /* Q */
248 SystemPageFileInformation
= 18, /* Q */
249 SystemPagefileInformation
= 18, /* Q (GN) */
251 SystemVdmInstemulInformation
= 19, /* Q */
252 SystemInstructionEmulationCounts
= 19, /* Q (GN) */
254 SystemVdmBopInformation
= 20,
255 SystemInvalidInfoClass1
= 20, /* (GN) */
257 SystemFileCacheInformation
= 21, /* QS */
258 SystemCacheInformation
= 21, /* QS (GN) */
260 SystemPoolTagInformation
= 22, /* Q (checked build only) */
262 SystemInterruptInformation
= 23, /* Q */
263 SystemProcessorStatistics
= 23, /* Q (GN) */
265 SystemDpcBehaviourInformation
= 24, /* QS */
266 SystemDpcInformation
= 24, /* QS (GN) */
268 SystemFullMemoryInformation
= 25,
269 SystemNotImplemented6
= 25, /* (GN) */
271 SystemLoadImage
= 26, /* S (callable) (GN) */
273 SystemUnloadImage
= 27, /* S (callable) (GN) */
275 SystemTimeAdjustmentInformation
= 28, /* QS */
276 SystemTimeAdjustment
= 28, /* QS (GN) */
278 SystemSummaryMemoryInformation
= 29,
279 SystemNotImplemented7
= 29, /* (GN) */
281 SystemNextEventIdInformation
= 30,
282 SystemNotImplemented8
= 30, /* (GN) */
284 SystemEventIdsInformation
= 31,
285 SystemNotImplemented9
= 31, /* (GN) */
287 SystemCrashDumpInformation
= 32, /* Q */
289 SystemExceptionInformation
= 33, /* Q */
291 SystemCrashDumpStateInformation
= 34, /* Q */
293 SystemKernelDebuggerInformation
= 35, /* Q */
295 SystemContextSwitchInformation
= 36, /* Q */
297 SystemRegistryQuotaInformation
= 37, /* QS */
299 SystemLoadAndCallImage
= 38, /* S (GN) */
301 SystemPrioritySeparation
= 39, /* S */
303 SystemPlugPlayBusInformation
= 40,
304 SystemNotImplemented10
= 40, /* Q (GN) */
306 SystemDockInformation
= 41,
307 SystemNotImplemented11
= 41, /* Q (GN) */
309 SystemPowerInformation
= 42,
310 SystemInvalidInfoClass2
= 42, /* (GN) */
312 SystemProcessorSpeedInformation
= 43,
313 SystemInvalidInfoClass3
= 43, /* (GN) */
315 SystemCurrentTimeZoneInformation
= 44, /* QS */
316 SystemTimeZoneInformation
= 44, /* QS (GN) */
318 SystemLookasideInformation
= 45, /* Q */
320 SystemSetTimeSlipEvent
= 46, /* S (GN) */
322 SystemCreateSession
= 47, /* S (GN) */
324 SystemDeleteSession
= 48, /* S (GN) */
326 SystemInvalidInfoClass4
= 49, /* (GN) */
328 SystemRangeStartInformation
= 50, /* Q (GN) */
330 SystemVerifierInformation
= 51, /* QS (GN) */
332 SystemAddVerifier
= 52, /* S (GN) */
334 SystemSessionProcessesInformation
= 53, /* Q (GN) */
335 SystemInformationClassMax
337 } SYSTEM_INFORMATION_CLASS
;
339 // SystemBasicInformation (0)
341 struct _SYSTEM_BASIC_INFORMATION
344 ULONG TimerResolution
;
346 ULONG NumberOfPhysicalPages
;
347 ULONG LowestPhysicalPageNumber
;
348 ULONG HighestPhysicalPageNumber
;
349 ULONG AllocationGranularity
;
350 ULONG MinimumUserModeAddress
;
351 ULONG MaximumUserModeAddress
;
352 KAFFINITY ActiveProcessorsAffinityMask
;
353 CCHAR NumberOfProcessors
;
354 } SYSTEM_BASIC_INFORMATION
, *PSYSTEM_BASIC_INFORMATION
;
356 // SystemProcessorInformation (1)
358 struct _SYSTEM_PROCESSOR_INFORMATION
360 USHORT ProcessorArchitecture
;
361 USHORT ProcessorLevel
;
362 USHORT ProcessorRevision
;
364 ULONG ProcessorFeatureBits
;
365 } SYSTEM_PROCESSOR_INFORMATION
, *PSYSTEM_PROCESSOR_INFORMATION
;
367 // SystemPerformanceInfo (2)
369 struct _SYSTEM_PERFORMANCE_INFORMATION
371 LARGE_INTEGER IdleProcessorTime
;
372 LARGE_INTEGER IoReadTransferCount
;
373 LARGE_INTEGER IoWriteTransferCount
;
374 LARGE_INTEGER IoOtherTransferCount
;
375 ULONG IoReadOperationCount
;
376 ULONG IoWriteOperationCount
;
377 ULONG IoOtherOperationCount
;
378 ULONG AvailablePages
;
381 ULONG PeakCommitment
;
382 ULONG PageFaultCount
;
383 ULONG CopyOnWriteCount
;
384 ULONG TransitionCount
;
385 ULONG CacheTransitionCount
;
386 ULONG DemandZeroCount
;
388 ULONG PageReadIoCount
;
389 ULONG CacheReadCount
;
391 ULONG DirtyPagesWriteCount
;
392 ULONG DirtyWriteIoCount
;
393 ULONG MappedPagesWriteCount
;
394 ULONG MappedWriteIoCount
;
395 ULONG PagedPoolPages
;
396 ULONG NonPagedPoolPages
;
401 ULONG MmTotalSystemFreePtes
;
402 ULONG MmSystemCodepage
;
403 ULONG MmTotalSystemDriverPages
;
404 ULONG MmTotalSystemCodePages
;
408 ULONG MmSystemCachePage
;
409 ULONG MmPagedPoolPage
;
410 ULONG MmSystemDriverPage
;
411 ULONG CcFastReadNoWait
;
412 ULONG CcFastReadWait
;
413 ULONG CcFastReadResourceMiss
;
414 ULONG CcFastReadNotPossible
;
415 ULONG CcFastMdlReadNoWait
;
416 ULONG CcFastMdlReadWait
;
417 ULONG CcFastMdlReadResourceMiss
;
418 ULONG CcFastMdlReadNotPossible
;
419 ULONG CcMapDataNoWait
;
421 ULONG CcMapDataNoWaitMiss
;
422 ULONG CcMapDataWaitMiss
;
423 ULONG CcPinMappedDataCount
;
424 ULONG CcPinReadNoWait
;
426 ULONG CcPinReadNoWaitMiss
;
427 ULONG CcPinReadWaitMiss
;
428 ULONG CcCopyReadNoWait
;
429 ULONG CcCopyReadWait
;
430 ULONG CcCopyReadNoWaitMiss
;
431 ULONG CcCopyReadWaitMiss
;
432 ULONG CcMdlReadNoWait
;
434 ULONG CcMdlReadNoWaitMiss
;
435 ULONG CcMdlReadWaitMiss
;
436 ULONG CcReadaheadIos
;
437 ULONG CcLazyWriteIos
;
438 ULONG CcLazyWritePages
;
441 ULONG ContextSwitches
;
446 } SYSTEM_PERFORMANCE_INFO
, *PSYSTEM_PERFORMANCE_INFO
;
448 // SystemTimeOfDayInformation (3)
450 struct _SYSTEM_TIMEOFDAY_INFORMATION
452 LARGE_INTEGER BootTime
;
453 LARGE_INTEGER CurrentTime
;
454 LARGE_INTEGER TimeZoneBias
;
457 } SYSTEM_TIMEOFDAY_INFORMATION
, *PSYSTEM_TIMEOFDAY_INFORMATION
;
459 // SystemPathInformation (4)
462 struct _SYSTEM_PATH_INFORMATION
466 } SYSTEM_PATH_INFORMATION
, * PSYSTEM_PATH_INFORMATION
;
468 // SystemProcessInformation (5)
470 struct _SYSTEM_THREAD_INFORMATION
478 ULONG DynamicPriority
;
482 KWAIT_REASON WaitReason
;
484 } SYSTEM_THREAD_INFORMATION
, *PSYSTEM_THREAD_INFORMATION
;
487 struct SYSTEM_PROCESS_INFORMATION
489 ULONG RelativeOffset
;
498 ULONG ParentProcessId
;
501 ULONG PeakVirtualSizeBytes
;
502 ULONG TotalVirtualSizeBytes
;
503 ULONG PageFaultCount
;
504 ULONG PeakWorkingSetSizeBytes
;
505 ULONG TotalWorkingSetSizeBytes
;
506 ULONG PeakPagedPoolUsagePages
;
507 ULONG TotalPagedPoolUsagePages
;
508 ULONG PeakNonPagedPoolUsagePages
;
509 ULONG TotalNonPagedPoolUsagePages
;
510 ULONG TotalPageFileUsageBytes
;
511 ULONG PeakPageFileUsageBytes
;
512 ULONG TotalPrivateBytes
;
513 SYSTEM_THREAD_INFORMATION ThreadSysInfo
[1];
515 } SYSTEM_PROCESS_INFORMATION
, *PSYSTEM_PROCESS_INFORMATION
;
517 // SystemCallCountInformation (6)
519 struct _SYSTEM_SDT_INFORMATION
522 ULONG NumberOfSystemServiceTables
;
523 ULONG NumberOfServices
[1];
524 ULONG ServiceCounters
[1];
526 } SYSTEM_SDT_INFORMATION
, *PSYSTEM_SDT_INFORMATION
;
528 // SystemDeviceInformation (7)
530 struct _SYSTEM_DEVICE_INFORMATION
533 ULONG NumberOfFloppies
;
534 ULONG NumberOfCdRoms
;
536 ULONG NumberOfSerialPorts
;
537 ULONG NumberOfParallelPorts
;
538 } SYSTEM_DEVICE_INFORMATION
, *PSYSTEM_DEVICE_INFORMATION
;
540 // SystemProcessorPerformanceInformation (8)
541 // (one per processor in the system)
543 struct _SYSTEM_PROCESSORTIME_INFO
545 TIME TotalProcessorRunTime
;
546 TIME TotalProcessorTime
;
547 TIME TotalProcessorUserTime
;
549 TIME TotalInterruptTime
;
550 ULONG TotalInterrupts
;
553 } SYSTEM_PROCESSORTIME_INFO
, *PSYSTEM_PROCESSORTIME_INFO
;
555 // SystemFlagsInformation (9)
557 struct _SYSTEM_FLAGS_INFORMATION
561 } SYSTEM_FLAGS_INFORMATION
, * PSYSTEM_FLAGS_INFORMATION
;
563 #define FLG_STOP_ON_EXCEPTION 0x00000001
564 #define FLG_SHOW_LDR_SNAPS 0x00000002
565 #define FLG_DEBUG_INITIAL_COMMAND 0x00000004
566 #define FLG_STOP_ON_HANG_GUI 0x00000008
567 #define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
568 #define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
569 #define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
570 #define FLG_HEAP_VALIDATE_ALL 0x00000080
571 #define FLG_POOL_ENABLE_TAIL_CHECK 0x00000100
572 #define FLG_POOL_ENABLE_FREE_CHECK 0x00000200
573 #define FLG_POOL_ENABLE_TAGGING 0x00000400
574 #define FLG_HEAP_ENABLE_TAGGING 0x00000800
575 #define FLG_USER_STACK_TRACE_DB 0x00001000
576 #define FLG_KERNEL_STACK_TRACE_DB 0x00002000
577 #define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
578 #define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
579 #define FLG_IGNORE_DEBUG_PRIV 0x00010000
580 #define FLG_ENABLE_CSRDEBUG 0x00020000
581 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
582 #define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
583 #define FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
584 #define FLG_HEAP_DISABLE_COALESCING 0x00200000
585 #define FLG_ENABLE_CLOSE_EXCEPTION 0x00400000
586 #define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
587 #define FLG_UNKNOWN_01000000 0x01000000
588 #define FLG_UNKNOWN_02000000 0x02000000
589 #define FLG_UNKNOWN_04000000 0x04000000
590 #define FLG_ENABLE_DBGPRINT_BUFFERING 0x08000000
591 #define FLG_UNKNOWN_10000000 0x10000000
592 #define FLG_UNKNOWN_20000000 0x20000000
593 #define FLG_UNKNOWN_40000000 0x40000000
594 #define FLG_UNKNOWN_80000000 0x80000000
596 // SystemCallTimeInformation (10)
599 // SystemModuleInformation (11)
601 struct _SYSTEM_MODULE_ENTRY
609 USHORT NameLength
; /* Length of module name not including the path, this field contains valid value only for NTOSKRNL module*/
610 USHORT PathLength
; /* Length of 'directory path' part of modulename*/
612 } SYSTEM_MODULE_ENTRY
, * PSYSTEM_MODULE_ENTRY
;
615 struct _SYSTEM_MODULE_INFORMATION
618 SYSTEM_MODULE_ENTRY Module
[1];
619 } SYSTEM_MODULE_INFORMATION
, *PSYSTEM_MODULE_INFORMATION
;
621 // SystemLocksInformation (12)
623 struct _SYSTEM_RESOURCE_LOCK_ENTRY
625 ULONG ResourceAddress
;
629 ULONG ContentionCount
;
631 ULONG NumberOfSharedWaiters
;
632 ULONG NumberOfExclusiveWaiters
;
634 } SYSTEM_RESOURCE_LOCK_ENTRY
, *PSYSTEM_RESOURCE_LOCK_ENTRY
;
637 struct _SYSTEM_RESOURCE_LOCK_INFO
640 SYSTEM_RESOURCE_LOCK_ENTRY Lock
[1];
642 } SYSTEM_RESOURCE_LOCK_INFO
, *PSYSTEM_RESOURCE_LOCK_INFO
;
644 // SystemInformation13 (13)
647 // SystemInformation14 (14)
650 // SystemInformation15 (15)
653 // SystemHandleInformation (16)
656 struct _SYSTEM_HANDLE_ENTRY
665 } SYSTEM_HANDLE_ENTRY
, *PSYSTEM_HANDLE_ENTRY
;
668 struct _SYSTEM_HANDLE_INFORMATION
671 SYSTEM_HANDLE_ENTRY Handle
[1];
673 } SYSTEM_HANDLE_INFORMATION
, *PSYSTEM_HANDLE_INFORMATION
;
675 // SystemObjectInformation (17)
677 struct _SYSTEM_OBJECT_TYPE_INFORMATION
679 ULONG NextEntryOffset
;
683 ULONG InvalidAttributes
;
684 GENERIC_MAPPING GenericMapping
;
685 ACCESS_MASK ValidAccessMask
;
690 } SYSTEM_OBJECT_TYPE_INFORMATION
, *PSYSTEM_OBJECT_TYPE_INFORMATION
;
693 struct _SYSTEM_OBJECT_INFORMATION
695 ULONG NextEntryOffset
;
697 ULONG CreatorProcessId
;
702 ULONG PagedPoolUsage
;
703 ULONG NonPagedPoolUsage
;
704 ULONG ExclusiveProcessId
;
705 PSECURITY_DESCRIPTOR SecurityDescriptor
;
708 } SYSTEM_OBJECT_INFORMATION
, *PSYSTEM_OBJECT_INFORMATION
;
710 // SystemPageFileInformation (18)
712 struct _SYSTEM_PAGEFILE_INFORMATION
714 ULONG RelativeOffset
;
715 ULONG CurrentSizePages
;
716 ULONG TotalUsedPages
;
718 UNICODE_STRING PagefileFileName
;
720 } SYSTEM_PAGEFILE_INFORMATION
, *PSYSTEM_PAGEFILE_INFORMATION
;
722 // SystemInstructionEmulationInfo (19)
724 struct _SYSTEM_VDM_INFORMATION
726 ULONG VdmSegmentNotPresentCount
;
728 ULONG VdmESPREFIXCount
;
729 ULONG VdmCSPREFIXCount
;
730 ULONG VdmSSPREFIXCount
;
731 ULONG VdmDSPREFIXCount
;
732 ULONG VdmFSPREFIXCount
;
733 ULONG VdmGSPREFIXCount
;
734 ULONG VdmOPER32PREFIXCount
;
735 ULONG VdmADDR32PREFIXCount
;
737 ULONG VdmINSWV86Count
;
745 ULONG VdmINBIMMCount
;
746 ULONG VdmINWIMMCount
;
747 ULONG VdmOUTBIMMCount
;
748 ULONG VdmOUTWIMMCount
;
753 ULONG VdmLOCKPREFIXCount
;
754 ULONG VdmREPNEPREFIXCount
;
755 ULONG VdmREPPREFIXCount
;
761 } SYSTEM_VDM_INFORMATION
, *PSYSTEM_VDM_INFORMATION
;
763 // SystemInformation20 (20)
766 // SystemCacheInformation (21)
768 struct _SYSTEM_CACHE_INFORMATION
772 ULONG PageFaultCount
;
773 ULONG MinimumWorkingSet
;
774 ULONG MaximumWorkingSet
;
777 } SYSTEM_CACHE_INFORMATION
;
779 // SystemPoolTagInformation (22)
780 // found by Klaus P. Gerlicher
781 // (implemented only in checked builds)
783 struct _POOL_TAG_STATS
785 ULONG AllocationCount
;
792 struct _SYSTEM_POOL_TAG_ENTRY
795 POOL_TAG_STATS Paged
;
796 POOL_TAG_STATS NonPaged
;
798 } SYSTEM_POOL_TAG_ENTRY
, * PSYSTEM_POOL_TAG_ENTRY
;
801 struct _SYSTEM_POOL_TAG_INFO
804 SYSTEM_POOL_TAG_ENTRY PoolEntry
[1];
806 } SYSTEM_POOL_TAG_INFO
, *PSYSTEM_POOL_TAG_INFO
;
808 // SystemProcessorScheduleInfo (23)
810 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
812 ULONG nContextSwitches
;
815 ULONG TimerResolution
;
819 } SYSTEM_PROCESSOR_SCHEDULE_INFO
, *PSYSTEM_PROCESSOR_SCHEDULE_INFO
;
821 // SystemDpcInformation (24)
823 struct _SYSTEM_DPC_INFORMATION
826 ULONG KiMaximumDpcQueueDepth
;
827 ULONG KiMinimumDpcRate
;
828 ULONG KiAdjustDpcThreshold
;
829 ULONG KiIdealDpcRate
;
831 } SYSTEM_DPC_INFORMATION
, *PSYSTEM_DPC_INFORMATION
;
833 // SystemInformation25 (25)
836 // SystemLoadImage (26)
837 typedef struct _SYSTEM_LOAD_IMAGE
839 UNICODE_STRING ModuleName
;
841 PVOID SectionPointer
;
843 PVOID ExportDirectory
;
844 } SYSTEM_LOAD_IMAGE
, *PSYSTEM_LOAD_IMAGE
;
846 // SystemUnloadImage (27)
847 typedef struct _SYSTEM_UNLOAD_IMAGE
850 } SYSTEM_UNLOAD_IMAGE
, *PSYSTEM_UNLOAD_IMAGE
;
852 // SystemTimeAdjustmentInformation (28)
854 struct _SYSTEM_QUERY_TIME_ADJUSTMENT
856 ULONG TimeAdjustment
;
857 ULONG MaximumIncrement
;
858 BOOLEAN TimeSynchronization
;
860 } SYSTEM_QUERY_TIME_ADJUSTMENT
, *PSYSTEM_QUERY_TIME_ADJUSTMENT
;
863 struct _SYSTEM_SET_TIME_ADJUSTMENT
865 ULONG TimeAdjustment
;
866 BOOLEAN TimeSynchronization
;
868 } SYSTEM_TIME_ADJUSTMENT_INFO
, *PSYSTEM_TIME_ADJUSTMENT_INFO
;
870 // SystemProcessorFaultCountInfo (33)
872 struct _SYSTEM_PROCESSOR_FAULT_INFO
874 ULONG nAlignmentFixup
;
875 ULONG nExceptionDispatches
;
876 ULONG nFloatingEmulation
;
879 } SYSTEM_PROCESSOR_FAULT_INFO
, *PSYSTEM_PROCESSOR_FAULT_INFO
;
881 // SystemCrashDumpStateInfo (34)
884 // SystemDebuggerInformation (35)
886 struct _SYSTEM_DEBUGGER_INFO
888 BOOLEAN KdDebuggerEnabled
;
889 BOOLEAN KdDebuggerPresent
;
891 } SYSTEM_DEBUGGER_INFO
, *PSYSTEM_DEBUGGER_INFO
;
893 // SystemInformation36 (36)
896 // SystemQuotaInformation (37)
898 struct _SYSTEM_QUOTA_INFORMATION
900 ULONG CmpGlobalQuota
;
901 ULONG CmpGlobalQuotaUsed
;
902 ULONG MmSizeofPagedPoolInBytes
;
904 } SYSTEM_QUOTA_INFORMATION
, *PSYSTEM_QUOTA_INFORMATION
;
906 // SystemLoadAndCallImage(38)
907 typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE
909 UNICODE_STRING ModuleName
;
910 } SYSTEM_LOAD_AND_CALL_IMAGE
, *PSYSTEM_LOAD_AND_CALL_IMAGE
;
912 // SystemTimeZoneInformation (44)
914 struct _SYSTEM_TIME_ZONE_INFORMATION
917 WCHAR StandardName
[32];
920 WCHAR DaylightName
[32];
924 } SYSTEM_TIME_ZONE_INFORMATION
, * PSYSTEM_TIME_ZONE_INFORMATION
;
926 // SystemLookasideInformation (45)
928 struct _SYSTEM_LOOKASIDE_INFORMATION
932 ULONG TotalAllocates
;
933 ULONG AllocatesMisses
;
940 } SYSTEM_LOOKASIDE_INFORMATION
, * PSYSTEM_LOOKASIDE_INFORMATION
;
942 // SystemSetTimeSlipEvent (46)
944 struct _SYSTEM_SET_TIME_SLIP_EVENT
946 HANDLE TimeSlipEvent
; /* IN */
948 } SYSTEM_SET_TIME_SLIP_EVENT
, * PSYSTEM_SET_TIME_SLIP_EVENT
;
950 // SystemCreateSession (47)
951 // (available only on TSE/NT5+)
953 struct _SYSTEM_CREATE_SESSION
955 ULONG SessionId
; /* OUT */
957 } SYSTEM_CREATE_SESSION
, * PSYSTEM_CREATE_SESSION
;
959 // SystemDeleteSession (48)
960 // (available only on TSE/NT5+)
962 struct _SYSTEM_DELETE_SESSION
964 ULONG SessionId
; /* IN */
966 } SYSTEM_DELETE_SESSION
, * PSYSTEM_DELETE_SESSION
;
971 // SystemRangeStartInformation (50)
973 struct _SYSTEM_RANGE_START_INFORMATION
975 PVOID SystemRangeStart
;
977 } SYSTEM_RANGE_START_INFORMATION
, * PSYSTEM_RANGE_START_INFORMATION
;
979 // SystemVerifierInformation (51)
982 // SystemAddVerifier (52)
985 // SystemSessionProcessesInformation (53)
986 // (available only on TSE/NT5+)
988 struct _SYSTEM_SESSION_PROCESSES_INFORMATION
992 PVOID Buffer
; /* same format as in SystemProcessInformation */
994 } SYSTEM_SESSION_PROCESSES_INFORMATION
, * PSYSTEM_SESSION_PROCESSES_INFORMATION
;
996 // memory information
998 typedef enum _MEMORY_INFORMATION_CLASS
{
999 MemoryBasicInformation
,
1000 MemoryWorkingSetList
,
1001 MemorySectionName
//,
1002 //MemoryBasicVlmInformation //???
1003 } MEMORY_INFORMATION_CLASS
;
1005 typedef struct _MEMORY_BASIC_INFORMATION
{ // Information Class 0
1007 PVOID AllocationBase
;
1008 ULONG AllocationProtect
;
1013 } MEMORY_BASIC_INFORMATION
, *PMEMORY_BASIC_INFORMATION
;
1015 typedef struct _MEMORY_WORKING_SET_LIST
{ // Information Class 1
1016 ULONG NumberOfPages
;
1017 ULONG WorkingSetList
[1];
1018 } MEMORY_WORKING_SET_LIST
, *PMEMORY_WORKING_SET_LIST
;
1020 // Information Class 2
1021 #define _MEMORY_SECTION_NAME_STATIC(__bufsize__) \
1023 UNICODE_STRING SectionFileName; \
1024 WCHAR NameBuffer[(__bufsize__)]; \
1027 #define MEMORY_SECTION_NAME_STATIC(__bufsize__) \
1028 struct _MEMORY_SECTION_NAME_STATIC((__bufsize__)
1030 typedef struct _MEMORY_SECTION_NAME_STATIC(ANYSIZE_ARRAY
)
1031 MEMORY_SECTION_NAME
, *PMEMORY_SECTION_NAME
;
1035 typedef enum SHUTDOWN_ACTION_TAG
{
1046 // number of wait objects
1048 #define THREAD_WAIT_OBJECTS 3
1049 //#define MAXIMUM_WAIT_OBJECTS 64
1051 // key restore flags
1053 #define REG_WHOLE_HIVE_VOLATILE 1
1054 #define REG_REFRESH_HIVE 2
1056 // object type access rights
1058 #define OBJECT_TYPE_CREATE 0x0001
1059 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1061 // directory access rights
1063 #define DIRECTORY_QUERY 0x0001
1064 #define DIRECTORY_TRAVERSE 0x0002
1065 #define DIRECTORY_CREATE_OBJECT 0x0004
1066 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
1068 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
1070 // symbolic link access rights
1072 #define SYMBOLIC_LINK_QUERY 0x0001
1073 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1075 // Information class 0
1076 typedef struct _PROCESS_BASIC_INFORMATION
1078 NTSTATUS ExitStatus
;
1079 PPEB PebBaseAddress
;
1080 KAFFINITY AffinityMask
;
1081 KPRIORITY BasePriority
;
1082 ULONG UniqueProcessId
;
1083 ULONG InheritedFromUniqueProcessId
;
1084 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
1086 // Information class 1
1087 typedef struct _QUOTA_LIMITS
1089 ULONG PagedPoolLimit
;
1090 ULONG NonPagedPoolLimit
;
1091 ULONG MinimumWorkingSetSize
;
1092 ULONG MaximumWorkingSetSize
;
1093 ULONG PagefileLimit
;
1095 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
1097 // Information class 2
1098 typedef struct _IO_COUNTERS
1100 ULONG ReadOperationCount
;
1101 ULONG WriteOperationCount
;
1102 ULONG OtherOperationCount
;
1103 LARGE_INTEGER ReadTransferCount
;
1104 LARGE_INTEGER WriteTransferCount
;
1105 LARGE_INTEGER OtherTransferCount
;
1106 } IO_COUNTERS
, *PIO_COUNTERS
;
1108 // Information class 3
1109 typedef struct _VM_COUNTERS_
1111 ULONG PeakVirtualSize
;
1113 ULONG PageFaultCount
;
1114 ULONG PeakWorkingSetSize
;
1115 ULONG WorkingSetSize
;
1116 ULONG QuotaPeakPagedPoolUsage
;
1117 ULONG QuotaPagedPoolUsage
;
1118 ULONG QuotaPeakNonPagedPoolUsage
;
1119 ULONG QuotaNonPagedPoolUsage
;
1120 ULONG PagefileUsage
;
1121 ULONG PeakPagefileUsage
;
1122 } VM_COUNTERS
, *PVM_COUNTERS
;
1124 // Information class 4
1125 typedef struct _KERNEL_USER_TIMES
1131 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1133 // Information class 9
1134 typedef struct _PROCESS_ACCESS_TOKEN
1138 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1140 // Information class 14
1141 typedef struct _POOLED_USAGE_AND_LIMITS_
1143 ULONG PeakPagedPoolUsage
;
1144 ULONG PagedPoolUsage
;
1145 ULONG PagedPoolLimit
;
1146 ULONG PeakNonPagedPoolUsage
;
1147 ULONG NonPagedPoolUsage
;
1148 ULONG NonPagedPoolLimit
;
1149 ULONG PeakPagefileUsage
;
1150 ULONG PagefileUsage
;
1151 ULONG PagefileLimit
;
1152 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
1154 // Information class 15
1155 typedef struct _PROCESS_WS_WATCH_INFORMATION
1159 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1161 // Information class 18
1162 typedef struct _PROCESS_PRIORITY_CLASS
1165 UCHAR PriorityClass
;
1166 } PROCESS_PRIORITY_CLASS
, *PPROCESS_PRIORITY_CLASS
;
1168 // Information class 23
1169 typedef struct _PROCESS_DEVICEMAP_INFORMATION
1173 HANDLE DirectoryHandle
;
1177 UCHAR DriveType
[32];
1180 } PROCESS_DEVICEMAP_INFORMATION
, *pPROCESS_DEVICEMAP_INFORMATION
;
1182 // Information class 24
1183 typedef struct _PROCESS_SESSION_INFORMATION
1186 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1188 // thread information
1190 // incompatible with MS NT
1192 typedef struct _THREAD_BASIC_INFORMATION
1194 NTSTATUS ExitStatus
;
1195 PVOID TebBaseAddress
; // PNT_TIB (GN)
1197 KAFFINITY AffinityMask
;
1199 KPRIORITY BasePriority
;
1200 } THREAD_BASIC_INFORMATION
, *PTHREAD_BASIC_INFORMATION
;
1202 // object information
1204 typedef struct _OBJECT_NAME_INFORMATION
1206 UNICODE_STRING Name
;
1207 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
1211 typedef struct _OBJECT_DATA_INFORMATION
1213 BOOLEAN bInheritHandle
;
1214 BOOLEAN bProtectFromClose
;
1215 } OBJECT_DATA_INFORMATION
, *POBJECT_DATA_INFORMATION
;
1218 typedef struct _OBJECT_TYPE_INFORMATION
1220 UNICODE_STRING Name
;
1221 UNICODE_STRING Type
;
1223 ULONG ReferenceCount
;
1224 } OBJECT_TYPE_INFORMATION
, *POBJECT_TYPE_INFORMATION
;
1228 typedef struct _FILE_BASIC_INFORMATION
1231 TIME LastAccessTime
;
1234 ULONG FileAttributes
;
1235 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
1237 typedef struct _FILE_STANDARD_INFORMATION
1239 LARGE_INTEGER AllocationSize
;
1240 LARGE_INTEGER EndOfFile
;
1241 ULONG NumberOfLinks
;
1242 BOOLEAN DeletePending
;
1244 } FILE_STANDARD_INFORMATION
, *PFILE_STANDARD_INFORMATION
;
1246 typedef struct _FILE_POSITION_INFORMATION
1248 LARGE_INTEGER CurrentByteOffset
;
1249 } FILE_POSITION_INFORMATION
, *PFILE_POSITION_INFORMATION
;
1251 typedef struct _FILE_ALIGNMENT_INFORMATION
1253 ULONG AlignmentRequirement
;
1254 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1256 typedef struct _FILE_DISPOSITION_INFORMATION
1258 BOOLEAN DoDeleteFile
;
1259 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1261 typedef struct _FILE_END_OF_FILE_INFORMATION
1263 LARGE_INTEGER EndOfFile
;
1264 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1266 typedef struct _FILE_NETWORK_OPEN_INFORMATION
1269 TIME LastAccessTime
;
1272 LARGE_INTEGER AllocationSize
;
1273 LARGE_INTEGER EndOfFile
;
1274 ULONG FileAttributes
;
1275 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
1277 typedef struct _FILE_FULL_EA_INFORMATION
1279 ULONG NextEntryOffset
;
1282 USHORT EaValueLength
;
1284 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
1287 typedef struct _FILE_EA_INFORMATION
{
1289 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
1292 typedef struct _FILE_GET_EA_INFORMATION
{
1293 ULONG NextEntryOffset
;
1296 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
1298 typedef struct _FILE_STREAM_INFORMATION
{
1299 ULONG NextEntryOffset
;
1300 ULONG StreamNameLength
;
1301 LARGE_INTEGER StreamSize
;
1302 LARGE_INTEGER StreamAllocationSize
;
1303 WCHAR StreamName
[0];
1304 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
1306 typedef struct _FILE_ALLOCATION_INFORMATION
{
1307 LARGE_INTEGER AllocationSize
;
1308 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
1310 typedef struct _FILE_NAME_INFORMATION
{
1311 ULONG FileNameLength
;
1313 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1315 typedef struct _FILE_NAMES_INFORMATION
1317 ULONG NextEntryOffset
;
1319 ULONG FileNameLength
;
1321 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
1324 typedef struct _FILE_RENAME_INFORMATION
{
1327 ULONG FileNameLength
;
1329 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
1332 typedef struct _FILE_INTERNAL_INFORMATION
{
1333 LARGE_INTEGER IndexNumber
;
1334 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
1336 typedef struct _FILE_ACCESS_INFORMATION
{
1337 ACCESS_MASK AccessFlags
;
1338 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
1341 typedef struct _FILE_MODE_INFORMATION
{
1343 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
1346 typedef struct _FILE_PIPE_INFORMATION
{
1348 ULONG CompletionMode
;
1349 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
1351 typedef struct _FILE_PIPE_LOCAL_INFORMATION
{
1352 ULONG NamedPipeType
;
1353 ULONG NamedPipeConfiguration
;
1354 ULONG MaximumInstances
;
1355 ULONG CurrentInstances
;
1357 ULONG ReadDataAvailable
;
1358 ULONG OutboundQuota
;
1359 ULONG WriteQuotaAvailable
;
1360 ULONG NamedPipeState
;
1362 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
1364 typedef struct _FILE_PIPE_REMOTE_INFORMATION
{
1365 LARGE_INTEGER CollectDataTime
;
1366 ULONG MaximumCollectionCount
;
1367 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
1369 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
{
1370 ULONG MaxMessageSize
;
1371 ULONG Unknown
; /* ?? */
1374 LARGE_INTEGER Timeout
;
1375 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
1377 typedef struct _FILE_MAILSLOT_SET_INFORMATION
{
1378 LARGE_INTEGER Timeout
;
1379 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
1381 typedef struct _FILE_COMPRESSION_INFORMATION
{
1382 LARGE_INTEGER CompressedFileSize
;
1383 USHORT CompressionFormat
;
1384 UCHAR CompressionUnitShift
;
1388 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
1390 typedef struct _FILE_ALL_INFORMATION
{
1391 FILE_BASIC_INFORMATION BasicInformation
;
1392 FILE_STANDARD_INFORMATION StandardInformation
;
1393 FILE_INTERNAL_INFORMATION InternalInformation
;
1394 FILE_EA_INFORMATION EaInformation
;
1395 FILE_ACCESS_INFORMATION AccessInformation
;
1396 FILE_POSITION_INFORMATION PositionInformation
;
1397 FILE_MODE_INFORMATION ModeInformation
;
1398 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
1399 FILE_NAME_INFORMATION NameInformation
;
1400 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
1403 // file system information structures
1405 typedef struct _FILE_FS_DEVICE_INFORMATION
{
1406 DEVICE_TYPE DeviceType
;
1407 ULONG Characteristics
;
1408 } FILE_FS_DEVICE_INFORMATION
, *PFILE_FS_DEVICE_INFORMATION
;
1411 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1412 TIME VolumeCreationTime
;
1413 ULONG VolumeSerialNumber
;
1414 ULONG VolumeLabelLength
;
1415 BOOLEAN SupportsObjects
;
1416 WCHAR VolumeLabel
[0];
1417 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1419 typedef struct _FILE_FS_SIZE_INFORMATION
{
1420 LARGE_INTEGER TotalAllocationUnits
;
1421 LARGE_INTEGER AvailableAllocationUnits
;
1422 ULONG SectorsPerAllocationUnit
;
1423 ULONG BytesPerSector
;
1424 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1426 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
1427 ULONG FileSystemAttributes
;
1428 LONG MaximumComponentNameLength
;
1429 ULONG FileSystemNameLength
;
1430 WCHAR FileSystemName
[0];
1431 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
1434 FileSystemAttributes is one of the following values:
1436 FILE_CASE_SENSITIVE_SEARCH 0x00000001
1437 FILE_CASE_PRESERVED_NAMES 0x00000002
1438 FILE_UNICODE_ON_DISK 0x00000004
1439 FILE_PERSISTENT_ACLS 0x00000008
1440 FILE_FILE_COMPRESSION 0x00000010
1441 FILE_VOLUME_QUOTAS 0x00000020
1442 FILE_VOLUME_IS_COMPRESSED 0x00008000
1444 typedef struct _FILE_FS_LABEL_INFORMATION
{
1445 ULONG VolumeLabelLength
;
1446 WCHAR VolumeLabel
[0];
1447 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1449 // read file scatter / write file scatter
1450 //FIXME I am a win32 struct aswell
1452 typedef union _FILE_SEGMENT_ELEMENT
{
1455 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1457 // directory information
1459 typedef struct _OBJDIR_INFORMATION
{
1460 UNICODE_STRING ObjectName
;
1461 UNICODE_STRING ObjectTypeName
; // Directory, Device ...
1463 } OBJDIR_INFORMATION
, *POBJDIR_INFORMATION
;
1466 typedef struct _FILE_DIRECTORY_INFORMATION
{
1467 ULONG NextEntryOffset
;
1470 TIME LastAccessTime
;
1473 LARGE_INTEGER EndOfFile
;
1474 LARGE_INTEGER AllocationSize
;
1475 ULONG FileAttributes
;
1476 ULONG FileNameLength
;
1478 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
1480 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
1481 ULONG NextEntryOffset
;
1484 TIME LastAccessTime
;
1487 LARGE_INTEGER EndOfFile
;
1488 LARGE_INTEGER AllocationSize
;
1489 ULONG FileAttributes
;
1490 ULONG FileNameLength
;
1492 WCHAR FileName
[0]; // variable size
1493 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
,
1494 FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
1497 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
{
1498 ULONG NextEntryOffset
;
1501 TIME LastAccessTime
;
1504 LARGE_INTEGER EndOfFile
;
1505 LARGE_INTEGER AllocationSize
;
1506 ULONG FileAttributes
;
1507 ULONG FileNameLength
;
1509 CHAR ShortNameLength
;
1510 WCHAR ShortName
[12]; // 8.3 name
1512 } FILE_BOTH_DIRECTORY_INFORMATION
, *PFILE_BOTH_DIRECTORY_INFORMATION
,
1513 FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
1517 NotifyFilter / CompletionFilter:
1519 FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
1520 FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
1521 FILE_NOTIFY_CHANGE_NAME 0x00000003
1522 FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
1523 FILE_NOTIFY_CHANGE_SIZE 0x00000008
1524 FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
1525 FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
1526 FILE_NOTIFY_CHANGE_CREATION 0x00000040
1527 FILE_NOTIFY_CHANGE_EA 0x00000080
1528 FILE_NOTIFY_CHANGE_SECURITY 0x00000100
1529 FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
1530 FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
1531 FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
1534 typedef struct _FILE_NOTIFY_INFORMATION
{
1536 ULONG FileNameLength
;
1538 } FILE_NOTIFY_INFORMATION
;
1542 Action is one of the following values:
1544 FILE_ACTION_ADDED 0x00000001
1545 FILE_ACTION_REMOVED 0x00000002
1546 FILE_ACTION_MODIFIED 0x00000003
1547 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
1548 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
1549 FILE_ACTION_ADDED_STREAM 0x00000006
1550 FILE_ACTION_REMOVED_STREAM 0x00000007
1551 FILE_ACTION_MODIFIED_STREAM 0x00000008
1556 // File System Control commands ( related to defragging )
1558 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
1559 #define FSCTL_GET_VOLUME_BITMAP 0x9006F
1560 #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
1561 #define FSCTL_MOVE_FILE 0x90074
1563 typedef struct _MAPPING_PAIR
1567 } MAPPING_PAIR
, *PMAPPING_PAIR
;
1569 typedef struct _GET_RETRIEVAL_DESCRIPTOR
1571 ULONG NumberOfPairs
;
1573 MAPPING_PAIR Pair
[0]; // variable size
1574 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
1576 typedef struct _BITMAP_DESCRIPTOR
1579 ULONGLONG ClustersToEndOfVol
;
1580 BYTE Map
[0]; // variable size
1581 } BITMAP_DESCRIPTOR
, *PBITMAP_DESCRIPTOR
;
1583 typedef struct _MOVEFILE_DESCRIPTOR
1587 LARGE_INTEGER StartVcn
;
1588 LARGE_INTEGER TargetLcn
;
1591 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
1595 //typedef enum _TIMER_TYPE
1597 // NotificationTimer,
1598 // SynchronizationTimer
1601 typedef struct _TIMER_BASIC_INFORMATION
1603 LARGE_INTEGER TimeRemaining
;
1604 BOOLEAN SignalState
;
1605 } TIMER_BASIC_INFORMATION
, *PTIMER_BASIC_INFORMATION
;
1607 typedef enum _TIMER_INFORMATION_CLASS
1609 TimerBasicInformation
1610 } TIMER_INFORMATION_CLASS
;
1613 struct _LPC_PORT_BASIC_INFORMATION
1630 } LPC_PORT_BASIC_INFORMATION
, * PLPC_PORT_BASIC_INFORMATION
;
1632 typedef struct _SECTION_BASIC_INFORMATION
1637 } SECTION_BASIC_INFORMATION
, *PSECTION_BASIC_INFORMATION
;
1639 typedef struct _SECTION_IMAGE_INFORMATION
1646 USHORT MinorSubsystemVersion
;
1647 USHORT MajorSubsystemVersion
;
1649 ULONG Characteristics
;
1654 } SECTION_IMAGE_INFORMATION
, *PSECTION_IMAGE_INFORMATION
;
1656 typedef enum _SECTION_INFORMATION_CLASS
1658 SectionBasicInformation
,
1659 SectionImageInformation
,
1660 } SECTION_INFORMATION_CLASS
;