1 #ifndef __INCLUDE_DDK_ZWTYPES_H
2 #define __INCLUDE_DDK_ZWTYPES_H
4 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
5 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
7 #if defined(_NTOSKRNL_)
8 extern DECL_EXPORT ULONG NtBuildNumber
;
10 extern DECL_IMPORT ULONG NtBuildNumber
;
15 #define EVENT_READ_ACCESS 1
16 #define EVENT_WRITE_ACCESS 2
18 //process query / set information class
20 #define ProcessBasicInformation 0
21 #define ProcessQuotaLimits 1
22 #define ProcessIoCounters 2
23 #define ProcessVmCounters 3
24 #define ProcessTimes 4
25 #define ProcessBasePriority 5
26 #define ProcessRaisePriority 6
27 #define ProcessDebugPort 7
28 #define ProcessExceptionPort 8
29 #define ProcessAccessToken 9
30 #define ProcessLdtInformation 10
31 #define ProcessLdtSize 11
32 #define ProcessDefaultHardErrorMode 12
33 #define ProcessIoPortHandlers 13
34 #define ProcessPooledUsageAndLimits 14
35 #define ProcessWorkingSetWatch 15
36 #define ProcessUserModeIOPL 16
37 #define ProcessEnableAlignmentFaultFixup 17
38 #define ProcessPriorityClass 18
39 #define ProcessWx86Information 19
40 #define ProcessHandleCount 20
41 #define ProcessAffinityMask 21
42 #define ProcessPriorityBoost 22
43 #define ProcessDeviceMap 23
44 #define ProcessSessionInformation 24
45 #define ProcessForegroundInformation 25
46 #define ProcessWow64Information 26
47 #define MaxProcessInfoClass 26
48 /* ReactOS private. */
49 #define ProcessImageFileName (MaxProcessInfoClass + 1)
50 #define ProcessDesktop (MaxProcessInfoClass + 2)
51 #define RosMaxProcessInfoClass (MaxProcessInfoClass + 2)
54 * thread query / set information class
56 #define ThreadBasicInformation 0
58 #define ThreadPriority 2
59 #define ThreadBasePriority 3
60 #define ThreadAffinityMask 4
61 #define ThreadImpersonationToken 5
62 #define ThreadDescriptorTableEntry 6
63 #define ThreadEnableAlignmentFaultFixup 7
64 #define ThreadEventPair 8
65 #define ThreadQuerySetWin32StartAddress 9
66 #define ThreadZeroTlsCell 10
67 #define ThreadPerformanceCount 11
68 #define ThreadAmILastThread 12
69 #define ThreadIdealProcessor 13
70 #define ThreadPriorityBoost 14
71 #define ThreadSetTlsArrayAddress 15
72 #define ThreadIsIoPending 16
73 #define ThreadHideFromDebugger 17
74 #define MaxThreadInfoClass 17
75 #define RosMaxThreadInfoClass 17
78 // object handle information
80 #define ObjectBasicInformation 0
81 #define ObjectNameInformation 1
82 #define ObjectTypeInformation 2
83 #define ObjectAllInformation 3
84 #define ObjectDataInformation 4
86 typedef struct _ATOM_TABLE_INFORMATION
90 } ATOM_TABLE_INFORMATION
, *PATOM_TABLE_INFORMATION
;
95 typedef enum _MUTANT_INFORMATION_CLASS
97 MutantBasicInformation
= 0
98 } MUTANT_INFORMATION_CLASS
;
100 typedef struct _MUTANT_BASIC_INFORMATION
105 } MUTANT_BASIC_INFORMATION
, *PMUTANT_BASIC_INFORMATION
;
108 // semaphore information
110 typedef enum _SEMAPHORE_INFORMATION_CLASS
112 SemaphoreBasicInformation
= 0
113 } SEMAPHORE_INFORMATION_CLASS
;
115 typedef struct _SEMAPHORE_BASIC_INFORMATION
119 } SEMAPHORE_BASIC_INFORMATION
, *PSEMAPHORE_BASIC_INFORMATION
;
124 typedef enum _EVENT_INFORMATION_CLASS
126 EventBasicInformation
= 0
127 } EVENT_INFORMATION_CLASS
;
129 typedef struct _EVENT_BASIC_INFORMATION
131 EVENT_TYPE EventType
;
133 } EVENT_BASIC_INFORMATION
, *PEVENT_BASIC_INFORMATION
;
136 // system information
137 // {Nt|Zw}{Query|Set}SystemInformation
138 // (GN means Gary Nebbet in "NT/W2K Native API Reference")
140 // SystemTimeOfDayInformation (3)
142 struct _SYSTEM_TIMEOFDAY_INFORMATION
144 LARGE_INTEGER BootTime
;
145 LARGE_INTEGER CurrentTime
;
146 LARGE_INTEGER TimeZoneBias
;
149 } SYSTEM_TIMEOFDAY_INFORMATION
, *PSYSTEM_TIMEOFDAY_INFORMATION
;
151 // SystemPathInformation (4)
154 struct _SYSTEM_PATH_INFORMATION
158 } SYSTEM_PATH_INFORMATION
, * PSYSTEM_PATH_INFORMATION
;
160 // SystemProcessInformation (5)
162 struct _SYSTEM_THREAD_INFORMATION
170 ULONG DynamicPriority
;
174 KWAIT_REASON WaitReason
;
176 } SYSTEM_THREAD_INFORMATION
, *PSYSTEM_THREAD_INFORMATION
;
179 struct SYSTEM_PROCESS_INFORMATION
181 ULONG RelativeOffset
;
190 ULONG ParentProcessId
;
193 ULONG PeakVirtualSizeBytes
;
194 ULONG TotalVirtualSizeBytes
;
195 ULONG PageFaultCount
;
196 ULONG PeakWorkingSetSizeBytes
;
197 ULONG TotalWorkingSetSizeBytes
;
198 ULONG PeakPagedPoolUsagePages
;
199 ULONG TotalPagedPoolUsagePages
;
200 ULONG PeakNonPagedPoolUsagePages
;
201 ULONG TotalNonPagedPoolUsagePages
;
202 ULONG TotalPageFileUsageBytes
;
203 ULONG PeakPageFileUsageBytes
;
204 ULONG TotalPrivateBytes
;
205 SYSTEM_THREAD_INFORMATION ThreadSysInfo
[1];
207 } SYSTEM_PROCESS_INFORMATION
, *PSYSTEM_PROCESS_INFORMATION
;
209 // SystemCallCountInformation (6)
211 struct _SYSTEM_SDT_INFORMATION
214 ULONG NumberOfSystemServiceTables
;
215 ULONG NumberOfServices
[1];
216 ULONG ServiceCounters
[1];
218 } SYSTEM_SDT_INFORMATION
, *PSYSTEM_SDT_INFORMATION
;
220 // SystemDeviceInformation (7)
222 struct _SYSTEM_DEVICE_INFORMATION
225 ULONG NumberOfFloppies
;
226 ULONG NumberOfCdRoms
;
228 ULONG NumberOfSerialPorts
;
229 ULONG NumberOfParallelPorts
;
230 } SYSTEM_DEVICE_INFORMATION
, *PSYSTEM_DEVICE_INFORMATION
;
232 // SystemProcessorPerformanceInformation (8)
233 // (one per processor in the system)
235 struct _SYSTEM_PROCESSORTIME_INFO
237 TIME TotalProcessorRunTime
;
238 TIME TotalProcessorTime
;
239 TIME TotalProcessorUserTime
;
241 TIME TotalInterruptTime
;
242 ULONG TotalInterrupts
;
245 } SYSTEM_PROCESSORTIME_INFO
, *PSYSTEM_PROCESSORTIME_INFO
;
247 // SystemFlagsInformation (9)
249 struct _SYSTEM_FLAGS_INFORMATION
253 } SYSTEM_FLAGS_INFORMATION
, * PSYSTEM_FLAGS_INFORMATION
;
255 #define FLG_STOP_ON_EXCEPTION 0x00000001
256 #define FLG_SHOW_LDR_SNAPS 0x00000002
257 #define FLG_DEBUG_INITIAL_COMMAND 0x00000004
258 #define FLG_STOP_ON_HANG_GUI 0x00000008
259 #define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
260 #define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
261 #define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
262 #define FLG_HEAP_VALIDATE_ALL 0x00000080
263 #define FLG_POOL_ENABLE_TAIL_CHECK 0x00000100
264 #define FLG_POOL_ENABLE_FREE_CHECK 0x00000200
265 #define FLG_POOL_ENABLE_TAGGING 0x00000400
266 #define FLG_HEAP_ENABLE_TAGGING 0x00000800
267 #define FLG_USER_STACK_TRACE_DB 0x00001000
268 #define FLG_KERNEL_STACK_TRACE_DB 0x00002000
269 #define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
270 #define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
271 #define FLG_IGNORE_DEBUG_PRIV 0x00010000
272 #define FLG_ENABLE_CSRDEBUG 0x00020000
273 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
274 #define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
275 #define FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
276 #define FLG_HEAP_DISABLE_COALESCING 0x00200000
277 #define FLG_ENABLE_CLOSE_EXCEPTION 0x00400000
278 #define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
279 #define FLG_UNKNOWN_01000000 0x01000000
280 #define FLG_UNKNOWN_02000000 0x02000000
281 #define FLG_UNKNOWN_04000000 0x04000000
282 #define FLG_ENABLE_DBGPRINT_BUFFERING 0x08000000
283 #define FLG_UNKNOWN_10000000 0x10000000
284 #define FLG_UNKNOWN_20000000 0x20000000
285 #define FLG_UNKNOWN_40000000 0x40000000
286 #define FLG_UNKNOWN_80000000 0x80000000
288 // SystemCallTimeInformation (10)
291 // SystemModuleInformation (11)
293 struct _SYSTEM_MODULE_ENTRY
301 USHORT NameLength
; /* Length of module name not including the path, this field contains valid value only for NTOSKRNL module*/
302 USHORT PathLength
; /* Length of 'directory path' part of modulename*/
304 } SYSTEM_MODULE_ENTRY
, * PSYSTEM_MODULE_ENTRY
;
306 // SystemLocksInformation (12)
308 struct _SYSTEM_RESOURCE_LOCK_ENTRY
310 ULONG ResourceAddress
;
314 ULONG ContentionCount
;
316 ULONG NumberOfSharedWaiters
;
317 ULONG NumberOfExclusiveWaiters
;
319 } SYSTEM_RESOURCE_LOCK_ENTRY
, *PSYSTEM_RESOURCE_LOCK_ENTRY
;
322 struct _SYSTEM_RESOURCE_LOCK_INFO
325 SYSTEM_RESOURCE_LOCK_ENTRY Lock
[1];
327 } SYSTEM_RESOURCE_LOCK_INFO
, *PSYSTEM_RESOURCE_LOCK_INFO
;
329 // SystemInformation13 (13)
332 // SystemInformation14 (14)
335 // SystemInformation15 (15)
338 // SystemHandleInformation (16)
341 struct _SYSTEM_HANDLE_ENTRY
350 } SYSTEM_HANDLE_ENTRY
, *PSYSTEM_HANDLE_ENTRY
;
352 // SystemInstructionEmulationInfo (19)
354 struct _SYSTEM_VDM_INFORMATION
356 ULONG VdmSegmentNotPresentCount
;
358 ULONG VdmESPREFIXCount
;
359 ULONG VdmCSPREFIXCount
;
360 ULONG VdmSSPREFIXCount
;
361 ULONG VdmDSPREFIXCount
;
362 ULONG VdmFSPREFIXCount
;
363 ULONG VdmGSPREFIXCount
;
364 ULONG VdmOPER32PREFIXCount
;
365 ULONG VdmADDR32PREFIXCount
;
367 ULONG VdmINSWV86Count
;
375 ULONG VdmINBIMMCount
;
376 ULONG VdmINWIMMCount
;
377 ULONG VdmOUTBIMMCount
;
378 ULONG VdmOUTWIMMCount
;
383 ULONG VdmLOCKPREFIXCount
;
384 ULONG VdmREPNEPREFIXCount
;
385 ULONG VdmREPPREFIXCount
;
391 } SYSTEM_VDM_INFORMATION
, *PSYSTEM_VDM_INFORMATION
;
393 // SystemPoolTagInformation (22)
394 // found by Klaus P. Gerlicher
395 // (implemented only in checked builds)
397 struct _POOL_TAG_STATS
399 ULONG AllocationCount
;
406 struct _SYSTEM_POOL_TAG_ENTRY
409 POOL_TAG_STATS Paged
;
410 POOL_TAG_STATS NonPaged
;
412 } SYSTEM_POOL_TAG_ENTRY
, * PSYSTEM_POOL_TAG_ENTRY
;
415 struct _SYSTEM_POOL_TAG_INFO
418 SYSTEM_POOL_TAG_ENTRY PoolEntry
[1];
420 } SYSTEM_POOL_TAG_INFO
, *PSYSTEM_POOL_TAG_INFO
;
422 // SystemProcessorScheduleInfo (23)
424 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
426 ULONG nContextSwitches
;
429 ULONG TimerResolution
;
433 } SYSTEM_PROCESSOR_SCHEDULE_INFO
, *PSYSTEM_PROCESSOR_SCHEDULE_INFO
;
435 // SystemProcessorFaultCountInfo (33)
437 struct _SYSTEM_PROCESSOR_FAULT_INFO
439 ULONG nAlignmentFixup
;
440 ULONG nExceptionDispatches
;
441 ULONG nFloatingEmulation
;
444 } SYSTEM_PROCESSOR_FAULT_INFO
, *PSYSTEM_PROCESSOR_FAULT_INFO
;
446 // SystemCrashDumpStateInfo (34)
449 // SystemDebuggerInformation (35)
451 struct _SYSTEM_DEBUGGER_INFO
453 BOOLEAN KdDebuggerEnabled
;
454 BOOLEAN KdDebuggerPresent
;
456 } SYSTEM_DEBUGGER_INFO
, *PSYSTEM_DEBUGGER_INFO
;
458 // SystemInformation36 (36)
461 // SystemQuotaInformation (37)
463 struct _SYSTEM_QUOTA_INFORMATION
465 ULONG CmpGlobalQuota
;
466 ULONG CmpGlobalQuotaUsed
;
467 ULONG MmSizeofPagedPoolInBytes
;
469 } SYSTEM_QUOTA_INFORMATION
, *PSYSTEM_QUOTA_INFORMATION
;
471 // memory information
473 #define MemoryBasicInformation 0
480 // number of wait objects
482 #define THREAD_WAIT_OBJECTS 3
483 //#define MAXIMUM_WAIT_OBJECTS 64
487 #define REG_WHOLE_HIVE_VOLATILE 1
488 #define REG_REFRESH_HIVE 2
490 // object type access rights
492 #define OBJECT_TYPE_CREATE 0x0001
493 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
495 // directory access rights
497 #define DIRECTORY_QUERY 0x0001
498 #define DIRECTORY_TRAVERSE 0x0002
499 #define DIRECTORY_CREATE_OBJECT 0x0004
500 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
502 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
504 // symbolic link access rights
506 #define SYMBOLIC_LINK_QUERY 0x0001
507 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
508 // thread information
511 // incompatible with MS NT
513 typedef struct _THREAD_BASIC_INFORMATION
516 PVOID TebBaseAddress
; // PNT_TIB (GN)
518 KAFFINITY AffinityMask
;
520 KPRIORITY BasePriority
;
521 } THREAD_BASIC_INFORMATION
, *PTHREAD_BASIC_INFORMATION
;
524 typedef struct _OBJECT_DATA_INFORMATION
526 BOOLEAN bInheritHandle
;
527 BOOLEAN bProtectFromClose
;
528 } OBJECT_DATA_INFORMATION
, *POBJECT_DATA_INFORMATION
;
531 // directory information
533 typedef struct _OBJDIR_INFORMATION
{
534 UNICODE_STRING ObjectName
;
535 UNICODE_STRING ObjectTypeName
; // Directory, Device ...
537 } OBJDIR_INFORMATION
, *POBJDIR_INFORMATION
;
541 Action is one of the following values:
543 FILE_ACTION_ADDED 0x00000001
544 FILE_ACTION_REMOVED 0x00000002
545 FILE_ACTION_MODIFIED 0x00000003
546 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
547 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
548 FILE_ACTION_ADDED_STREAM 0x00000006
549 FILE_ACTION_REMOVED_STREAM 0x00000007
550 FILE_ACTION_MODIFIED_STREAM 0x00000008
555 // File System Control commands ( related to defragging )
557 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
559 typedef struct _BITMAP_DESCRIPTOR
562 ULONGLONG ClustersToEndOfVol
;
563 BYTE Map
[0]; // variable size
564 } BITMAP_DESCRIPTOR
, *PBITMAP_DESCRIPTOR
;
566 typedef struct _TIMER_BASIC_INFORMATION
568 LARGE_INTEGER TimeRemaining
;
570 } TIMER_BASIC_INFORMATION
, *PTIMER_BASIC_INFORMATION
;
572 typedef enum _TIMER_INFORMATION_CLASS
574 TimerBasicInformation
575 } TIMER_INFORMATION_CLASS
;
578 struct _LPC_PORT_BASIC_INFORMATION
595 } LPC_PORT_BASIC_INFORMATION
, * PLPC_PORT_BASIC_INFORMATION
;