Use free Windows DDK and compile with latest MinGW releases.
[reactos.git] / reactos / include / ntos / zwtypes.h
1 #ifndef __INCLUDE_DDK_ZWTYPES_H
2 #define __INCLUDE_DDK_ZWTYPES_H
3
4 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
5 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
6
7 #if defined(_NTOSKRNL_)
8 extern DECL_EXPORT ULONG NtBuildNumber;
9 #else
10 extern DECL_IMPORT ULONG NtBuildNumber;
11 #endif
12
13 // event access mask
14
15 #define EVENT_READ_ACCESS 1
16 #define EVENT_WRITE_ACCESS 2
17
18 //process query / set information class
19
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)
52
53 /*
54 * thread query / set information class
55 */
56 #define ThreadBasicInformation 0
57 #define ThreadTimes 1
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
76
77
78 // object handle information
79
80 #define ObjectBasicInformation 0
81 #define ObjectNameInformation 1
82 #define ObjectTypeInformation 2
83 #define ObjectAllInformation 3
84 #define ObjectDataInformation 4
85
86 typedef struct _ATOM_TABLE_INFORMATION
87 {
88 ULONG NumberOfAtoms;
89 RTL_ATOM Atoms[1];
90 } ATOM_TABLE_INFORMATION, *PATOM_TABLE_INFORMATION;
91
92
93 // mutant information
94
95 typedef enum _MUTANT_INFORMATION_CLASS
96 {
97 MutantBasicInformation = 0
98 } MUTANT_INFORMATION_CLASS;
99
100 typedef struct _MUTANT_BASIC_INFORMATION
101 {
102 LONG Count;
103 BOOLEAN Owned;
104 BOOLEAN Abandoned;
105 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
106
107
108 // semaphore information
109
110 typedef enum _SEMAPHORE_INFORMATION_CLASS
111 {
112 SemaphoreBasicInformation = 0
113 } SEMAPHORE_INFORMATION_CLASS;
114
115 typedef struct _SEMAPHORE_BASIC_INFORMATION
116 {
117 LONG CurrentCount;
118 LONG MaximumCount;
119 } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
120
121
122 // event information
123
124 typedef enum _EVENT_INFORMATION_CLASS
125 {
126 EventBasicInformation = 0
127 } EVENT_INFORMATION_CLASS;
128
129 typedef struct _EVENT_BASIC_INFORMATION
130 {
131 EVENT_TYPE EventType;
132 LONG EventState;
133 } EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
134
135
136 // system information
137 // {Nt|Zw}{Query|Set}SystemInformation
138 // (GN means Gary Nebbet in "NT/W2K Native API Reference")
139
140 // SystemTimeOfDayInformation (3)
141 typedef
142 struct _SYSTEM_TIMEOFDAY_INFORMATION
143 {
144 LARGE_INTEGER BootTime;
145 LARGE_INTEGER CurrentTime;
146 LARGE_INTEGER TimeZoneBias;
147 ULONG TimeZoneId;
148 ULONG Reserved;
149 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION;
150
151 // SystemPathInformation (4)
152 // IT DOES NOT WORK
153 typedef
154 struct _SYSTEM_PATH_INFORMATION
155 {
156 PVOID Dummy;
157
158 } SYSTEM_PATH_INFORMATION, * PSYSTEM_PATH_INFORMATION;
159
160 // SystemProcessInformation (5)
161 typedef
162 struct _SYSTEM_THREAD_INFORMATION
163 {
164 TIME KernelTime;
165 TIME UserTime;
166 TIME CreateTime;
167 ULONG TickCount;
168 ULONG StartEIP;
169 CLIENT_ID ClientId;
170 ULONG DynamicPriority;
171 ULONG BasePriority;
172 ULONG nSwitches;
173 DWORD State;
174 KWAIT_REASON WaitReason;
175
176 } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
177
178 typedef
179 struct SYSTEM_PROCESS_INFORMATION
180 {
181 ULONG RelativeOffset;
182 ULONG ThreadCount;
183 ULONG Unused1 [6];
184 TIME CreateTime;
185 TIME UserTime;
186 TIME KernelTime;
187 UNICODE_STRING Name;
188 ULONG BasePriority;
189 ULONG ProcessId;
190 ULONG ParentProcessId;
191 ULONG HandleCount;
192 ULONG Unused2[2];
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];
206
207 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
208
209 // SystemCallCountInformation (6)
210 typedef
211 struct _SYSTEM_SDT_INFORMATION
212 {
213 ULONG BufferLength;
214 ULONG NumberOfSystemServiceTables;
215 ULONG NumberOfServices [1];
216 ULONG ServiceCounters [1];
217
218 } SYSTEM_SDT_INFORMATION, *PSYSTEM_SDT_INFORMATION;
219
220 // SystemDeviceInformation (7)
221 typedef
222 struct _SYSTEM_DEVICE_INFORMATION
223 {
224 ULONG NumberOfDisks;
225 ULONG NumberOfFloppies;
226 ULONG NumberOfCdRoms;
227 ULONG NumberOfTapes;
228 ULONG NumberOfSerialPorts;
229 ULONG NumberOfParallelPorts;
230 } SYSTEM_DEVICE_INFORMATION, *PSYSTEM_DEVICE_INFORMATION;
231
232 // SystemProcessorPerformanceInformation (8)
233 // (one per processor in the system)
234 typedef
235 struct _SYSTEM_PROCESSORTIME_INFO
236 {
237 TIME TotalProcessorRunTime;
238 TIME TotalProcessorTime;
239 TIME TotalProcessorUserTime;
240 TIME TotalDPCTime;
241 TIME TotalInterruptTime;
242 ULONG TotalInterrupts;
243 ULONG Unused;
244
245 } SYSTEM_PROCESSORTIME_INFO, *PSYSTEM_PROCESSORTIME_INFO;
246
247 // SystemFlagsInformation (9)
248 typedef
249 struct _SYSTEM_FLAGS_INFORMATION
250 {
251 ULONG Flags;
252
253 } SYSTEM_FLAGS_INFORMATION, * PSYSTEM_FLAGS_INFORMATION;
254
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
287
288 // SystemCallTimeInformation (10)
289 // UNKNOWN
290
291 // SystemModuleInformation (11)
292 typedef
293 struct _SYSTEM_MODULE_ENTRY
294 {
295 ULONG Unknown1;
296 ULONG Unknown2;
297 PVOID BaseAddress;
298 ULONG Size;
299 ULONG Flags;
300 ULONG EntryIndex;
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*/
303 CHAR Name [256];
304 } SYSTEM_MODULE_ENTRY, * PSYSTEM_MODULE_ENTRY;
305
306 // SystemLocksInformation (12)
307 typedef
308 struct _SYSTEM_RESOURCE_LOCK_ENTRY
309 {
310 ULONG ResourceAddress;
311 ULONG Always1;
312 ULONG Unknown;
313 ULONG ActiveCount;
314 ULONG ContentionCount;
315 ULONG Unused[2];
316 ULONG NumberOfSharedWaiters;
317 ULONG NumberOfExclusiveWaiters;
318
319 } SYSTEM_RESOURCE_LOCK_ENTRY, *PSYSTEM_RESOURCE_LOCK_ENTRY;
320
321 typedef
322 struct _SYSTEM_RESOURCE_LOCK_INFO
323 {
324 ULONG Count;
325 SYSTEM_RESOURCE_LOCK_ENTRY Lock [1];
326
327 } SYSTEM_RESOURCE_LOCK_INFO, *PSYSTEM_RESOURCE_LOCK_INFO;
328
329 // SystemInformation13 (13)
330 // UNKNOWN
331
332 // SystemInformation14 (14)
333 // UNKNOWN
334
335 // SystemInformation15 (15)
336 // UNKNOWN
337
338 // SystemHandleInformation (16)
339 // (see ontypes.h)
340 typedef
341 struct _SYSTEM_HANDLE_ENTRY
342 {
343 ULONG OwnerPid;
344 BYTE ObjectType;
345 BYTE HandleFlags;
346 USHORT HandleValue;
347 PVOID ObjectPointer;
348 ULONG AccessMask;
349
350 } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
351
352 // SystemInstructionEmulationInfo (19)
353 typedef
354 struct _SYSTEM_VDM_INFORMATION
355 {
356 ULONG VdmSegmentNotPresentCount;
357 ULONG VdmINSWCount;
358 ULONG VdmESPREFIXCount;
359 ULONG VdmCSPREFIXCount;
360 ULONG VdmSSPREFIXCount;
361 ULONG VdmDSPREFIXCount;
362 ULONG VdmFSPREFIXCount;
363 ULONG VdmGSPREFIXCount;
364 ULONG VdmOPER32PREFIXCount;
365 ULONG VdmADDR32PREFIXCount;
366 ULONG VdmINSBCount;
367 ULONG VdmINSWV86Count;
368 ULONG VdmOUTSBCount;
369 ULONG VdmOUTSWCount;
370 ULONG VdmPUSHFCount;
371 ULONG VdmPOPFCount;
372 ULONG VdmINTNNCount;
373 ULONG VdmINTOCount;
374 ULONG VdmIRETCount;
375 ULONG VdmINBIMMCount;
376 ULONG VdmINWIMMCount;
377 ULONG VdmOUTBIMMCount;
378 ULONG VdmOUTWIMMCount;
379 ULONG VdmINBCount;
380 ULONG VdmINWCount;
381 ULONG VdmOUTBCount;
382 ULONG VdmOUTWCount;
383 ULONG VdmLOCKPREFIXCount;
384 ULONG VdmREPNEPREFIXCount;
385 ULONG VdmREPPREFIXCount;
386 ULONG VdmHLTCount;
387 ULONG VdmCLICount;
388 ULONG VdmSTICount;
389 ULONG VdmBopCount;
390
391 } SYSTEM_VDM_INFORMATION, *PSYSTEM_VDM_INFORMATION;
392
393 // SystemPoolTagInformation (22)
394 // found by Klaus P. Gerlicher
395 // (implemented only in checked builds)
396 typedef
397 struct _POOL_TAG_STATS
398 {
399 ULONG AllocationCount;
400 ULONG FreeCount;
401 ULONG SizeBytes;
402
403 } POOL_TAG_STATS;
404
405 typedef
406 struct _SYSTEM_POOL_TAG_ENTRY
407 {
408 ULONG Tag;
409 POOL_TAG_STATS Paged;
410 POOL_TAG_STATS NonPaged;
411
412 } SYSTEM_POOL_TAG_ENTRY, * PSYSTEM_POOL_TAG_ENTRY;
413
414 typedef
415 struct _SYSTEM_POOL_TAG_INFO
416 {
417 ULONG Count;
418 SYSTEM_POOL_TAG_ENTRY PoolEntry [1];
419
420 } SYSTEM_POOL_TAG_INFO, *PSYSTEM_POOL_TAG_INFO;
421
422 // SystemProcessorScheduleInfo (23)
423 typedef
424 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
425 {
426 ULONG nContextSwitches;
427 ULONG nDPCQueued;
428 ULONG nDPCRate;
429 ULONG TimerResolution;
430 ULONG nDPCBypasses;
431 ULONG nAPCBypasses;
432
433 } SYSTEM_PROCESSOR_SCHEDULE_INFO, *PSYSTEM_PROCESSOR_SCHEDULE_INFO;
434
435 // SystemProcessorFaultCountInfo (33)
436 typedef
437 struct _SYSTEM_PROCESSOR_FAULT_INFO
438 {
439 ULONG nAlignmentFixup;
440 ULONG nExceptionDispatches;
441 ULONG nFloatingEmulation;
442 ULONG Unknown;
443
444 } SYSTEM_PROCESSOR_FAULT_INFO, *PSYSTEM_PROCESSOR_FAULT_INFO;
445
446 // SystemCrashDumpStateInfo (34)
447 //
448
449 // SystemDebuggerInformation (35)
450 typedef
451 struct _SYSTEM_DEBUGGER_INFO
452 {
453 BOOLEAN KdDebuggerEnabled;
454 BOOLEAN KdDebuggerPresent;
455
456 } SYSTEM_DEBUGGER_INFO, *PSYSTEM_DEBUGGER_INFO;
457
458 // SystemInformation36 (36)
459 // UNKNOWN
460
461 // SystemQuotaInformation (37)
462 typedef
463 struct _SYSTEM_QUOTA_INFORMATION
464 {
465 ULONG CmpGlobalQuota;
466 ULONG CmpGlobalQuotaUsed;
467 ULONG MmSizeofPagedPoolInBytes;
468
469 } SYSTEM_QUOTA_INFORMATION, *PSYSTEM_QUOTA_INFORMATION;
470
471 // memory information
472
473 #define MemoryBasicInformation 0
474
475 // wait type
476
477 #define WaitAll 0
478 #define WaitAny 1
479
480 // number of wait objects
481
482 #define THREAD_WAIT_OBJECTS 3
483 //#define MAXIMUM_WAIT_OBJECTS 64
484
485 // key restore flags
486
487 #define REG_WHOLE_HIVE_VOLATILE 1
488 #define REG_REFRESH_HIVE 2
489
490 // object type access rights
491
492 #define OBJECT_TYPE_CREATE 0x0001
493 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
494
495 // directory access rights
496
497 #define DIRECTORY_QUERY 0x0001
498 #define DIRECTORY_TRAVERSE 0x0002
499 #define DIRECTORY_CREATE_OBJECT 0x0004
500 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
501
502 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
503
504 // symbolic link access rights
505
506 #define SYMBOLIC_LINK_QUERY 0x0001
507 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
508 // thread information
509
510 #if 0
511 // incompatible with MS NT
512
513 typedef struct _THREAD_BASIC_INFORMATION
514 {
515 NTSTATUS ExitStatus;
516 PVOID TebBaseAddress; // PNT_TIB (GN)
517 CLIENT_ID ClientId;
518 KAFFINITY AffinityMask;
519 KPRIORITY Priority;
520 KPRIORITY BasePriority;
521 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
522 #endif
523
524 typedef struct _OBJECT_DATA_INFORMATION
525 {
526 BOOLEAN bInheritHandle;
527 BOOLEAN bProtectFromClose;
528 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
529
530
531 // directory information
532
533 typedef struct _OBJDIR_INFORMATION {
534 UNICODE_STRING ObjectName;
535 UNICODE_STRING ObjectTypeName; // Directory, Device ...
536 UCHAR Data[0];
537 } OBJDIR_INFORMATION, *POBJDIR_INFORMATION;
538
539
540 /*
541 Action is one of the following values:
542
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
551
552 */
553
554
555 // File System Control commands ( related to defragging )
556
557 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
558
559 typedef struct _BITMAP_DESCRIPTOR
560 {
561 ULONGLONG StartLcn;
562 ULONGLONG ClustersToEndOfVol;
563 BYTE Map[0]; // variable size
564 } BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR;
565
566 typedef struct _TIMER_BASIC_INFORMATION
567 {
568 LARGE_INTEGER TimeRemaining;
569 BOOLEAN SignalState;
570 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
571
572 typedef enum _TIMER_INFORMATION_CLASS
573 {
574 TimerBasicInformation
575 } TIMER_INFORMATION_CLASS;
576
577 typedef
578 struct _LPC_PORT_BASIC_INFORMATION
579 {
580 DWORD Unknown0;
581 DWORD Unknown1;
582 DWORD Unknown2;
583 DWORD Unknown3;
584 DWORD Unknown4;
585 DWORD Unknown5;
586 DWORD Unknown6;
587 DWORD Unknown7;
588 DWORD Unknown8;
589 DWORD Unknown9;
590 DWORD Unknown10;
591 DWORD Unknown11;
592 DWORD Unknown12;
593 DWORD Unknown13;
594
595 } LPC_PORT_BASIC_INFORMATION, * PLPC_PORT_BASIC_INFORMATION;
596
597 #endif