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