Some STDCALL/FASTCALL added in Ex code.
[reactos.git] / reactos / include / ddk / 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
8
9 // event access mask
10
11 #define EVENT_READ_ACCESS 1
12 #define EVENT_WRITE_ACCESS 2
13
14
15 // file disposition values
16
17
18 #define FILE_SUPERSEDE 0x0000
19 #define FILE_OPEN 0x0001
20 #define FILE_CREATE 0x0002
21 #define FILE_OPEN_IF 0x0003
22 #define FILE_OVERWRITE 0x0004
23 #define FILE_OVERWRITE_IF 0x0005
24 #define FILE_MAXIMUM_DISPOSITION 0x0005
25
26 //process query / set information class
27
28 #define ProcessBasicInformation 0
29 #define ProcessQuotaLimits 1
30 #define ProcessIoCounters 2
31 #define ProcessVmCounters 3
32 #define ProcessTimes 4
33 #define ProcessBasePriority 5
34 #define ProcessRaisePriority 6
35 #define ProcessDebugPort 7
36 #define ProcessExceptionPort 8
37 #define ProcessAccessToken 9
38 #define ProcessLdtInformation 10
39 #define ProcessLdtSize 11
40 #define ProcessDefaultHardErrorMode 12
41 #define ProcessIoPortHandlers 13
42 #define ProcessPooledUsageAndLimits 14
43 #define ProcessWorkingSetWatch 15
44 #define ProcessUserModeIOPL 16
45 #define ProcessEnableAlignmentFaultFixup 17
46 #define ProcessPriorityClass 18
47 #define ProcessWx86Information 19
48 #define ProcessHandleCount 20
49 #define ProcessAffinityMask 21
50 #define ProcessImageFileName 22
51 #define MaxProcessInfoClass 23
52
53 // thread query / set information class
54 #define ThreadBasicInformation 0
55 #define ThreadTimes 1
56 #define ThreadPriority 2
57 #define ThreadBasePriority 3
58 #define ThreadAffinityMask 4
59 #define ThreadImpersonationToken 5
60 #define ThreadDescriptorTableEntry 6
61 #define ThreadEnableAlignmentFaultFixup 7
62 #define ThreadEventPair 8
63 #define ThreadQuerySetWin32StartAddress 9
64 #define ThreadZeroTlsCell 10
65 #define ThreadPerformanceCount 11
66 #define ThreadAmILastThread 12
67 #define ThreadIdealProcessor 13
68 #define ThreadPriorityBoost 14
69 #define MaxThreadInfoClass 15
70
71 // object handle information
72
73 #define ObjectBasicInformation 0
74 #define ObjectNameInformation 1
75 #define ObjectTypeInformation 2
76 #define ObjectAllInformation 3
77 #define ObjectDataInformation 4
78
79 // semaphore information
80
81 #define SemaphoreBasicInformation 0
82
83 // event information
84
85 #define EventBasicInformation 0
86
87 // system information
88 // {Nt|Zw}{Query|Set}SystemInformation
89
90 typedef
91 enum _SYSTEM_INFORMATION_CLASS
92 {
93 SystemInformationClassMin = 0,
94 SystemBasicInformation = 0, /* Q */
95 SystemProcessorInformation = 1, /* Q */
96 SystemPerformanceInformation = 2, /* Q */
97 SystemTimeInformation = 3, /* Q */
98 SystemPathInformation = 4,
99 SystemProcessInformation = 5, /* Q */
100 SystemServiceDescriptorTableInfo = 6, /* Q */
101 SystemIoConfigInformation = 7, /* Q */
102 SystemProcessorTimeInformation = 8, /* Q */
103 SystemNtGlobalFlagInformation = 9, /* QS */
104 SystemInformation10 = 10,
105 SystemModuleInformation = 11, /* Q */
106 SystemResourceLockInformation = 12, /* Q */
107 SystemInformation13 = 13,
108 SystemInformation14 = 14,
109 SystemInformation15 = 15,
110 SystemHandleInformation = 16, /* Q */
111 SystemObjectInformation = 17, /* Q */
112 SystemPageFileInformation = 18, /* Q */
113 SystemInstructionEmulationInfo = 19, /* Q */
114 SystemInformation20 = 20,
115 SystemCacheInformation = 21, /* QS */
116 SystemPoolTagInformation = 22, /* Q (checked build only) */
117 SystemProcessorScheduleInfo = 23, /* Q */
118 SystemDpcInformation = 24, /* QS */
119 SystemInformation25 = 25,
120 SystemLoadImage = 26, /* S (callable) */
121 SystemUnloadImage = 27, /* S (callable) */
122 SystemTimeAdjustmentInformation = 28, /* QS */
123 SystemInformation29 = 29,
124 SystemInformation30 = 30,
125 SystemInformation31 = 31,
126 SystemCrashDumpSectionInfo = 32, /* Q */
127 SystemProcessorFaultCountInfo = 33, /* Q */
128 SystemCrashDumpStateInfo = 34, /* Q */
129 SystemDebuggerInformation = 35, /* Q */
130 SystemThreadSwitchCountersInfo = 36, /* Q */
131 SystemQuotaInformation = 37, /* QS */
132 SystemLoadDriver = 38, /* S */
133 SystemPrioritySeparationInfo = 39, /* S */
134 SystemInformation40 = 40,
135 SystemInformation41 = 41,
136 SystemInformation42 = 42,
137 SystemInformation43 = 43,
138 SystemTimeZoneInformation = 44, /* QS */
139 SystemLookasideInformation = 45, /* Q */
140 SystemInformationClassMax
141
142 } SYSTEM_INFORMATION_CLASS;
143
144 // SystemBasicInformation (0)
145 typedef
146 struct _SYSTEM_BASIC_INFORMATION
147 {
148 DWORD AlwaysZero;
149 ULONG KeMaximumIncrement;
150 ULONG MmPageSize;
151 ULONG MmNumberOfPhysicalPages;
152 ULONG MmLowestPhysicalPage;
153 ULONG MmHighestPhysicalPage;
154 PVOID MmLowestUserAddress;
155 PVOID MmLowestUserAddress1;
156 PVOID MmHighestUserAddress;
157 DWORD KeActiveProcessors;
158 USHORT KeNumberProcessors;
159
160 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
161
162 // SystemProcessorInformation (1)
163 typedef
164 struct _SYSTEM_PROCESSOR_INFORMATION
165 {
166 USHORT KeProcessorArchitecture;
167 USHORT KeProcessorLevel;
168 USHORT KeProcessorRevision;
169 USHORT AlwaysZero;
170 DWORD KeFeatureBits;
171
172 } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
173
174 // SystemPerformanceInfo (2)
175 typedef
176 struct _SYSTEM_PERFORMANCE_INFO
177 {
178 LARGE_INTEGER TotalProcessorTime;
179 LARGE_INTEGER IoReadTransferCount;
180 LARGE_INTEGER IoWriteTransferCount;
181 LARGE_INTEGER IoOtherTransferCount;
182 ULONG IoReadOperationCount;
183 ULONG IoWriteOperationCount;
184 ULONG IoOtherOperationCount;
185 ULONG MmAvailablePages;
186 ULONG MmTotalCommitedPages;
187 ULONG MmTotalCommitLimit;
188 ULONG MmPeakLimit;
189 ULONG PageFaults;
190 ULONG WriteCopies;
191 ULONG TransitionFaults;
192 ULONG Unknown1;
193 ULONG DemandZeroFaults;
194 ULONG PagesInput;
195 ULONG PagesRead;
196 ULONG Unknown2;
197 ULONG Unknown3;
198 ULONG PagesOutput;
199 ULONG PageWrites;
200 ULONG Unknown4;
201 ULONG Unknown5;
202 ULONG PoolPagedBytes;
203 ULONG PoolNonPagedBytes;
204 ULONG Unknown6;
205 ULONG Unknown7;
206 ULONG Unknown8;
207 ULONG Unknown9;
208 ULONG MmTotalSystemFreePtes;
209 ULONG MmSystemCodepage;
210 ULONG MmTotalSystemDriverPages;
211 ULONG MmTotalSystemCodePages;
212 ULONG Unknown10;
213 ULONG Unknown11;
214 ULONG Unknown12;
215 ULONG MmSystemCachePage;
216 ULONG MmPagedPoolPage;
217 ULONG MmSystemDriverPage;
218 ULONG CcFastReadNoWait;
219 ULONG CcFastReadWait;
220 ULONG CcFastReadResourceMiss;
221 ULONG CcFastReadNotPossible;
222 ULONG CcFastMdlReadNoWait;
223 ULONG CcFastMdlReadWait;
224 ULONG CcFastMdlReadResourceMiss;
225 ULONG CcFastMdlReadNotPossible;
226 ULONG CcMapDataNoWait;
227 ULONG CcMapDataWait;
228 ULONG CcMapDataNoWaitMiss;
229 ULONG CcMapDataWaitMiss;
230 ULONG CcPinMappedDataCount;
231 ULONG CcPinReadNoWait;
232 ULONG CcPinReadWait;
233 ULONG CcPinReadNoWaitMiss;
234 ULONG CcPinReadWaitMiss;
235 ULONG CcCopyReadNoWait;
236 ULONG CcCopyReadWait;
237 ULONG CcCopyReadNoWaitMiss;
238 ULONG CcCopyReadWaitMiss;
239 ULONG CcMdlReadNoWait;
240 ULONG CcMdlReadWait;
241 ULONG CcMdlReadNoWaitMiss;
242 ULONG CcMdlReadWaitMiss;
243 ULONG CcReadaheadIos;
244 ULONG CcLazyWriteIos;
245 ULONG CcLazyWritePages;
246 ULONG CcDataFlushes;
247 ULONG CcDataPages;
248 ULONG ContextSwitches;
249 ULONG Unknown13;
250 ULONG Unknown14;
251 ULONG SystemCalls;
252
253 } SYSTEM_PERFORMANCE_INFO, *PSYSTEM_PERFORMANCE_INFO;
254
255 // SystemTimeInformation (3)
256 typedef
257 struct _SYSTEM_TIME_INFORMATION
258 {
259 TIME KeBootTime;
260 TIME KeSystemTime;
261 TIME ExpTimeZoneBias;
262 ULONG ExpTimeZoneId;
263 ULONG Unused;
264
265 } SYSTEM_TIME_INFORMATION, *PSYSTEM_TIME_INFORMATION;
266
267 // SystemPathInformation (4)
268 // IT DOES NOT WORK
269 typedef
270 struct _SYSTEM_PATH_INFORMATION
271 {
272 PVOID Dummy;
273
274 } SYSTEM_PATH_INFORMATION, * PSYSTEM_PATH_INFORMATION;
275
276 // SystemProcessThreadInfo (5)
277 typedef
278 struct _SYSTEM_THREAD_INFORMATION
279 {
280 TIME KernelTime;
281 TIME UserTime;
282 TIME CreateTime;
283 ULONG TickCount;
284 ULONG StartEIP;
285 CLIENT_ID ClientId;
286 ULONG DynamicPriority;
287 ULONG BasePriority;
288 ULONG nSwitches;
289 DWORD State;
290 KWAIT_REASON WaitReason;
291
292 } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
293
294 typedef
295 struct SYSTEM_PROCESS_INFORMATION
296 {
297 ULONG RelativeOffset;
298 ULONG ThreadCount;
299 ULONG Unused1 [6];
300 TIME CreateTime;
301 TIME UserTime;
302 TIME KernelTime;
303 UNICODE_STRING Name;
304 ULONG BasePriority;
305 ULONG ProcessId;
306 ULONG ParentProcessId;
307 ULONG HandleCount;
308 ULONG Unused2[2];
309 ULONG PeakVirtualSizeBytes;
310 ULONG TotalVirtualSizeBytes;
311 ULONG PageFaultCount;
312 ULONG PeakWorkingSetSizeBytes;
313 ULONG TotalWorkingSetSizeBytes;
314 ULONG PeakPagedPoolUsagePages;
315 ULONG TotalPagedPoolUsagePages;
316 ULONG PeakNonPagedPoolUsagePages;
317 ULONG TotalNonPagedPoolUsagePages;
318 ULONG TotalPageFileUsageBytes;
319 ULONG PeakPageFileUsageBytes;
320 ULONG TotalPrivateBytes;
321 SYSTEM_THREAD_INFORMATION ThreadSysInfo [1];
322
323 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
324
325 // SystemServiceDescriptorTableInfo (6)
326 typedef
327 struct _SYSTEM_SDT_INFORMATION
328 {
329 ULONG BufferLength;
330 ULONG NumberOfSystemServiceTables;
331 ULONG NumberOfServices [1];
332 ULONG ServiceCounters [1];
333
334 } SYSTEM_SDT_INFORMATION, *PSYSTEM_SDT_INFORMATION;
335
336 // SystemIoConfigInformation (7)
337 typedef
338 struct _SYSTEM_IOCONFIG_INFORMATION
339 {
340 ULONG DiskCount;
341 ULONG FloppyCount;
342 ULONG CdRomCount;
343 ULONG TapeCount;
344 ULONG SerialCount;
345 ULONG ParallelCount;
346
347 } SYSTEM_IOCONFIG_INFORMATION, *PSYSTEM_IOCONFIG_INFORMATION;
348
349 // SystemProcessorTimeInformation (8)
350 typedef
351 struct _SYSTEM_PROCESSORTIME_INFO
352 {
353 TIME TotalProcessorRunTime;
354 TIME TotalProcessorTime;
355 TIME TotalProcessorUserTime;
356 TIME TotalDPCTime;
357 TIME TotalInterruptTime;
358 ULONG TotalInterrupts;
359 ULONG Unused;
360
361 } SYSTEM_PROCESSORTIME_INFO, *PSYSTEM_PROCESSORTIME_INFO;
362
363 // SystemNtGlobalFlagInformation (9)
364 typedef
365 struct _SYSTEM_GLOBAL_FLAG_INFO
366 {
367 ULONG NtGlobalFlag;
368
369 } SYSTEM_GLOBAL_FLAG_INFO, * PSYSTEM_GLOBAL_FLAG_INFO;
370
371 // SystemInformation10 (10)
372 // UNKNOWN
373
374 // SystemModuleInformation (11)
375 typedef
376 struct _SYSTEM_MODULE_ENTRY
377 {
378 ULONG Unused;
379 ULONG Always0;
380 ULONG ModuleBaseAddress;
381 ULONG ModuleSize;
382 ULONG Unknown;
383 ULONG ModuleEntryIndex;
384 USHORT ModuleNameLength; /* Length of module name not including the path, this field contains valid value only for NTOSKRNL module*/
385 USHORT ModulePathLength; /* Length of 'directory path' part of modulename*/
386 CHAR ModuleName [256];
387
388 } SYSTEM_MODULE_ENTRY, * PSYSTEM_MODULE_ENTRY;
389
390 typedef
391 struct _SYSTEM_MODULE_INFORMATION
392 {
393 ULONG Count;
394 SYSTEM_MODULE_ENTRY Module [1];
395
396 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
397
398 // SystemResourceLockInformation (12)
399 typedef
400 struct _SYSTEM_RESOURCE_LOCK_ENTRY
401 {
402 ULONG ResourceAddress;
403 ULONG Always1;
404 ULONG Unknown;
405 ULONG ActiveCount;
406 ULONG ContentionCount;
407 ULONG Unused[2];
408 ULONG NumberOfSharedWaiters;
409 ULONG NumberOfExclusiveWaiters;
410
411 } SYSTEM_RESOURCE_LOCK_ENTRY, *PSYSTEM_RESOURCE_LOCK_ENTRY;
412
413 typedef
414 struct _SYSTEM_RESOURCE_LOCK_INFO
415 {
416 ULONG Count;
417 SYSTEM_RESOURCE_LOCK_ENTRY Lock [1];
418
419 } SYSTEM_RESOURCE_LOCK_INFO, *PSYSTEM_RESOURCE_LOCK_INFO;
420
421 // SystemInformation13 (13)
422 // UNKNOWN
423
424 // SystemInformation14 (14)
425 // UNKNOWN
426
427 // SystemInformation15 (15)
428 // UNKNOWN
429
430 // SystemHandleInformation (16)
431 // (see ontypes.h)
432 typedef
433 struct _SYSTEM_HANDLE_ENTRY
434 {
435 ULONG OwnerPid;
436 BYTE ObjectType;
437 BYTE HandleFlags;
438 USHORT HandleValue;
439 PVOID ObjectPointer;
440 ULONG AccessMask;
441
442 } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
443
444 typedef
445 struct _SYSTEM_HANDLE_INFORMATION
446 {
447 ULONG Count;
448 SYSTEM_HANDLE_ENTRY Handle [1];
449
450 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
451
452 // SystemObjectInformation (17)
453 // UNKNOWN
454 typedef
455 struct _SYSTEM_OBJECT_INFORMATION
456 {
457 DWORD Unknown;
458 /* FIXME */
459 } SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION;
460
461 // SystemPageFileInformation (18)
462 typedef
463 struct _SYSTEM_PAGEFILE_INFORMATION
464 {
465 ULONG RelativeOffset;
466 ULONG CurrentSizePages;
467 ULONG TotalUsedPages;
468 ULONG PeakUsedPages;
469 UNICODE_STRING PagefileFileName;
470
471 } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
472
473 // SystemInstructionEmulationInfo (19)
474 typedef
475 struct _SYSTEM_VDM_INFORMATION
476 {
477 ULONG VdmSegmentNotPresentCount;
478 ULONG VdmINSWCount;
479 ULONG VdmESPREFIXCount;
480 ULONG VdmCSPREFIXCount;
481 ULONG VdmSSPREFIXCount;
482 ULONG VdmDSPREFIXCount;
483 ULONG VdmFSPREFIXCount;
484 ULONG VdmGSPREFIXCount;
485 ULONG VdmOPER32PREFIXCount;
486 ULONG VdmADDR32PREFIXCount;
487 ULONG VdmINSBCount;
488 ULONG VdmINSWV86Count;
489 ULONG VdmOUTSBCount;
490 ULONG VdmOUTSWCount;
491 ULONG VdmPUSHFCount;
492 ULONG VdmPOPFCount;
493 ULONG VdmINTNNCount;
494 ULONG VdmINTOCount;
495 ULONG VdmIRETCount;
496 ULONG VdmINBIMMCount;
497 ULONG VdmINWIMMCount;
498 ULONG VdmOUTBIMMCount;
499 ULONG VdmOUTWIMMCount;
500 ULONG VdmINBCount;
501 ULONG VdmINWCount;
502 ULONG VdmOUTBCount;
503 ULONG VdmOUTWCount;
504 ULONG VdmLOCKPREFIXCount;
505 ULONG VdmREPNEPREFIXCount;
506 ULONG VdmREPPREFIXCount;
507 ULONG VdmHLTCount;
508 ULONG VdmCLICount;
509 ULONG VdmSTICount;
510 ULONG VdmBopCount;
511
512 } SYSTEM_VDM_INFORMATION, *PSYSTEM_VDM_INFORMATION;
513
514 // SystemInformation20 (20)
515 // UNKNOWN
516
517 // SystemCacheInformation (21)
518 typedef
519 struct _SYSTEM_CACHE_INFORMATION
520 {
521 ULONG CurrentSize;
522 ULONG PeakSize;
523 ULONG PageFaultCount;
524 ULONG MinimumWorkingSet;
525 ULONG MaximumWorkingSet;
526 ULONG Unused[4];
527
528 } SYSTEM_CACHE_INFORMATION;
529
530 // SystemPoolTagInformation (22)
531 // found by Klaus P. Gerlicher
532 // (implemented only in checked builds)
533 typedef
534 struct _POOL_TAG_STATS
535 {
536 ULONG AllocationCount;
537 ULONG FreeCount;
538 ULONG SizeBytes;
539
540 } POOL_TAG_STATS;
541
542 typedef
543 struct _SYSTEM_POOL_TAG_ENTRY
544 {
545 ULONG Tag;
546 POOL_TAG_STATS Paged;
547 POOL_TAG_STATS NonPaged;
548
549 } SYSTEM_POOL_TAG_ENTRY, * PSYSTEM_POOL_TAG_ENTRY;
550
551 typedef
552 struct _SYSTEM_POOL_TAG_INFO
553 {
554 ULONG Count;
555 SYSTEM_POOL_TAG_ENTRY PoolEntry [1];
556
557 } SYSTEM_POOL_TAG_INFO, *PSYSTEM_POOL_TAG_INFO;
558
559 // SystemProcessorScheduleInfo (23)
560 typedef
561 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
562 {
563 ULONG nContextSwitches;
564 ULONG nDPCQueued;
565 ULONG nDPCRate;
566 ULONG TimerResolution;
567 ULONG nDPCBypasses;
568 ULONG nAPCBypasses;
569
570 } SYSTEM_PROCESSOR_SCHEDULE_INFO, *PSYSTEM_PROCESSOR_SCHEDULE_INFO;
571
572 // SystemDpcInformation (24)
573 typedef
574 struct _SYSTEM_DPC_INFORMATION
575 {
576 ULONG Unused;
577 ULONG KiMaximumDpcQueueDepth;
578 ULONG KiMinimumDpcRate;
579 ULONG KiAdjustDpcThreshold;
580 ULONG KiIdealDpcRate;
581
582 } SYSTEM_DPC_INFORMATION, *PSYSTEM_DPC_INFORMATION;
583
584 // SystemInformation25 (25)
585 // UNKNOWN
586
587 // SystemLoadImage (26)
588 typedef
589 struct _SYSTEM_IMAGE_LOAD
590 {
591 UNICODE_STRING ModuleFileName IN;
592 PVOID BaseAddress OUT;
593 PVOID Section OUT;
594 PVOID EntryPoint OUT;
595 PVOID ExportDirectory OUT;
596
597 } SYSTEM_IMAGE_LOAD, *PSYSTEM_IMAGE_LOAD;
598
599 // SystemUnloadImage (27)
600 typedef
601 struct _SYSTEM_IMAGE_UNLOAD
602 {
603 PVOID Section IN; /* see SYSTEM_IMAGE_LOAD.ModuleSection */
604
605 } SYSTEM_IMAGE_UNLOAD, *PSYSTEM_IMAGE_UNLOAD;
606
607
608 // SystemTimeAdjustmentInformation (28)
609 // (what is the right one?)
610 #if 0
611 typedef
612 struct _SYSTEM_TIME_ADJUSTMENT_INFO
613 {
614 TIME TimeAdjustment;
615 BOOL TimeAdjustmentDisabled;
616
617 } SYSTEM_TIME_ADJUSTMENT_INFO, *PSYSTEM_TIME_ADJUSTMENT_INFO;
618 #else
619 typedef
620 struct _SYSTEM_TIME_ADJUSTMENT_INFO
621 {
622 ULONG KeTimeAdjustment;
623 ULONG KeMaximumIncrement;
624 BOOLEAN KeTimeSynchronization;
625
626 } SYSTEM_TIME_ADJUSTMENT_INFO, *PSYSTEM_TIME_ADJUSTMENT_INFO;
627 #endif
628
629 // SystemProcessorFaultCountInfo (33)
630 typedef
631 struct _SYSTEM_PROCESSOR_FAULT_INFO
632 {
633 ULONG nAlignmentFixup;
634 ULONG nExceptionDispatches;
635 ULONG nFloatingEmulation;
636 ULONG Unknown;
637
638 } SYSTEM_PROCESSOR_FAULT_INFO, *PSYSTEM_PROCESSOR_FAULT_INFO;
639
640 // SystemCrashDumpStateInfo (34)
641 //
642
643 // SystemDebuggerInformation (35)
644 typedef
645 struct _SYSTEM_DEBUGGER_INFO
646 {
647 BOOLEAN KdDebuggerEnabled;
648 BOOLEAN KdDebuggerPresent;
649
650 } SYSTEM_DEBUGGER_INFO, *PSYSTEM_DEBUGGER_INFO;
651
652 // SystemInformation36 (36)
653 // UNKNOWN
654
655 // SystemQuotaInformation (37)
656 typedef
657 struct _SYSTEM_QUOTA_INFORMATION
658 {
659 ULONG CmpGlobalQuota;
660 ULONG CmpGlobalQuotaUsed;
661 ULONG MmSizeofPagedPoolInBytes;
662
663 } SYSTEM_QUOTA_INFORMATION, *PSYSTEM_QUOTA_INFORMATION;
664
665 // SystemLoadDriver (38)
666 typedef
667 struct _SYSTEM_DRIVER_LOAD
668 {
669 UNICODE_STRING DriverRegistryEntry;
670
671 } SYSTEM_DRIVER_LOAD, *PSYSTEM_DRIVER_LOAD;
672
673
674
675 // memory information
676
677 #define MemoryBasicInformation 0
678
679 // shutdown action
680
681 typedef enum SHUTDOWN_ACTION_TAG {
682 ShutdownNoReboot,
683 ShutdownReboot,
684 ShutdownPowerOff
685 } SHUTDOWN_ACTION;
686
687 // wait type
688
689 #define WaitAll 0
690 #define WaitAny 1
691
692 // number of wait objects
693
694 #define THREAD_WAIT_OBJECTS 3
695 //#define MAXIMUM_WAIT_OBJECTS 64
696
697 // key restore flags
698
699 #define REG_WHOLE_HIVE_VOLATILE 1
700 #define REG_REFRESH_HIVE 2
701
702 // object type access rights
703
704 #define OBJECT_TYPE_CREATE 0x0001
705 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
706
707 // directory access rights
708
709 #define DIRECTORY_QUERY 0x0001
710 #define DIRECTORY_TRAVERSE 0x0002
711 #define DIRECTORY_CREATE_OBJECT 0x0004
712 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
713
714 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
715
716 // symbolic link access rights
717
718 #define SYMBOLIC_LINK_QUERY 0x0001
719 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
720
721 typedef struct _PROCESS_WS_WATCH_INFORMATION
722 {
723 PVOID FaultingPc;
724 PVOID FaultingVa;
725 } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
726
727 typedef struct _PROCESS_BASIC_INFORMATION
728 {
729 NTSTATUS ExitStatus;
730 PPEB PebBaseAddress;
731 KAFFINITY AffinityMask;
732 KPRIORITY BasePriority;
733 ULONG UniqueProcessId;
734 ULONG InheritedFromUniqueProcessId;
735 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
736
737 typedef struct _QUOTA_LIMITS
738 {
739 ULONG PagedPoolLimit;
740 ULONG NonPagedPoolLimit;
741 ULONG MinimumWorkingSetSize;
742 ULONG MaximumWorkingSetSize;
743 ULONG PagefileLimit;
744 TIME TimeLimit;
745 } QUOTA_LIMITS, *PQUOTA_LIMITS;
746
747 typedef struct _IO_COUNTERS
748 {
749 ULONG ReadOperationCount;
750 ULONG WriteOperationCount;
751 ULONG OtherOperationCount;
752 LARGE_INTEGER ReadTransferCount;
753 LARGE_INTEGER WriteTransferCount;
754 LARGE_INTEGER OtherTransferCount;
755 } IO_COUNTERS, *PIO_COUNTERS;
756
757
758 typedef struct _VM_COUNTERS_
759 {
760 ULONG PeakVirtualSize;
761 ULONG VirtualSize;
762 ULONG PageFaultCount;
763 ULONG PeakWorkingSetSize;
764 ULONG WorkingSetSize;
765 ULONG QuotaPeakPagedPoolUsage;
766 ULONG QuotaPagedPoolUsage;
767 ULONG QuotaPeakNonPagedPoolUsage;
768 ULONG QuotaNonPagedPoolUsage;
769 ULONG PagefileUsage;
770 ULONG PeakPagefileUsage;
771 } VM_COUNTERS, *PVM_COUNTERS;
772
773
774 typedef struct _POOLED_USAGE_AND_LIMITS_
775 {
776 ULONG PeakPagedPoolUsage;
777 ULONG PagedPoolUsage;
778 ULONG PagedPoolLimit;
779 ULONG PeakNonPagedPoolUsage;
780 ULONG NonPagedPoolUsage;
781 ULONG NonPagedPoolLimit;
782 ULONG PeakPagefileUsage;
783 ULONG PagefileUsage;
784 ULONG PagefileLimit;
785 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
786
787
788 typedef struct _PROCESS_ACCESS_TOKEN
789 {
790 HANDLE Token;
791 HANDLE Thread;
792 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
793
794 typedef struct _KERNEL_USER_TIMES
795 {
796 TIME CreateTime;
797 TIME ExitTime;
798 TIME KernelTime;
799 TIME UserTime;
800 } KERNEL_USER_TIMES;
801 typedef KERNEL_USER_TIMES *PKERNEL_USER_TIMES;
802
803 // thread information
804
805 // incompatible with MS NT
806
807 typedef struct _THREAD_BASIC_INFORMATION
808 {
809 NTSTATUS ExitStatus;
810 PVOID TebBaseAddress;
811 KAFFINITY AffinityMask;
812 KPRIORITY BasePriority;
813 ULONG UniqueThreadId;
814 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
815
816 // object information
817
818 typedef struct _OBJECT_NAME_INFORMATION
819 {
820 UNICODE_STRING Name;
821 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
822
823
824
825 typedef struct _OBJECT_DATA_INFORMATION
826 {
827 BOOLEAN bInheritHandle;
828 BOOLEAN bProtectFromClose;
829 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
830
831
832 typedef struct _OBJECT_TYPE_INFORMATION
833 {
834 UNICODE_STRING Name;
835 UNICODE_STRING Type;
836 ULONG TotalHandles;
837 ULONG ReferenceCount;
838 } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
839
840 // file information
841
842 typedef struct _FILE_BASIC_INFORMATION
843 {
844 TIME CreationTime;
845 TIME LastAccessTime;
846 TIME LastWriteTime;
847 TIME ChangeTime;
848 ULONG FileAttributes;
849 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
850
851 typedef struct _FILE_STANDARD_INFORMATION
852 {
853 LARGE_INTEGER AllocationSize;
854 LARGE_INTEGER EndOfFile;
855 ULONG NumberOfLinks;
856 BOOLEAN DeletePending;
857 BOOLEAN Directory;
858 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
859
860 typedef struct _FILE_POSITION_INFORMATION
861 {
862 LARGE_INTEGER CurrentByteOffset;
863 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
864
865 typedef struct _FILE_ALIGNMENT_INFORMATION
866 {
867 ULONG AlignmentRequirement;
868 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
869
870 typedef struct _FILE_DISPOSITION_INFORMATION
871 {
872 BOOLEAN DeleteFile;
873 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
874
875 typedef struct _FILE_END_OF_FILE_INFORMATION
876 {
877 LARGE_INTEGER EndOfFile;
878 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
879
880 typedef struct _FILE_NETWORK_OPEN_INFORMATION
881 {
882 TIME CreationTime;
883 TIME LastAccessTime;
884 TIME LastWriteTime;
885 TIME ChangeTime;
886 LARGE_INTEGER AllocationSize;
887 LARGE_INTEGER EndOfFile;
888 ULONG FileAttributes;
889 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
890
891 typedef struct _FILE_FULL_EA_INFORMATION
892 {
893 ULONG NextEntryOffset;
894 UCHAR Flags;
895 UCHAR EaNameLength;
896 USHORT EaValueLength;
897 CHAR EaName[0];
898 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
899
900
901 typedef struct _FILE_EA_INFORMATION {
902 ULONG EaSize;
903 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
904
905
906 typedef struct _FILE_GET_EA_INFORMATION {
907 ULONG NextEntryOffset;
908 UCHAR EaNameLength;
909 CHAR EaName[0];
910 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
911
912 typedef struct _FILE_STREAM_INFORMATION {
913 ULONG NextEntryOffset;
914 ULONG StreamNameLength;
915 LARGE_INTEGER StreamSize;
916 LARGE_INTEGER StreamAllocationSize;
917 WCHAR StreamName[0];
918 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
919
920 typedef struct _FILE_ALLOCATION_INFORMATION {
921 LARGE_INTEGER AllocationSize;
922 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
923
924 typedef struct _FILE_NAME_INFORMATION {
925 ULONG FileNameLength;
926 WCHAR FileName[0];
927 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
928
929 typedef struct _FILE_NAMES_INFORMATION
930 {
931 ULONG NextEntryOffset;
932 ULONG FileIndex;
933 ULONG FileNameLength;
934 WCHAR FileName[0];
935 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
936
937
938 typedef struct _FILE_RENAME_INFORMATION {
939 BOOLEAN Replace;
940 HANDLE RootDir;
941 ULONG FileNameLength;
942 WCHAR FileName[0];
943 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
944
945
946 typedef struct _FILE_INTERNAL_INFORMATION {
947 LARGE_INTEGER IndexNumber;
948 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
949
950 typedef struct _FILE_ACCESS_INFORMATION {
951 ACCESS_MASK AccessFlags;
952 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
953
954
955 typedef struct _FILE_MODE_INFORMATION {
956 ULONG Mode;
957 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
958
959 typedef struct _FILE_COMPRESSION_INFORMATION {
960 LARGE_INTEGER CompressedFileSize;
961 USHORT CompressionFormat;
962 UCHAR CompressionUnitShift;
963 UCHAR ChunkShift;
964 UCHAR ClusterShift;
965 UCHAR Reserved[3];
966 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
967
968 typedef struct _FILE_ALL_INFORMATION {
969 FILE_BASIC_INFORMATION BasicInformation;
970 FILE_STANDARD_INFORMATION StandardInformation;
971 FILE_INTERNAL_INFORMATION InternalInformation;
972 FILE_EA_INFORMATION EaInformation;
973 FILE_ACCESS_INFORMATION AccessInformation;
974 FILE_POSITION_INFORMATION PositionInformation;
975 FILE_MODE_INFORMATION ModeInformation;
976 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
977 FILE_NAME_INFORMATION NameInformation;
978 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
979
980 // file system information structures
981
982 typedef struct _FILE_FS_DEVICE_INFORMATION {
983 DEVICE_TYPE DeviceType;
984 ULONG Characteristics;
985 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
986
987
988 typedef struct _FILE_FS_VOLUME_INFORMATION {
989 TIME VolumeCreationTime;
990 ULONG VolumeSerialNumber;
991 ULONG VolumeLabelLength;
992 BOOLEAN SupportsObjects;
993 WCHAR VolumeLabel[0];
994 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
995
996 typedef struct _FILE_FS_SIZE_INFORMATION {
997 LARGE_INTEGER TotalAllocationUnits;
998 LARGE_INTEGER AvailableAllocationUnits;
999 ULONG SectorsPerAllocationUnit;
1000 ULONG BytesPerSector;
1001 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
1002
1003 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
1004 ULONG FileSystemAttributes;
1005 LONG MaximumComponentNameLength;
1006 ULONG FileSystemNameLength;
1007 WCHAR FileSystemName[0];
1008 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
1009
1010 /*
1011 FileSystemAttributes is one of the following values:
1012
1013 FILE_CASE_SENSITIVE_SEARCH 0x00000001
1014 FILE_CASE_PRESERVED_NAMES 0x00000002
1015 FILE_UNICODE_ON_DISK 0x00000004
1016 FILE_PERSISTENT_ACLS 0x00000008
1017 FILE_FILE_COMPRESSION 0x00000010
1018 FILE_VOLUME_QUOTAS 0x00000020
1019 FILE_VOLUME_IS_COMPRESSED 0x00008000
1020 */
1021 typedef struct _FILE_FS_LABEL_INFORMATION {
1022 ULONG VolumeLabelLength;
1023 WCHAR VolumeLabel[0];
1024 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
1025
1026 // read file scatter / write file scatter
1027 //FIXME I am a win32 struct aswell
1028
1029 typedef union _FILE_SEGMENT_ELEMENT {
1030 PVOID Buffer;
1031 ULONG Alignment;
1032 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
1033
1034 // directory information
1035
1036 typedef struct _OBJDIR_INFORMATION {
1037 UNICODE_STRING ObjectName;
1038 UNICODE_STRING ObjectTypeName; // Directory, Device ...
1039 UCHAR Data[0];
1040 } OBJDIR_INFORMATION, *POBJDIR_INFORMATION;
1041
1042
1043 typedef struct _FILE_DIRECTORY_INFORMATION {
1044 ULONG NextEntryOffset;
1045 ULONG FileIndex;
1046 TIME CreationTime;
1047 TIME LastAccessTime;
1048 TIME LastWriteTime;
1049 TIME ChangeTime;
1050 LARGE_INTEGER EndOfFile;
1051 LARGE_INTEGER AllocationSize;
1052 ULONG FileAttributes;
1053 ULONG FileNameLength;
1054 WCHAR FileName[0];
1055 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
1056
1057 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
1058 ULONG NextEntryOffset;
1059 ULONG FileIndex;
1060 TIME CreationTime;
1061 TIME LastAccessTime;
1062 TIME LastWriteTime;
1063 TIME ChangeTime;
1064 LARGE_INTEGER EndOfFile;
1065 LARGE_INTEGER AllocationSize;
1066 ULONG FileAttributes;
1067 ULONG FileNameLength;
1068 ULONG EaSize;
1069 WCHAR FileName[0]; // variable size
1070 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
1071 FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
1072
1073
1074 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
1075 ULONG NextEntryOffset;
1076 ULONG FileIndex;
1077 TIME CreationTime;
1078 TIME LastAccessTime;
1079 TIME LastWriteTime;
1080 TIME ChangeTime;
1081 LARGE_INTEGER EndOfFile;
1082 LARGE_INTEGER AllocationSize;
1083 ULONG FileAttributes;
1084 ULONG FileNameLength;
1085 ULONG EaSize;
1086 CHAR ShortNameLength;
1087 WCHAR ShortName[12]; // 8.3 name
1088 WCHAR FileName[0];
1089 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
1090 FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
1091
1092
1093 /*
1094 NotifyFilter / CompletionFilter:
1095
1096 FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
1097 FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
1098 FILE_NOTIFY_CHANGE_NAME 0x00000003
1099 FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
1100 FILE_NOTIFY_CHANGE_SIZE 0x00000008
1101 FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
1102 FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
1103 FILE_NOTIFY_CHANGE_CREATION 0x00000040
1104 FILE_NOTIFY_CHANGE_EA 0x00000080
1105 FILE_NOTIFY_CHANGE_SECURITY 0x00000100
1106 FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
1107 FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
1108 FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
1109 */
1110
1111 typedef struct _FILE_NOTIFY_INFORMATION {
1112 ULONG Action;
1113 ULONG FileNameLength;
1114 WCHAR FileName[0];
1115 } FILE_NOTIFY_INFORMATION;
1116
1117
1118 /*
1119 Action is one of the following values:
1120
1121 FILE_ACTION_ADDED 0x00000001
1122 FILE_ACTION_REMOVED 0x00000002
1123 FILE_ACTION_MODIFIED 0x00000003
1124 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
1125 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
1126 FILE_ACTION_ADDED_STREAM 0x00000006
1127 FILE_ACTION_REMOVED_STREAM 0x00000007
1128 FILE_ACTION_MODIFIED_STREAM 0x00000008
1129
1130 */
1131
1132
1133 //FIXME: I am a win32 object
1134 typedef
1135 VOID
1136 (*PTIMERAPCROUTINE)(
1137 LPVOID lpArgToCompletionRoutine,
1138 DWORD dwTimerLowValue,
1139 DWORD dwTimerHighValue
1140 );
1141
1142
1143 // File System Control commands ( related to defragging )
1144
1145 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
1146 #define FSCTL_GET_VOLUME_BITMAP 0x9006F
1147 #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
1148 #define FSCTL_MOVE_FILE 0x90074
1149
1150 typedef struct _MAPPING_PAIR
1151 {
1152 ULONGLONG Vcn;
1153 ULONGLONG Lcn;
1154 } MAPPING_PAIR, *PMAPPING_PAIR;
1155
1156 typedef struct _GET_RETRIEVAL_DESCRIPTOR
1157 {
1158 ULONG NumberOfPairs;
1159 ULONGLONG StartVcn;
1160 MAPPING_PAIR Pair[0]; // variable size
1161 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
1162
1163 typedef struct _BITMAP_DESCRIPTOR
1164 {
1165 ULONGLONG StartLcn;
1166 ULONGLONG ClustersToEndOfVol;
1167 BYTE Map[0]; // variable size
1168 } BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR;
1169
1170 typedef struct _MOVEFILE_DESCRIPTOR
1171 {
1172 HANDLE FileHandle;
1173 ULONG Reserved;
1174 LARGE_INTEGER StartVcn;
1175 LARGE_INTEGER TargetLcn;
1176 ULONG NumVcns;
1177 ULONG Reserved1;
1178 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
1179
1180
1181 // semaphore information
1182
1183 typedef struct _SEMAPHORE_BASIC_INFORMATION
1184 {
1185 ULONG CurrentCount;
1186 ULONG MaximumCount;
1187 } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
1188
1189 // event information
1190
1191 typedef struct _EVENT_BASIC_INFORMATION
1192 {
1193 BOOL AutomaticReset;
1194 BOOL Signaled;
1195 } EVENT_BASIC_INFORMATION, *PEVENT_INFORMATION;
1196
1197 //typedef enum _TIMER_TYPE
1198 //{
1199 // NotificationTimer,
1200 // SynchronizationTimer
1201 //} TIMER_TYPE;
1202
1203 typedef
1204 struct _LPC_PORT_BASIC_INFORMATION
1205 {
1206 DWORD Unknown0;
1207 DWORD Unknown1;
1208 DWORD Unknown2;
1209 DWORD Unknown3;
1210 DWORD Unknown4;
1211 DWORD Unknown5;
1212 DWORD Unknown6;
1213 DWORD Unknown7;
1214 DWORD Unknown8;
1215 DWORD Unknown9;
1216 DWORD Unknown10;
1217 DWORD Unknown11;
1218 DWORD Unknown12;
1219 DWORD Unknown13;
1220
1221 } LPC_PORT_BASIC_INFORMATION, * PLPC_PORT_BASIC_INFORMATION;
1222
1223 #endif