Partially implemented (handlers only)
[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 typedef
432 struct _SYSTEM_HANDLE_ENTRY
433 {
434 ULONG OwnerPid;
435 USHORT ObjectType;
436 USHORT HandleValue;
437 PVOID ObjectPointer;
438 ULONG AccessMask;
439
440 } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
441
442 typedef
443 struct _SYSTEM_HANDLE_INFORMATION
444 {
445 ULONG Count;
446 SYSTEM_HANDLE_ENTRY Handle [1];
447
448 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
449
450 // SystemObjectInformation (17)
451 // UNKNOWN
452 typedef
453 struct _SYSTEM_OBJECT_INFORMATION
454 {
455 DWORD Unknown;
456 /* FIXME */
457 } SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION;
458
459 // SystemPageFileInformation (18)
460 typedef
461 struct _SYSTEM_PAGEFILE_INFORMATION
462 {
463 ULONG RelativeOffset;
464 ULONG CurrentSizePages;
465 ULONG TotalUsedPages;
466 ULONG PeakUsedPages;
467 UNICODE_STRING PagefileFileName;
468
469 } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
470
471 // SystemInstructionEmulationInfo (19)
472 typedef
473 struct _SYSTEM_VDM_INFORMATION
474 {
475 ULONG VdmSegmentNotPresentCount;
476 ULONG VdmINSWCount;
477 ULONG VdmESPREFIXCount;
478 ULONG VdmCSPREFIXCount;
479 ULONG VdmSSPREFIXCount;
480 ULONG VdmDSPREFIXCount;
481 ULONG VdmFSPREFIXCount;
482 ULONG VdmGSPREFIXCount;
483 ULONG VdmOPER32PREFIXCount;
484 ULONG VdmADDR32PREFIXCount;
485 ULONG VdmINSBCount;
486 ULONG VdmINSWV86Count;
487 ULONG VdmOUTSBCount;
488 ULONG VdmOUTSWCount;
489 ULONG VdmPUSHFCount;
490 ULONG VdmPOPFCount;
491 ULONG VdmINTNNCount;
492 ULONG VdmINTOCount;
493 ULONG VdmIRETCount;
494 ULONG VdmINBIMMCount;
495 ULONG VdmINWIMMCount;
496 ULONG VdmOUTBIMMCount;
497 ULONG VdmOUTWIMMCount;
498 ULONG VdmINBCount;
499 ULONG VdmINWCount;
500 ULONG VdmOUTBCount;
501 ULONG VdmOUTWCount;
502 ULONG VdmLOCKPREFIXCount;
503 ULONG VdmREPNEPREFIXCount;
504 ULONG VdmREPPREFIXCount;
505 ULONG VdmHLTCount;
506 ULONG VdmCLICount;
507 ULONG VdmSTICount;
508 ULONG VdmBopCount;
509
510 } SYSTEM_VDM_INFORMATION, *PSYSTEM_VDM_INFORMATION;
511
512 // SystemInformation20 (20)
513 // UNKNOWN
514
515 // SystemCacheInformation (21)
516 typedef
517 struct _SYSTEM_CACHE_INFORMATION
518 {
519 ULONG CurrentSize;
520 ULONG PeakSize;
521 ULONG PageFaultCount;
522 ULONG MinimumWorkingSet;
523 ULONG MaximumWorkingSet;
524 ULONG Unused[4];
525
526 } SYSTEM_CACHE_INFORMATION;
527
528 // SystemPoolTagInformation (22)
529 // found by Klaus P. Gerlicher
530 // (implemented only in checked builds)
531 typedef
532 struct _POOL_TAG_STATS
533 {
534 ULONG AllocationCount;
535 ULONG FreeCount;
536 ULONG SizeBytes;
537
538 } POOL_TAG_STATS;
539
540 typedef
541 struct _SYSTEM_POOL_TAG_ENTRY
542 {
543 ULONG Tag;
544 POOL_TAG_STATS Paged;
545 POOL_TAG_STATS NonPaged;
546
547 } SYSTEM_POOL_TAG_ENTRY, * PSYSTEM_POOL_TAG_ENTRY;
548
549 typedef
550 struct _SYSTEM_POOL_TAG_INFO
551 {
552 ULONG Count;
553 SYSTEM_POOL_TAG_ENTRY PoolEntry [1];
554
555 } SYSTEM_POOL_TAG_INFO, *PSYSTEM_POOL_TAG_INFO;
556
557 // SystemProcessorScheduleInfo (23)
558 typedef
559 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
560 {
561 ULONG nContextSwitches;
562 ULONG nDPCQueued;
563 ULONG nDPCRate;
564 ULONG TimerResolution;
565 ULONG nDPCBypasses;
566 ULONG nAPCBypasses;
567
568 } SYSTEM_PROCESSOR_SCHEDULE_INFO, *PSYSTEM_PROCESSOR_SCHEDULE_INFO;
569
570 // SystemDpcInformation (24)
571 typedef
572 struct _SYSTEM_DPC_INFORMATION
573 {
574 ULONG Unused;
575 ULONG KiMaximumDpcQueueDepth;
576 ULONG KiMinimumDpcRate;
577 ULONG KiAdjustDpcThreshold;
578 ULONG KiIdealDpcRate;
579
580 } SYSTEM_DPC_INFORMATION, *PSYSTEM_DPC_INFORMATION;
581
582 // SystemInformation25 (25)
583 // UNKNOWN
584
585 // SystemLoadImage (26)
586 typedef
587 struct _SYSTEM_IMAGE_LOAD
588 {
589 UNICODE_STRING ModuleFileName IN;
590 PVOID BaseAddress OUT;
591 PVOID Section OUT;
592 PVOID EntryPoint OUT;
593 PVOID ExportDirectory OUT;
594
595 } SYSTEM_IMAGE_LOAD, *PSYSTEM_IMAGE_LOAD;
596
597 // SystemUnloadImage (27)
598 typedef
599 struct _SYSTEM_IMAGE_UNLOAD
600 {
601 PVOID Section IN; /* see SYSTEM_IMAGE_LOAD.ModuleSection */
602
603 } SYSTEM_IMAGE_UNLOAD, *PSYSTEM_IMAGE_UNLOAD;
604
605
606 // SystemTimeAdjustmentInformation (28)
607 // (what is the right one?)
608 #if 0
609 typedef
610 struct _SYSTEM_TIME_ADJUSTMENT_INFO
611 {
612 TIME TimeAdjustment;
613 BOOL TimeAdjustmentDisabled;
614
615 } SYSTEM_TIME_ADJUSTMENT_INFO, *PSYSTEM_TIME_ADJUSTMENT_INFO;
616 #else
617 typedef
618 struct _SYSTEM_TIME_ADJUSTMENT_INFO
619 {
620 ULONG KeTimeAdjustment;
621 ULONG KeMaximumIncrement;
622 BOOLEAN KeTimeSynchronization;
623
624 } SYSTEM_TIME_ADJUSTMENT_INFO, *PSYSTEM_TIME_ADJUSTMENT_INFO;
625 #endif
626
627 // SystemProcessorFaultCountInfo (33)
628 typedef
629 struct _SYSTEM_PROCESSOR_FAULT_INFO
630 {
631 ULONG nAlignmentFixup;
632 ULONG nExceptionDispatches;
633 ULONG nFloatingEmulation;
634 ULONG Unknown;
635
636 } SYSTEM_PROCESSOR_FAULT_INFO, *PSYSTEM_PROCESSOR_FAULT_INFO;
637
638 // SystemCrashDumpStateInfo (34)
639 //
640
641 // SystemDebuggerInformation (35)
642 typedef
643 struct _SYSTEM_DEBUGGER_INFO
644 {
645 BOOLEAN KdDebuggerEnabled;
646 BOOLEAN KdDebuggerPresent;
647
648 } SYSTEM_DEBUGGER_INFO, *PSYSTEM_DEBUGGER_INFO;
649
650 // SystemInformation36 (36)
651 // UNKNOWN
652
653 // SystemQuotaInformation (37)
654 typedef
655 struct _SYSTEM_QUOTA_INFORMATION
656 {
657 ULONG CmpGlobalQuota;
658 ULONG CmpGlobalQuotaUsed;
659 ULONG MmSizeofPagedPoolInBytes;
660
661 } SYSTEM_QUOTA_INFORMATION, *PSYSTEM_QUOTA_INFORMATION;
662
663 // SystemLoadDriver (38)
664 typedef
665 struct _SYSTEM_DRIVER_LOAD
666 {
667 UNICODE_STRING DriverRegistryEntry;
668
669 } SYSTEM_DRIVER_LOAD, *PSYSTEM_DRIVER_LOAD;
670
671
672
673 // memory information
674
675 #define MemoryBasicInformation 0
676
677 // shutdown action
678
679 typedef enum SHUTDOWN_ACTION_TAG {
680 ShutdownNoReboot,
681 ShutdownReboot,
682 ShutdownPowerOff
683 } SHUTDOWN_ACTION;
684
685 // wait type
686
687 #define WaitAll 0
688 #define WaitAny 1
689
690 // number of wait objects
691
692 #define THREAD_WAIT_OBJECTS 3
693 //#define MAXIMUM_WAIT_OBJECTS 64
694
695 // key restore flags
696
697 #define REG_WHOLE_HIVE_VOLATILE 1
698 #define REG_REFRESH_HIVE 2
699
700 // object type access rights
701
702 #define OBJECT_TYPE_CREATE 0x0001
703 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
704
705 // directory access rights
706
707 #define DIRECTORY_QUERY 0x0001
708 #define DIRECTORY_TRAVERSE 0x0002
709 #define DIRECTORY_CREATE_OBJECT 0x0004
710 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
711
712 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
713
714 // symbolic link access rights
715
716 #define SYMBOLIC_LINK_QUERY 0x0001
717 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
718
719 typedef struct _PROCESS_WS_WATCH_INFORMATION
720 {
721 PVOID FaultingPc;
722 PVOID FaultingVa;
723 } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
724
725 typedef struct _PROCESS_BASIC_INFORMATION
726 {
727 NTSTATUS ExitStatus;
728 PPEB PebBaseAddress;
729 KAFFINITY AffinityMask;
730 KPRIORITY BasePriority;
731 ULONG UniqueProcessId;
732 ULONG InheritedFromUniqueProcessId;
733 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
734
735 typedef struct _QUOTA_LIMITS
736 {
737 ULONG PagedPoolLimit;
738 ULONG NonPagedPoolLimit;
739 ULONG MinimumWorkingSetSize;
740 ULONG MaximumWorkingSetSize;
741 ULONG PagefileLimit;
742 TIME TimeLimit;
743 } QUOTA_LIMITS, *PQUOTA_LIMITS;
744
745 typedef struct _IO_COUNTERS
746 {
747 ULONG ReadOperationCount;
748 ULONG WriteOperationCount;
749 ULONG OtherOperationCount;
750 LARGE_INTEGER ReadTransferCount;
751 LARGE_INTEGER WriteTransferCount;
752 LARGE_INTEGER OtherTransferCount;
753 } IO_COUNTERS, *PIO_COUNTERS;
754
755
756 typedef struct _VM_COUNTERS_
757 {
758 ULONG PeakVirtualSize;
759 ULONG VirtualSize;
760 ULONG PageFaultCount;
761 ULONG PeakWorkingSetSize;
762 ULONG WorkingSetSize;
763 ULONG QuotaPeakPagedPoolUsage;
764 ULONG QuotaPagedPoolUsage;
765 ULONG QuotaPeakNonPagedPoolUsage;
766 ULONG QuotaNonPagedPoolUsage;
767 ULONG PagefileUsage;
768 ULONG PeakPagefileUsage;
769 } VM_COUNTERS, *PVM_COUNTERS;
770
771
772 typedef struct _POOLED_USAGE_AND_LIMITS_
773 {
774 ULONG PeakPagedPoolUsage;
775 ULONG PagedPoolUsage;
776 ULONG PagedPoolLimit;
777 ULONG PeakNonPagedPoolUsage;
778 ULONG NonPagedPoolUsage;
779 ULONG NonPagedPoolLimit;
780 ULONG PeakPagefileUsage;
781 ULONG PagefileUsage;
782 ULONG PagefileLimit;
783 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
784
785
786 typedef struct _PROCESS_ACCESS_TOKEN
787 {
788 HANDLE Token;
789 HANDLE Thread;
790 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
791
792 typedef struct _KERNEL_USER_TIMES
793 {
794 TIME CreateTime;
795 TIME ExitTime;
796 TIME KernelTime;
797 TIME UserTime;
798 } KERNEL_USER_TIMES;
799 typedef KERNEL_USER_TIMES *PKERNEL_USER_TIMES;
800
801 // thread information
802
803 // incompatible with MS NT
804
805 typedef struct _THREAD_BASIC_INFORMATION
806 {
807 NTSTATUS ExitStatus;
808 PVOID TebBaseAddress;
809 KAFFINITY AffinityMask;
810 KPRIORITY BasePriority;
811 ULONG UniqueThreadId;
812 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
813
814 // object information
815
816 typedef struct _OBJECT_NAME_INFORMATION
817 {
818 UNICODE_STRING Name;
819 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
820
821
822
823 typedef struct _OBJECT_DATA_INFORMATION
824 {
825 BOOLEAN bInheritHandle;
826 BOOLEAN bProtectFromClose;
827 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
828
829
830 typedef struct _OBJECT_TYPE_INFORMATION
831 {
832 UNICODE_STRING Name;
833 UNICODE_STRING Type;
834 ULONG TotalHandles;
835 ULONG ReferenceCount;
836 } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
837
838 // file information
839
840 typedef struct _FILE_BASIC_INFORMATION
841 {
842 TIME CreationTime;
843 TIME LastAccessTime;
844 TIME LastWriteTime;
845 TIME ChangeTime;
846 ULONG FileAttributes;
847 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
848
849 typedef struct _FILE_STANDARD_INFORMATION
850 {
851 LARGE_INTEGER AllocationSize;
852 LARGE_INTEGER EndOfFile;
853 ULONG NumberOfLinks;
854 BOOLEAN DeletePending;
855 BOOLEAN Directory;
856 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
857
858 typedef struct _FILE_POSITION_INFORMATION
859 {
860 LARGE_INTEGER CurrentByteOffset;
861 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
862
863 typedef struct _FILE_ALIGNMENT_INFORMATION
864 {
865 ULONG AlignmentRequirement;
866 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
867
868 typedef struct _FILE_DISPOSITION_INFORMATION
869 {
870 BOOLEAN DeleteFile;
871 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
872
873 typedef struct _FILE_END_OF_FILE_INFORMATION
874 {
875 LARGE_INTEGER EndOfFile;
876 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
877
878 typedef struct _FILE_NETWORK_OPEN_INFORMATION
879 {
880 TIME CreationTime;
881 TIME LastAccessTime;
882 TIME LastWriteTime;
883 TIME ChangeTime;
884 LARGE_INTEGER AllocationSize;
885 LARGE_INTEGER EndOfFile;
886 ULONG FileAttributes;
887 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
888
889 typedef struct _FILE_FULL_EA_INFORMATION
890 {
891 ULONG NextEntryOffset;
892 UCHAR Flags;
893 UCHAR EaNameLength;
894 USHORT EaValueLength;
895 CHAR EaName[0];
896 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
897
898
899 typedef struct _FILE_EA_INFORMATION {
900 ULONG EaSize;
901 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
902
903
904 typedef struct _FILE_GET_EA_INFORMATION {
905 ULONG NextEntryOffset;
906 UCHAR EaNameLength;
907 CHAR EaName[0];
908 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
909
910 typedef struct _FILE_STREAM_INFORMATION {
911 ULONG NextEntryOffset;
912 ULONG StreamNameLength;
913 LARGE_INTEGER StreamSize;
914 LARGE_INTEGER StreamAllocationSize;
915 WCHAR StreamName[0];
916 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
917
918 typedef struct _FILE_ALLOCATION_INFORMATION {
919 LARGE_INTEGER AllocationSize;
920 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
921
922 typedef struct _FILE_NAME_INFORMATION {
923 ULONG FileNameLength;
924 WCHAR FileName[0];
925 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
926
927 typedef struct _FILE_NAMES_INFORMATION
928 {
929 ULONG NextEntryOffset;
930 ULONG FileIndex;
931 ULONG FileNameLength;
932 WCHAR FileName[0];
933 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
934
935
936 typedef struct _FILE_RENAME_INFORMATION {
937 BOOLEAN Replace;
938 HANDLE RootDir;
939 ULONG FileNameLength;
940 WCHAR FileName[0];
941 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
942
943
944 typedef struct _FILE_INTERNAL_INFORMATION {
945 LARGE_INTEGER IndexNumber;
946 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
947
948 typedef struct _FILE_ACCESS_INFORMATION {
949 ACCESS_MASK AccessFlags;
950 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
951
952
953 typedef struct _FILE_MODE_INFORMATION {
954 ULONG Mode;
955 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
956
957 typedef struct _FILE_COMPRESSION_INFORMATION {
958 LARGE_INTEGER CompressedFileSize;
959 USHORT CompressionFormat;
960 UCHAR CompressionUnitShift;
961 UCHAR ChunkShift;
962 UCHAR ClusterShift;
963 UCHAR Reserved[3];
964 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
965
966 typedef struct _FILE_ALL_INFORMATION {
967 FILE_BASIC_INFORMATION BasicInformation;
968 FILE_STANDARD_INFORMATION StandardInformation;
969 FILE_INTERNAL_INFORMATION InternalInformation;
970 FILE_EA_INFORMATION EaInformation;
971 FILE_ACCESS_INFORMATION AccessInformation;
972 FILE_POSITION_INFORMATION PositionInformation;
973 FILE_MODE_INFORMATION ModeInformation;
974 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
975 FILE_NAME_INFORMATION NameInformation;
976 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
977
978 // file system information structures
979
980 typedef struct _FILE_FS_DEVICE_INFORMATION {
981 DEVICE_TYPE DeviceType;
982 ULONG Characteristics;
983 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
984
985
986 typedef struct _FILE_FS_VOLUME_INFORMATION {
987 TIME VolumeCreationTime;
988 ULONG VolumeSerialNumber;
989 ULONG VolumeLabelLength;
990 BOOLEAN SupportsObjects;
991 WCHAR VolumeLabel[0];
992 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
993
994 typedef struct _FILE_FS_SIZE_INFORMATION {
995 LARGE_INTEGER TotalAllocationUnits;
996 LARGE_INTEGER AvailableAllocationUnits;
997 ULONG SectorsPerAllocationUnit;
998 ULONG BytesPerSector;
999 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
1000
1001 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
1002 ULONG FileSystemAttributes;
1003 LONG MaximumComponentNameLength;
1004 ULONG FileSystemNameLength;
1005 WCHAR FileSystemName[0];
1006 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
1007
1008 /*
1009 FileSystemAttributes is one of the following values:
1010
1011 FILE_CASE_SENSITIVE_SEARCH 0x00000001
1012 FILE_CASE_PRESERVED_NAMES 0x00000002
1013 FILE_UNICODE_ON_DISK 0x00000004
1014 FILE_PERSISTENT_ACLS 0x00000008
1015 FILE_FILE_COMPRESSION 0x00000010
1016 FILE_VOLUME_QUOTAS 0x00000020
1017 FILE_VOLUME_IS_COMPRESSED 0x00008000
1018 */
1019 typedef struct _FILE_FS_LABEL_INFORMATION {
1020 ULONG VolumeLabelLength;
1021 WCHAR VolumeLabel[0];
1022 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
1023
1024 // read file scatter / write file scatter
1025 //FIXME I am a win32 struct aswell
1026
1027 typedef union _FILE_SEGMENT_ELEMENT {
1028 PVOID Buffer;
1029 ULONG Alignment;
1030 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
1031
1032 // directory information
1033
1034 typedef struct _OBJDIR_INFORMATION {
1035 UNICODE_STRING ObjectName;
1036 UNICODE_STRING ObjectTypeName; // Directory, Device ...
1037 UCHAR Data[0];
1038 } OBJDIR_INFORMATION, *POBJDIR_INFORMATION;
1039
1040
1041 typedef struct _FILE_DIRECTORY_INFORMATION {
1042 ULONG NextEntryOffset;
1043 ULONG FileIndex;
1044 TIME CreationTime;
1045 TIME LastAccessTime;
1046 TIME LastWriteTime;
1047 TIME ChangeTime;
1048 LARGE_INTEGER EndOfFile;
1049 LARGE_INTEGER AllocationSize;
1050 ULONG FileAttributes;
1051 ULONG FileNameLength;
1052 WCHAR FileName[0];
1053 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
1054
1055 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
1056 ULONG NextEntryOffset;
1057 ULONG FileIndex;
1058 TIME CreationTime;
1059 TIME LastAccessTime;
1060 TIME LastWriteTime;
1061 TIME ChangeTime;
1062 LARGE_INTEGER EndOfFile;
1063 LARGE_INTEGER AllocationSize;
1064 ULONG FileAttributes;
1065 ULONG FileNameLength;
1066 ULONG EaSize;
1067 WCHAR FileName[0]; // variable size
1068 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
1069 FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
1070
1071
1072 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
1073 ULONG NextEntryOffset;
1074 ULONG FileIndex;
1075 TIME CreationTime;
1076 TIME LastAccessTime;
1077 TIME LastWriteTime;
1078 TIME ChangeTime;
1079 LARGE_INTEGER EndOfFile;
1080 LARGE_INTEGER AllocationSize;
1081 ULONG FileAttributes;
1082 ULONG FileNameLength;
1083 ULONG EaSize;
1084 CHAR ShortNameLength;
1085 WCHAR ShortName[12]; // 8.3 name
1086 WCHAR FileName[0];
1087 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
1088 FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
1089
1090
1091 /*
1092 NotifyFilter / CompletionFilter:
1093
1094 FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
1095 FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
1096 FILE_NOTIFY_CHANGE_NAME 0x00000003
1097 FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
1098 FILE_NOTIFY_CHANGE_SIZE 0x00000008
1099 FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
1100 FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
1101 FILE_NOTIFY_CHANGE_CREATION 0x00000040
1102 FILE_NOTIFY_CHANGE_EA 0x00000080
1103 FILE_NOTIFY_CHANGE_SECURITY 0x00000100
1104 FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
1105 FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
1106 FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
1107 */
1108
1109 typedef struct _FILE_NOTIFY_INFORMATION {
1110 ULONG Action;
1111 ULONG FileNameLength;
1112 WCHAR FileName[0];
1113 } FILE_NOTIFY_INFORMATION;
1114
1115
1116 /*
1117 Action is one of the following values:
1118
1119 FILE_ACTION_ADDED 0x00000001
1120 FILE_ACTION_REMOVED 0x00000002
1121 FILE_ACTION_MODIFIED 0x00000003
1122 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
1123 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
1124 FILE_ACTION_ADDED_STREAM 0x00000006
1125 FILE_ACTION_REMOVED_STREAM 0x00000007
1126 FILE_ACTION_MODIFIED_STREAM 0x00000008
1127
1128 */
1129
1130
1131 //FIXME: I am a win32 object
1132 typedef
1133 VOID
1134 (*PTIMERAPCROUTINE)(
1135 LPVOID lpArgToCompletionRoutine,
1136 DWORD dwTimerLowValue,
1137 DWORD dwTimerHighValue
1138 );
1139
1140
1141 // File System Control commands ( related to defragging )
1142
1143 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
1144 #define FSCTL_GET_VOLUME_BITMAP 0x9006F
1145 #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
1146 #define FSCTL_MOVE_FILE 0x90074
1147
1148 typedef struct _MAPPING_PAIR
1149 {
1150 ULONGLONG Vcn;
1151 ULONGLONG Lcn;
1152 } MAPPING_PAIR, *PMAPPING_PAIR;
1153
1154 typedef struct _GET_RETRIEVAL_DESCRIPTOR
1155 {
1156 ULONG NumberOfPairs;
1157 ULONGLONG StartVcn;
1158 MAPPING_PAIR Pair[0]; // variable size
1159 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
1160
1161 typedef struct _BITMAP_DESCRIPTOR
1162 {
1163 ULONGLONG StartLcn;
1164 ULONGLONG ClustersToEndOfVol;
1165 BYTE Map[0]; // variable size
1166 } BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR;
1167
1168 typedef struct _MOVEFILE_DESCRIPTOR
1169 {
1170 HANDLE FileHandle;
1171 ULONG Reserved;
1172 LARGE_INTEGER StartVcn;
1173 LARGE_INTEGER TargetLcn;
1174 ULONG NumVcns;
1175 ULONG Reserved1;
1176 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
1177
1178
1179 // semaphore information
1180
1181 typedef struct _SEMAPHORE_BASIC_INFORMATION
1182 {
1183 ULONG CurrentCount;
1184 ULONG MaximumCount;
1185 } SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
1186
1187 // event information
1188
1189 typedef struct _EVENT_BASIC_INFORMATION
1190 {
1191 BOOL AutomaticReset;
1192 BOOL Signaled;
1193 } EVENT_BASIC_INFORMATION, *PEVENT_INFORMATION;
1194
1195 //typedef enum _TIMER_TYPE
1196 //{
1197 // NotificationTimer,
1198 // SynchronizationTimer
1199 //} TIMER_TYPE;
1200
1201 typedef
1202 struct _LPC_PORT_BASIC_INFORMATION
1203 {
1204 DWORD Unknown0;
1205 DWORD Unknown1;
1206 DWORD Unknown2;
1207 DWORD Unknown3;
1208 DWORD Unknown4;
1209 DWORD Unknown5;
1210 DWORD Unknown6;
1211 DWORD Unknown7;
1212 DWORD Unknown8;
1213 DWORD Unknown9;
1214 DWORD Unknown10;
1215 DWORD Unknown11;
1216 DWORD Unknown12;
1217 DWORD Unknown13;
1218
1219 } LPC_PORT_BASIC_INFORMATION, * PLPC_PORT_BASIC_INFORMATION;
1220
1221 #endif