branch update for HEAD-2003021201
[reactos.git] / include / ntos / zwtypes.h
1 #ifndef __INCLUDE_DDK_ZWTYPES_H
2 #define __INCLUDE_DDK_ZWTYPES_H
3
4 #ifndef __USE_W32API
5
6 typedef enum _DEBUG_CONTROL_CODE
7 {
8   DebugGetTraceInformation = 1,
9   DebugSetInternalBreakpoint,
10   DebugSetSpecialCalls,
11   DebugClearSpecialCalls,
12   DebugQuerySpecialCalls,
13   DebugDbgBreakPoint,
14   DebugDbgLoadSymbols
15 } DEBUG_CONTROL_CODE;
16
17 typedef enum _KPROFILE_SOURCE
18 {
19   ProfileTime
20 } KPROFILE_SOURCE;
21
22 // file disposition values
23
24 #define FILE_SUPERSEDE                  0x0000
25 #define FILE_OPEN                       0x0001
26 #define FILE_CREATE                     0x0002
27 #define FILE_OPEN_IF                    0x0003
28 #define FILE_OVERWRITE                  0x0004
29 #define FILE_OVERWRITE_IF               0x0005
30 #define FILE_MAXIMUM_DISPOSITION        0x0005
31
32 // job query / set information class
33
34 typedef enum _JOBOBJECTINFOCLASS {               // Q S
35     JobObjectBasicAccountingInformation = 1,     // Y N
36     JobObjectBasicLimitInformation,              // Y Y
37     JobObjectBasicProcessIdList,                 // Y N
38     JobObjectBasicUIRestrictions,                // Y Y
39     JobObjectSecurityLimitInformation,           // Y Y
40     JobObjectEndOfJobTimeInformation,            // N Y
41     JobObjectAssociateCompletionPortInformation, // N Y
42     JobObjectBasicAndIoAccountingInformation,    // Y N
43     JobObjectExtendedLimitInformation,           // Y Y
44 } JOBOBJECTINFOCLASS;
45
46 // system information
47 // {Nt|Zw}{Query|Set}SystemInformation
48 // (GN means Gary Nebbet in "NT/W2K Native API Reference")
49
50 typedef
51 enum _SYSTEM_INFORMATION_CLASS
52 {
53         SystemInformationClassMin               = 0,
54         SystemBasicInformation                  = 0,    /* Q */
55         
56         SystemProcessorInformation              = 1,    /* Q */
57         
58         SystemPerformanceInformation            = 2,    /* Q */
59         
60         SystemTimeOfDayInformation              = 3,    /* Q */
61         
62         SystemPathInformation                   = 4,    /* Q (checked build only) */
63         SystemNotImplemented1                   = 4,    /* Q (GN) */
64         
65         SystemProcessInformation                = 5,    /* Q */
66         SystemProcessesAndThreadsInformation    = 5,    /* Q (GN) */
67         
68         SystemCallCountInfoInformation          = 6,    /* Q */
69         SystemCallCounts                        = 6,    /* Q (GN) */
70         
71         SystemDeviceInformation                 = 7,    /* Q */
72 // It conflicts with symbol in ntoskrnl/io/resource.c
73 //      SystemConfigurationInformation          = 7,    /* Q (GN) */
74         
75         SystemProcessorPerformanceInformation   = 8,    /* Q */
76         SystemProcessorTimes                    = 8,    /* Q (GN) */
77         
78         SystemFlagsInformation                  = 9,    /* QS */
79         SystemGlobalFlag                        = 9,    /* QS (GN) */
80         
81         SystemCallTimeInformation               = 10,
82         SystemNotImplemented2                   = 10,   /* (GN) */
83         
84         SystemModuleInformation                 = 11,   /* Q */
85         
86         SystemLocksInformation                  = 12,   /* Q */
87         SystemLockInformation                   = 12,   /* Q (GN) */
88         
89         SystemStackTraceInformation             = 13,
90         SystemNotImplemented3                   = 13,   /* Q (GN) */
91         
92         SystemPagedPoolInformation              = 14,
93         SystemNotImplemented4                   = 14,   /* Q (GN) */
94         
95         SystemNonPagedPoolInformation           = 15,
96         SystemNotImplemented5                   = 15,   /* Q (GN) */
97         
98         SystemHandleInformation                 = 16,   /* Q */
99         
100         SystemObjectInformation                 = 17,   /* Q */
101         
102         SystemPageFileInformation               = 18,   /* Q */
103         SystemPagefileInformation               = 18,   /* Q (GN) */
104         
105         SystemVdmInstemulInformation            = 19,   /* Q */
106         SystemInstructionEmulationCounts        = 19,   /* Q (GN) */
107         
108         SystemVdmBopInformation                 = 20,
109         SystemInvalidInfoClass1                 = 20,   /* (GN) */
110         
111         SystemFileCacheInformation              = 21,   /* QS */
112         SystemCacheInformation                  = 21,   /* QS (GN) */
113         
114         SystemPoolTagInformation                = 22,   /* Q (checked build only) */
115         
116         SystemInterruptInformation              = 23,   /* Q */
117         SystemProcessorStatistics               = 23,   /* Q (GN) */
118         
119         SystemDpcBehaviourInformation           = 24,   /* QS */
120         SystemDpcInformation                    = 24,   /* QS (GN) */
121         
122         SystemFullMemoryInformation             = 25,
123         SystemNotImplemented6                   = 25,   /* (GN) */
124         
125         SystemLoadImage                         = 26,   /* S (callable) (GN) */
126         
127         SystemUnloadImage                       = 27,   /* S (callable) (GN) */
128         
129         SystemTimeAdjustmentInformation         = 28,   /* QS */
130         SystemTimeAdjustment                    = 28,   /* QS (GN) */
131         
132         SystemSummaryMemoryInformation          = 29,
133         SystemNotImplemented7                   = 29,   /* (GN) */
134         
135         SystemNextEventIdInformation            = 30,
136         SystemNotImplemented8                   = 30,   /* (GN) */
137         
138         SystemEventIdsInformation               = 31,
139         SystemNotImplemented9                   = 31,   /* (GN) */
140         
141         SystemCrashDumpInformation              = 32,   /* Q */
142         
143         SystemExceptionInformation              = 33,   /* Q */
144         
145         SystemCrashDumpStateInformation         = 34,   /* Q */
146         
147         SystemKernelDebuggerInformation         = 35,   /* Q */
148         
149         SystemContextSwitchInformation          = 36,   /* Q */
150         
151         SystemRegistryQuotaInformation          = 37,   /* QS */
152         
153         SystemLoadAndCallImage                  = 38,   /* S (GN) */
154         
155         SystemPrioritySeparation                = 39,   /* S */
156         
157         SystemPlugPlayBusInformation            = 40,
158         SystemNotImplemented10                  = 40,   /* Q (GN) */
159         
160         SystemDockInformation                   = 41,
161         SystemNotImplemented11                  = 41,   /* Q (GN) */
162         
163         SystemPowerInformation                  = 42,
164         SystemInvalidInfoClass2                 = 42,   /* (GN) */
165         
166         SystemProcessorSpeedInformation         = 43,
167         SystemInvalidInfoClass3                 = 43,   /* (GN) */
168         
169         SystemCurrentTimeZoneInformation        = 44,   /* QS */
170         SystemTimeZoneInformation               = 44,   /* QS (GN) */
171         
172         SystemLookasideInformation              = 45,   /* Q */
173         
174         SystemSetTimeSlipEvent                  = 46,   /* S (GN) */
175         
176         SystemCreateSession                     = 47,   /* S (GN) */
177         
178         SystemDeleteSession                     = 48,   /* S (GN) */
179         
180         SystemInvalidInfoClass4                 = 49,   /* (GN) */
181         
182         SystemRangeStartInformation             = 50,   /* Q (GN) */
183         
184         SystemVerifierInformation               = 51,   /* QS (GN) */
185         
186         SystemAddVerifier                       = 52,   /* S (GN) */
187         
188         SystemSessionProcessesInformation       = 53,   /* Q (GN) */
189         SystemInformationClassMax
190
191 } SYSTEM_INFORMATION_CLASS;
192
193 // SystemBasicInformation (0)
194 typedef
195 struct _SYSTEM_BASIC_INFORMATION
196 {
197         ULONG           Reserved;
198         ULONG           TimerResolution;
199         ULONG           PageSize;
200         ULONG           NumberOfPhysicalPages;
201         ULONG           LowestPhysicalPageNumber;
202         ULONG           HighestPhysicalPageNumber;
203         ULONG           AllocationGranularity;
204         ULONG           MinimumUserModeAddress;
205         ULONG           MaximumUserModeAddress;
206         KAFFINITY       ActiveProcessorsAffinityMask;
207         CCHAR           NumberOfProcessors;
208 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
209
210 // SystemProcessorInformation (1)
211 typedef
212 struct _SYSTEM_PROCESSOR_INFORMATION
213 {
214         USHORT  ProcessorArchitecture;
215         USHORT  ProcessorLevel;
216         USHORT  ProcessorRevision;
217         USHORT  Reserved;
218         ULONG   ProcessorFeatureBits;
219 } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
220
221 // SystemPerformanceInfo (2)
222 typedef
223 struct _SYSTEM_PERFORMANCE_INFORMATION
224 {
225         LARGE_INTEGER   IdleProcessorTime;
226         LARGE_INTEGER   IoReadTransferCount;
227         LARGE_INTEGER   IoWriteTransferCount;
228         LARGE_INTEGER   IoOtherTransferCount;
229         ULONG           IoReadOperationCount;
230         ULONG           IoWriteOperationCount;
231         ULONG           IoOtherOperationCount;
232         ULONG           AvailablePages;
233         ULONG           CommitedPages;
234         ULONG           CommitLimit;
235         ULONG           PeakCommitment;
236         ULONG           PageFaultCount;
237         ULONG           CopyOnWriteCount;
238         ULONG           TransitionCount;
239         ULONG           CacheTransitionCount;
240         ULONG           DemandZeroCount;
241         ULONG           PageReadCount;
242         ULONG           PageReadIoCount;
243         ULONG           CacheReadCount;
244         ULONG           CacheIoCount;
245         ULONG           DirtyPagesWriteCount;
246         ULONG           DirtyWriteIoCount;
247         ULONG           MappedPagesWriteCount;
248         ULONG           MappedWriteIoCount;
249         ULONG           PagedPoolPages;
250         ULONG           NonPagedPoolPages;
251         ULONG           Unknown6;
252         ULONG           Unknown7;
253         ULONG           Unknown8;
254         ULONG           Unknown9;
255         ULONG           MmTotalSystemFreePtes;
256         ULONG           MmSystemCodepage;
257         ULONG           MmTotalSystemDriverPages;
258         ULONG           MmTotalSystemCodePages;
259         ULONG           Unknown10;
260         ULONG           Unknown11;
261         ULONG           Unknown12;
262         ULONG           MmSystemCachePage;
263         ULONG           MmPagedPoolPage;
264         ULONG           MmSystemDriverPage;
265         ULONG           CcFastReadNoWait;
266         ULONG           CcFastReadWait;
267         ULONG           CcFastReadResourceMiss;
268         ULONG           CcFastReadNotPossible;
269         ULONG           CcFastMdlReadNoWait;
270         ULONG           CcFastMdlReadWait;
271         ULONG           CcFastMdlReadResourceMiss;
272         ULONG           CcFastMdlReadNotPossible;
273         ULONG           CcMapDataNoWait;
274         ULONG           CcMapDataWait;
275         ULONG           CcMapDataNoWaitMiss;
276         ULONG           CcMapDataWaitMiss;
277         ULONG           CcPinMappedDataCount;
278         ULONG           CcPinReadNoWait;
279         ULONG           CcPinReadWait;
280         ULONG           CcPinReadNoWaitMiss;
281         ULONG           CcPinReadWaitMiss;
282         ULONG           CcCopyReadNoWait;
283         ULONG           CcCopyReadWait;
284         ULONG           CcCopyReadNoWaitMiss;
285         ULONG           CcCopyReadWaitMiss;
286         ULONG           CcMdlReadNoWait;
287         ULONG           CcMdlReadWait;
288         ULONG           CcMdlReadNoWaitMiss;
289         ULONG           CcMdlReadWaitMiss;
290         ULONG           CcReadaheadIos;
291         ULONG           CcLazyWriteIos;
292         ULONG           CcLazyWritePages;
293         ULONG           CcDataFlushes;
294         ULONG           CcDataPages;
295         ULONG           ContextSwitches;
296         ULONG           Unknown13;
297         ULONG           Unknown14;
298         ULONG           SystemCalls;
299
300 } SYSTEM_PERFORMANCE_INFO, *PSYSTEM_PERFORMANCE_INFO;
301
302 // SystemModuleInformation (11)
303 typedef
304 struct _SYSTEM_MODULE_ENTRY
305 {
306         ULONG   Unknown1;
307         ULONG   Unknown2;
308         PVOID   BaseAddress;
309         ULONG   Size;
310         ULONG   Flags;
311         ULONG   EntryIndex;
312         USHORT  NameLength; /* Length of module name not including the path, this field contains valid value only for NTOSKRNL module*/
313         USHORT  PathLength; /* Length of 'directory path' part of modulename*/
314         CHAR    Name [256];
315 } SYSTEM_MODULE_ENTRY, * PSYSTEM_MODULE_ENTRY;
316
317 typedef
318 struct _SYSTEM_MODULE_INFORMATION
319 {
320         ULONG                   Count;
321         SYSTEM_MODULE_ENTRY     Module [1];
322 } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
323
324 // SystemHandleInformation (16)
325 // (see ontypes.h)
326 typedef
327 struct _SYSTEM_HANDLE_ENTRY
328 {
329         ULONG   OwnerPid;
330         BYTE    ObjectType;
331         BYTE    HandleFlags;
332         USHORT  HandleValue;
333         PVOID   ObjectPointer;
334         ULONG   AccessMask;
335         
336 } SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
337
338 typedef
339 struct _SYSTEM_HANDLE_INFORMATION
340 {
341         ULONG                   Count;
342         SYSTEM_HANDLE_ENTRY     Handle [1];
343         
344 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
345
346 // SystemObjectInformation (17)
347 typedef
348 struct _SYSTEM_OBJECT_TYPE_INFORMATION
349 {
350         ULONG           NextEntryOffset;
351         ULONG           ObjectCount;
352         ULONG           HandleCount;
353         ULONG           TypeNumber;
354         ULONG           InvalidAttributes;
355         GENERIC_MAPPING GenericMapping;
356         ACCESS_MASK     ValidAccessMask;
357         POOL_TYPE       PoolType;
358         UCHAR           Unknown;
359         UNICODE_STRING  Name;
360         
361 } SYSTEM_OBJECT_TYPE_INFORMATION, *PSYSTEM_OBJECT_TYPE_INFORMATION;
362
363 typedef
364 struct _SYSTEM_OBJECT_INFORMATION
365 {
366         ULONG                   NextEntryOffset;
367         PVOID                   Object;
368         ULONG                   CreatorProcessId;
369         USHORT                  Unknown;
370         USHORT                  Flags;
371         ULONG                   PointerCount;
372         ULONG                   HandleCount;
373         ULONG                   PagedPoolUsage;
374         ULONG                   NonPagedPoolUsage;
375         ULONG                   ExclusiveProcessId;
376         PSECURITY_DESCRIPTOR    SecurityDescriptor;
377         UNICODE_STRING          Name;
378
379 } SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION;
380
381 // SystemPageFileInformation (18)
382 typedef
383 struct _SYSTEM_PAGEFILE_INFORMATION
384 {
385         ULONG           RelativeOffset;
386         ULONG           CurrentSizePages;
387         ULONG           TotalUsedPages;
388         ULONG           PeakUsedPages;
389         UNICODE_STRING  PagefileFileName;
390         
391 } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
392
393 // SystemCacheInformation (21)
394 typedef
395 struct _SYSTEM_CACHE_INFORMATION
396 {
397         ULONG   CurrentSize;
398         ULONG   PeakSize;
399         ULONG   PageFaultCount;
400         ULONG   MinimumWorkingSet;
401         ULONG   MaximumWorkingSet;
402         ULONG   Unused[4];
403
404 } SYSTEM_CACHE_INFORMATION;
405
406 // SystemDpcInformation (24)
407 typedef
408 struct _SYSTEM_DPC_INFORMATION
409 {
410         ULONG   Unused;
411         ULONG   KiMaximumDpcQueueDepth;
412         ULONG   KiMinimumDpcRate;
413         ULONG   KiAdjustDpcThreshold;
414         ULONG   KiIdealDpcRate;
415
416 } SYSTEM_DPC_INFORMATION, *PSYSTEM_DPC_INFORMATION;
417
418 // SystemLoadImage (26)
419 typedef struct _SYSTEM_LOAD_IMAGE
420 {
421   UNICODE_STRING ModuleName;
422   PVOID ModuleBase;
423   PVOID SectionPointer;
424   PVOID EntryPoint;
425   PVOID ExportDirectory;
426 } SYSTEM_LOAD_IMAGE, *PSYSTEM_LOAD_IMAGE;
427
428 // SystemUnloadImage (27)
429 typedef struct _SYSTEM_UNLOAD_IMAGE
430 {
431   PVOID ModuleBase;
432 } SYSTEM_UNLOAD_IMAGE, *PSYSTEM_UNLOAD_IMAGE;
433
434 // SystemTimeAdjustmentInformation (28)
435 typedef
436 struct _SYSTEM_QUERY_TIME_ADJUSTMENT
437 {
438         ULONG   TimeAdjustment;
439         ULONG   MaximumIncrement;
440         BOOLEAN TimeSynchronization;
441
442 } SYSTEM_QUERY_TIME_ADJUSTMENT, *PSYSTEM_QUERY_TIME_ADJUSTMENT;
443
444 typedef
445 struct _SYSTEM_SET_TIME_ADJUSTMENT
446 {
447         ULONG   TimeAdjustment;
448         BOOLEAN TimeSynchronization;
449         
450 } SYSTEM_TIME_ADJUSTMENT_INFO, *PSYSTEM_TIME_ADJUSTMENT_INFO;
451
452 // atom information
453
454 typedef enum _ATOM_INFORMATION_CLASS
455 {
456    AtomBasicInformation         = 0,
457    AtomTableInformation         = 1,
458 } ATOM_INFORMATION_CLASS;
459
460 typedef struct _ATOM_BASIC_INFORMATION
461 {
462    USHORT UsageCount;
463    USHORT Flags;
464    USHORT NameLength;
465    WCHAR Name[1];
466 } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
467
468 // SystemLoadAndCallImage(38)
469 typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE
470 {
471   UNICODE_STRING ModuleName;
472 } SYSTEM_LOAD_AND_CALL_IMAGE, *PSYSTEM_LOAD_AND_CALL_IMAGE;
473
474 // SystemTimeZoneInformation (44)
475 typedef
476 struct _SYSTEM_TIME_ZONE_INFORMATION
477 {
478         LONG    Bias;
479         WCHAR   StandardName [32];
480         TIME    StandardDate;
481         LONG    StandardBias;
482         WCHAR   DaylightName [32];
483         TIME    DaylightDate;
484         LONG    DaylightBias;
485
486 } SYSTEM_TIME_ZONE_INFORMATION, * PSYSTEM_TIME_ZONE_INFORMATION;
487
488 // SystemLookasideInformation (45)
489 typedef
490 struct _SYSTEM_LOOKASIDE_INFORMATION
491 {
492         USHORT          Depth;
493         USHORT          MaximumDepth;
494         ULONG           TotalAllocates;
495         ULONG           AllocatesMisses;
496         ULONG           TotalFrees;
497         ULONG           FreeMisses;
498         POOL_TYPE       Type;
499         ULONG           Tag;
500         ULONG           Size;
501         
502 } SYSTEM_LOOKASIDE_INFORMATION, * PSYSTEM_LOOKASIDE_INFORMATION;
503
504 // SystemSetTimeSlipEvent (46)
505 typedef
506 struct _SYSTEM_SET_TIME_SLIP_EVENT
507 {
508         HANDLE  TimeSlipEvent; /* IN */
509
510 } SYSTEM_SET_TIME_SLIP_EVENT, * PSYSTEM_SET_TIME_SLIP_EVENT;
511
512 // SystemCreateSession (47)
513 // (available only on TSE/NT5+)
514 typedef
515 struct _SYSTEM_CREATE_SESSION
516 {
517         ULONG   SessionId; /* OUT */
518
519 } SYSTEM_CREATE_SESSION, * PSYSTEM_CREATE_SESSION;
520
521 // SystemDeleteSession (48)
522 // (available only on TSE/NT5+)
523 typedef
524 struct _SYSTEM_DELETE_SESSION
525 {
526         ULONG   SessionId; /* IN */
527
528 } SYSTEM_DELETE_SESSION, * PSYSTEM_DELETE_SESSION;
529
530 // SystemRangeStartInformation (50)
531 typedef
532 struct _SYSTEM_RANGE_START_INFORMATION
533 {
534         PVOID   SystemRangeStart;
535
536 } SYSTEM_RANGE_START_INFORMATION, * PSYSTEM_RANGE_START_INFORMATION;
537
538 // SystemSessionProcessesInformation (53)
539 // (available only on TSE/NT5+)
540 typedef
541 struct _SYSTEM_SESSION_PROCESSES_INFORMATION
542 {
543         ULONG   SessionId;
544         ULONG   BufferSize;
545         PVOID   Buffer; /* same format as in SystemProcessInformation */
546
547 } SYSTEM_SESSION_PROCESSES_INFORMATION, * PSYSTEM_SESSION_PROCESSES_INFORMATION;
548
549 // memory information
550
551 typedef enum _MEMORY_INFORMATION_CLASS {
552  MemoryBasicInformation,
553  MemoryWorkingSetList,
554  MemorySectionName //,
555  //MemoryBasicVlmInformation //???
556 } MEMORY_INFORMATION_CLASS;
557
558 typedef struct _MEMORY_BASIC_INFORMATION { // Information Class 0
559  PVOID BaseAddress;
560  PVOID AllocationBase;
561  ULONG AllocationProtect;
562  ULONG RegionSize;
563  ULONG State;
564  ULONG Protect;
565  ULONG Type;
566 } MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;
567
568 typedef struct _MEMORY_WORKING_SET_LIST { // Information Class 1
569  ULONG NumberOfPages;
570  ULONG WorkingSetList[1];
571 } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
572
573 // Information Class 2
574 #define _MEMORY_SECTION_NAME_STATIC(__bufsize__) \
575  { \
576  UNICODE_STRING SectionFileName; \
577  WCHAR          NameBuffer[(__bufsize__)]; \
578
579
580 #define MEMORY_SECTION_NAME_STATIC(__bufsize__) \
581  struct _MEMORY_SECTION_NAME_STATIC((__bufsize__) 
582
583 typedef struct _MEMORY_SECTION_NAME_STATIC(ANYSIZE_ARRAY)
584  MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
585
586 // Information class 0
587 typedef struct _PROCESS_BASIC_INFORMATION
588 {
589         NTSTATUS ExitStatus;
590         PPEB PebBaseAddress;
591         KAFFINITY AffinityMask;
592         KPRIORITY BasePriority;
593         ULONG UniqueProcessId;
594         ULONG InheritedFromUniqueProcessId;
595 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
596
597 // Information class 1
598 typedef struct _QUOTA_LIMITS
599 {
600         ULONG PagedPoolLimit;
601         ULONG NonPagedPoolLimit;
602         ULONG MinimumWorkingSetSize;
603         ULONG MaximumWorkingSetSize;
604         ULONG PagefileLimit;
605         TIME TimeLimit;
606 } QUOTA_LIMITS, *PQUOTA_LIMITS;
607
608 // Information class 2
609 typedef struct _IO_COUNTERS
610 {
611         ULONG ReadOperationCount;
612         ULONG WriteOperationCount;
613         ULONG OtherOperationCount;
614         LARGE_INTEGER ReadTransferCount;
615         LARGE_INTEGER WriteTransferCount;
616         LARGE_INTEGER OtherTransferCount;
617 } IO_COUNTERS, *PIO_COUNTERS;
618
619 // Information class 3
620 typedef struct _VM_COUNTERS_
621 {
622         ULONG PeakVirtualSize;
623         ULONG VirtualSize;
624         ULONG PageFaultCount;
625         ULONG PeakWorkingSetSize;
626         ULONG WorkingSetSize;
627         ULONG QuotaPeakPagedPoolUsage;
628         ULONG QuotaPagedPoolUsage;
629         ULONG QuotaPeakNonPagedPoolUsage;
630         ULONG QuotaNonPagedPoolUsage;
631         ULONG PagefileUsage;
632         ULONG PeakPagefileUsage;
633 } VM_COUNTERS, *PVM_COUNTERS;
634
635 // Information class 4
636 typedef struct _KERNEL_USER_TIMES
637 {
638         TIME CreateTime;
639         TIME ExitTime;
640         TIME KernelTime;
641         TIME UserTime;
642 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
643
644 // Information class 9
645 typedef struct _PROCESS_ACCESS_TOKEN
646 {
647         HANDLE Token;
648         HANDLE Thread;
649 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
650
651 // Information class 14 
652 typedef struct _POOLED_USAGE_AND_LIMITS_
653 {
654         ULONG PeakPagedPoolUsage;
655         ULONG PagedPoolUsage;
656         ULONG PagedPoolLimit;
657         ULONG PeakNonPagedPoolUsage;
658         ULONG NonPagedPoolUsage;
659         ULONG NonPagedPoolLimit;
660         ULONG PeakPagefileUsage;
661         ULONG PagefileUsage;
662         ULONG PagefileLimit;
663 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
664
665 // Information class 15
666 typedef struct _PROCESS_WS_WATCH_INFORMATION
667 {
668         PVOID FaultingPc;
669         PVOID FaultingVa;
670 } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
671
672 // Information class 18
673 typedef struct _PROCESS_PRIORITY_CLASS
674 {
675         BOOLEAN Foreground;
676         UCHAR   PriorityClass;
677 } PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;
678
679 // Information class 23
680 typedef struct _PROCESS_DEVICEMAP_INFORMATION
681 {
682         union {
683                 struct {
684                         HANDLE DirectoryHandle;
685                 } Set;
686                 struct {
687                         ULONG DriveMap;
688                         UCHAR DriveType[32];
689                 } Query;
690         };
691 } PROCESS_DEVICEMAP_INFORMATION, *pPROCESS_DEVICEMAP_INFORMATION;
692
693 // Information class 24
694 typedef struct _PROCESS_SESSION_INFORMATION
695 {
696         ULONG SessionId;
697 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
698
699 // thread information
700
701 // incompatible with MS NT
702
703 typedef struct _THREAD_BASIC_INFORMATION
704 {
705   NTSTATUS  ExitStatus;
706   PVOID     TebBaseAddress;     // PNT_TIB (GN)
707   CLIENT_ID ClientId;
708   KAFFINITY AffinityMask;
709   KPRIORITY Priority;
710   KPRIORITY BasePriority;
711 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
712
713 // object information
714
715 typedef struct _OBJECT_NAME_INFORMATION
716 {
717         UNICODE_STRING  Name;
718 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
719
720 // file information
721
722 typedef struct _FILE_BASIC_INFORMATION
723 {
724         TIME CreationTime;
725         TIME LastAccessTime;
726         TIME LastWriteTime;
727         TIME ChangeTime;
728         ULONG FileAttributes;
729 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
730
731 typedef struct _FILE_STANDARD_INFORMATION
732 {
733         LARGE_INTEGER AllocationSize;
734         LARGE_INTEGER EndOfFile;
735         ULONG NumberOfLinks;
736         BOOLEAN DeletePending;
737         BOOLEAN Directory;
738 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
739
740 typedef struct _FILE_POSITION_INFORMATION
741 {
742         LARGE_INTEGER CurrentByteOffset;
743 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
744
745 typedef struct _FILE_ALIGNMENT_INFORMATION
746 {
747         ULONG AlignmentRequirement;
748 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
749
750 typedef struct _FILE_DISPOSITION_INFORMATION
751 {
752         BOOLEAN DoDeleteFile;
753 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
754
755 typedef struct _FILE_END_OF_FILE_INFORMATION
756 {
757         LARGE_INTEGER EndOfFile;
758 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
759
760 typedef struct _FILE_NETWORK_OPEN_INFORMATION
761 {
762         TIME CreationTime;
763         TIME LastAccessTime;
764         TIME LastWriteTime;
765         TIME ChangeTime;
766         LARGE_INTEGER AllocationSize;
767         LARGE_INTEGER EndOfFile;
768         ULONG FileAttributes;
769 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
770
771 typedef struct _FILE_FULL_EA_INFORMATION
772 {
773         ULONG NextEntryOffset;
774         UCHAR Flags;
775         UCHAR EaNameLength;
776         USHORT EaValueLength;
777         CHAR  EaName[0];
778 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
779
780
781 typedef struct _FILE_EA_INFORMATION {
782         ULONG EaSize;
783 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
784
785
786 typedef struct _FILE_GET_EA_INFORMATION {
787         ULONG NextEntryOffset;
788         UCHAR EaNameLength;
789         CHAR EaName[0];
790 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
791
792 typedef struct _FILE_STREAM_INFORMATION {
793         ULONG NextEntryOffset;
794         ULONG StreamNameLength;
795         LARGE_INTEGER StreamSize;
796         LARGE_INTEGER StreamAllocationSize;
797         WCHAR StreamName[0];
798 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
799
800 typedef struct _FILE_ALLOCATION_INFORMATION {
801         LARGE_INTEGER AllocationSize;
802 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
803
804 typedef struct _FILE_NAME_INFORMATION {
805         ULONG FileNameLength;
806         WCHAR FileName[0];
807 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
808
809 typedef struct _FILE_NAMES_INFORMATION 
810 {
811         ULONG NextEntryOffset;
812         ULONG FileIndex;
813         ULONG FileNameLength;
814         WCHAR FileName[0];
815 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
816
817
818 typedef struct _FILE_RENAME_INFORMATION {
819         BOOLEAN Replace;
820         HANDLE RootDir;
821         ULONG FileNameLength;
822         WCHAR FileName[0];
823 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
824
825
826 typedef struct _FILE_INTERNAL_INFORMATION {
827         LARGE_INTEGER IndexNumber;
828 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
829
830 typedef struct _FILE_ACCESS_INFORMATION {
831         ACCESS_MASK AccessFlags;
832 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
833
834
835 typedef struct _FILE_MODE_INFORMATION {
836         ULONG Mode;
837 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
838
839
840 typedef struct _FILE_PIPE_INFORMATION {
841         ULONG ReadMode;
842         ULONG CompletionMode;
843 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
844
845 typedef struct _FILE_PIPE_LOCAL_INFORMATION {
846         ULONG NamedPipeType;
847         ULONG NamedPipeConfiguration;
848         ULONG MaximumInstances;
849         ULONG CurrentInstances;
850         ULONG InboundQuota;
851         ULONG ReadDataAvailable;
852         ULONG OutboundQuota;
853         ULONG WriteQuotaAvailable;
854         ULONG NamedPipeState;
855         ULONG NamedPipeEnd;
856 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
857
858 typedef struct _FILE_PIPE_REMOTE_INFORMATION {
859         LARGE_INTEGER CollectDataTime;
860         ULONG MaximumCollectionCount;
861 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
862
863 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
864         ULONG MaxMessageSize;
865         ULONG Unknown; /* ?? */
866         ULONG NextSize;
867         ULONG MessageCount;
868         LARGE_INTEGER Timeout;
869 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
870
871 typedef struct _FILE_MAILSLOT_SET_INFORMATION {
872         LARGE_INTEGER Timeout;
873 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
874
875 typedef struct _FILE_COMPRESSION_INFORMATION {
876         LARGE_INTEGER CompressedFileSize;
877         USHORT CompressionFormat;
878         UCHAR CompressionUnitShift;
879         UCHAR ChunkShift;
880         UCHAR ClusterShift;
881         UCHAR Reserved[3];
882 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
883
884 typedef struct _FILE_ALL_INFORMATION {
885         FILE_BASIC_INFORMATION BasicInformation;
886         FILE_STANDARD_INFORMATION StandardInformation;
887         FILE_INTERNAL_INFORMATION InternalInformation;
888         FILE_EA_INFORMATION EaInformation;
889         FILE_ACCESS_INFORMATION AccessInformation;
890         FILE_POSITION_INFORMATION PositionInformation;
891         FILE_MODE_INFORMATION ModeInformation;
892         FILE_ALIGNMENT_INFORMATION AlignmentInformation;
893         FILE_NAME_INFORMATION NameInformation;
894 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
895
896
897 // file system information structures
898
899 typedef struct _FILE_FS_DEVICE_INFORMATION {
900         DEVICE_TYPE DeviceType;
901         ULONG Characteristics;
902 } FILE_FS_DEVICE_INFORMATION,  *PFILE_FS_DEVICE_INFORMATION;
903
904
905 typedef struct _FILE_FS_VOLUME_INFORMATION {
906         TIME VolumeCreationTime;
907         ULONG VolumeSerialNumber;
908         ULONG VolumeLabelLength;
909         BOOLEAN SupportsObjects;
910         WCHAR VolumeLabel[0];
911 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
912
913 typedef struct _FILE_FS_SIZE_INFORMATION {
914         LARGE_INTEGER TotalAllocationUnits;
915         LARGE_INTEGER AvailableAllocationUnits;
916         ULONG SectorsPerAllocationUnit;
917         ULONG BytesPerSector;
918 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
919
920 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
921         ULONG FileSystemAttributes;
922         LONG MaximumComponentNameLength;
923         ULONG FileSystemNameLength;
924         WCHAR FileSystemName[0];
925 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
926
927 /*
928         FileSystemAttributes is one of the following values:
929
930         FILE_CASE_SENSITIVE_SEARCH      0x00000001
931         FILE_CASE_PRESERVED_NAMES       0x00000002
932         FILE_UNICODE_ON_DISK            0x00000004
933         FILE_PERSISTENT_ACLS            0x00000008
934         FILE_FILE_COMPRESSION           0x00000010
935         FILE_VOLUME_QUOTAS              0x00000020
936         FILE_VOLUME_IS_COMPRESSED       0x00008000
937 */
938 typedef struct _FILE_FS_LABEL_INFORMATION {
939         ULONG VolumeLabelLength;
940         WCHAR VolumeLabel[0];
941 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
942
943 // read file scatter / write file scatter
944 //FIXME I am a win32 struct aswell
945
946 typedef union _FILE_SEGMENT_ELEMENT {
947         PVOID Buffer;
948         ULONG Alignment;
949 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
950
951 typedef struct _FILE_DIRECTORY_INFORMATION {
952         ULONG   NextEntryOffset;
953         ULONG   FileIndex;
954         TIME CreationTime;
955         TIME LastAccessTime;
956         TIME LastWriteTime;
957         TIME ChangeTime;
958         LARGE_INTEGER EndOfFile;
959         LARGE_INTEGER AllocationSize;
960         ULONG FileAttributes;
961         ULONG FileNameLength;
962         WCHAR FileName[0];
963 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
964
965 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
966         ULONG   NextEntryOffset;
967         ULONG   FileIndex;
968         TIME CreationTime;
969         TIME LastAccessTime;
970         TIME LastWriteTime;
971         TIME ChangeTime;
972         LARGE_INTEGER EndOfFile;
973         LARGE_INTEGER AllocationSize;
974         ULONG FileAttributes;
975         ULONG FileNameLength;
976         ULONG EaSize;
977         WCHAR FileName[0]; // variable size
978 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
979   FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
980
981
982 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
983         ULONG           NextEntryOffset;
984         ULONG           FileIndex;
985         TIME            CreationTime;
986         TIME            LastAccessTime;
987         TIME            LastWriteTime;
988         TIME            ChangeTime;
989         LARGE_INTEGER   EndOfFile;
990         LARGE_INTEGER   AllocationSize;
991         ULONG           FileAttributes;
992         ULONG           FileNameLength;
993         ULONG           EaSize;
994         CHAR            ShortNameLength;
995         WCHAR           ShortName[12]; // 8.3 name
996         WCHAR           FileName[0];
997 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
998   FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
999
1000 typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
1001         ULONG NextEntryOffset;
1002         ULONG FileIndex;
1003         LARGE_INTEGER CreationTime;
1004         LARGE_INTEGER LastAccessTime;
1005         LARGE_INTEGER LastWriteTime;
1006         LARGE_INTEGER ChangeTime;
1007         LARGE_INTEGER EndOfFile;
1008         LARGE_INTEGER AllocationSize;
1009         ULONG FileAttributes;
1010         ULONG FileNameLength;
1011         ULONG EaSize;
1012         CCHAR ShortNameLength;
1013         WCHAR ShortName[12];
1014         LARGE_INTEGER FileId;
1015         WCHAR FileName[1];
1016 } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
1017
1018 /*
1019         NotifyFilter / CompletionFilter:
1020
1021         FILE_NOTIFY_CHANGE_FILE_NAME        0x00000001
1022         FILE_NOTIFY_CHANGE_DIR_NAME         0x00000002
1023         FILE_NOTIFY_CHANGE_NAME             0x00000003
1024         FILE_NOTIFY_CHANGE_ATTRIBUTES       0x00000004
1025         FILE_NOTIFY_CHANGE_SIZE             0x00000008
1026         FILE_NOTIFY_CHANGE_LAST_WRITE       0x00000010
1027         FILE_NOTIFY_CHANGE_LAST_ACCESS      0x00000020
1028         FILE_NOTIFY_CHANGE_CREATION         0x00000040
1029         FILE_NOTIFY_CHANGE_EA               0x00000080
1030         FILE_NOTIFY_CHANGE_SECURITY         0x00000100
1031         FILE_NOTIFY_CHANGE_STREAM_NAME      0x00000200
1032         FILE_NOTIFY_CHANGE_STREAM_SIZE      0x00000400
1033         FILE_NOTIFY_CHANGE_STREAM_WRITE     0x00000800
1034 */
1035
1036 typedef struct _FILE_NOTIFY_INFORMATION {
1037         ULONG Action;
1038         ULONG FileNameLength;
1039         WCHAR FileName[0]; 
1040 } FILE_NOTIFY_INFORMATION;
1041
1042 #define FSCTL_GET_VOLUME_BITMAP                 0x9006F
1043 #define FSCTL_GET_RETRIEVAL_POINTERS            0x90073
1044 #define FSCTL_MOVE_FILE                         0x90074
1045
1046 typedef struct _MAPPING_PAIR
1047 {
1048         ULONGLONG       Vcn;
1049         ULONGLONG       Lcn;
1050 } MAPPING_PAIR, *PMAPPING_PAIR;
1051
1052 typedef struct _GET_RETRIEVAL_DESCRIPTOR
1053 {
1054         ULONG           NumberOfPairs;
1055         ULONGLONG       StartVcn;
1056         MAPPING_PAIR    Pair[0]; // variable size 
1057 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
1058
1059 typedef struct _MOVEFILE_DESCRIPTOR
1060 {
1061         HANDLE            FileHandle;
1062         ULONG             Reserved;
1063         LARGE_INTEGER     StartVcn;
1064         LARGE_INTEGER     TargetLcn;
1065         ULONG             NumVcns;
1066         ULONG             Reserved1;
1067 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
1068
1069 typedef struct _SECTION_BASIC_INFORMATION
1070 {
1071   PVOID BaseAddress;
1072   ULONG Attributes;
1073   LARGE_INTEGER Size;
1074 } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
1075
1076 typedef enum _SECTION_INFORMATION_CLASS 
1077 {
1078   SectionBasicInformation,
1079   SectionImageInformation,
1080 } SECTION_INFORMATION_CLASS;
1081
1082 // shutdown action
1083
1084 typedef enum SHUTDOWN_ACTION_TAG {
1085   ShutdownNoReboot,
1086   ShutdownReboot,
1087   ShutdownPowerOff
1088 } SHUTDOWN_ACTION;
1089
1090 #else /* __USE_W32API */
1091
1092 #define DebugDbgLoadSymbols ((DEBUG_CONTROL_CODE)0xffffffff)
1093
1094 #endif /* __USE_W32API */
1095
1096 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
1097 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
1098 #if 1
1099 extern ULONG NtBuildNumber;
1100 #else
1101 #ifdef __NTOSKRNL__
1102 extern ULONG NtBuildNumber;
1103 #else
1104 extern ULONG NtBuildNumber;
1105 #endif
1106 #endif
1107
1108 // event access mask
1109
1110 #define EVENT_READ_ACCESS                       1
1111 #define EVENT_WRITE_ACCESS                      2
1112
1113 //process query / set information class
1114
1115 #define ProcessBasicInformation                 0
1116 #define ProcessQuotaLimits                      1
1117 #define ProcessIoCounters                       2
1118 #define ProcessVmCounters                       3
1119 #define ProcessTimes                            4
1120 #define ProcessBasePriority                     5
1121 #define ProcessRaisePriority                    6
1122 #define ProcessDebugPort                        7
1123 #define ProcessExceptionPort                    8
1124 #define ProcessAccessToken                      9
1125 #define ProcessLdtInformation                   10
1126 #define ProcessLdtSize                          11
1127 #define ProcessDefaultHardErrorMode             12
1128 #define ProcessIoPortHandlers                   13
1129 #define ProcessPooledUsageAndLimits             14
1130 #define ProcessWorkingSetWatch                  15
1131 #define ProcessUserModeIOPL                     16
1132 #define ProcessEnableAlignmentFaultFixup        17
1133 #define ProcessPriorityClass                    18
1134 #define ProcessWx86Information                  19
1135 #define ProcessHandleCount                      20
1136 #define ProcessAffinityMask                     21
1137 #define ProcessPriorityBoost                    22
1138 #define ProcessDeviceMap                        23
1139 #define ProcessSessionInformation               24
1140 #define ProcessForegroundInformation            25
1141 #define ProcessWow64Information                 26
1142 /* ReactOS private. */
1143 #define ProcessImageFileName                    27
1144 #define ProcessDesktop                          28
1145 #define MaxProcessInfoClass                     29
1146
1147 /*
1148  * thread query / set information class
1149  */
1150 #define ThreadBasicInformation                  0
1151 #define ThreadTimes                             1
1152 #define ThreadPriority                          2
1153 #define ThreadBasePriority                      3
1154 #define ThreadAffinityMask                      4
1155 #define ThreadImpersonationToken                5
1156 #define ThreadDescriptorTableEntry              6
1157 #define ThreadEnableAlignmentFaultFixup         7
1158 #define ThreadEventPair                         8
1159 #define ThreadQuerySetWin32StartAddress         9
1160 #define ThreadZeroTlsCell                       10
1161 #define ThreadPerformanceCount                  11
1162 #define ThreadAmILastThread                     12
1163 #define ThreadIdealProcessor                    13
1164 #define ThreadPriorityBoost                     14
1165 #define ThreadSetTlsArrayAddress                15
1166 #define ThreadIsIoPending                       16
1167 #define ThreadHideFromDebugger                  17
1168 #define MaxThreadInfoClass                      17
1169
1170 // object handle information
1171
1172 #define ObjectBasicInformation                  0
1173 #define ObjectNameInformation                   1
1174 #define ObjectTypeInformation                   2
1175 #define ObjectAllInformation                    3
1176 #define ObjectDataInformation                   4
1177
1178 typedef struct _ATOM_TABLE_INFORMATION
1179 {
1180    ULONG NumberOfAtoms;
1181    RTL_ATOM Atoms[1];
1182 } ATOM_TABLE_INFORMATION, *PATOM_TABLE_INFORMATION;
1183
1184
1185 // mutant information
1186
1187 typedef enum _MUTANT_INFORMATION_CLASS
1188 {
1189   MutantBasicInformation = 0
1190 } MUTANT_INFORMATION_CLASS;
1191
1192 typedef struct _MUTANT_BASIC_INFORMATION
1193 {
1194   LONG Count;
1195   BOOLEAN Owned;
1196   BOOLEAN Abandoned;
1197 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
1198
1199
1200 // SystemTimeOfDayInformation (3)
1201 typedef
1202 struct _SYSTEM_TIMEOFDAY_INFORMATION
1203 {
1204         LARGE_INTEGER   BootTime;
1205         LARGE_INTEGER   CurrentTime;
1206         LARGE_INTEGER   TimeZoneBias;
1207         ULONG           TimeZoneId;
1208         ULONG           Reserved;
1209 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION;
1210
1211 // SystemPathInformation (4)
1212 // IT DOES NOT WORK
1213 typedef
1214 struct _SYSTEM_PATH_INFORMATION
1215 {
1216         PVOID   Dummy;
1217
1218 } SYSTEM_PATH_INFORMATION, * PSYSTEM_PATH_INFORMATION;
1219
1220 // SystemProcessInformation (5)
1221 typedef
1222 struct _SYSTEM_THREAD_INFORMATION
1223 {
1224         TIME            KernelTime;
1225         TIME            UserTime;
1226         TIME            CreateTime;
1227         ULONG           TickCount;
1228         ULONG           StartEIP;
1229         CLIENT_ID       ClientId;
1230         ULONG           DynamicPriority;
1231         ULONG           BasePriority;
1232         ULONG           nSwitches;
1233         DWORD           State;
1234         KWAIT_REASON    WaitReason;
1235         
1236 } SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
1237
1238 typedef
1239 struct SYSTEM_PROCESS_INFORMATION
1240 {
1241         ULONG                           RelativeOffset;
1242         ULONG                           ThreadCount;
1243         ULONG                           Unused1 [6];
1244         TIME                            CreateTime;
1245         TIME                            UserTime;
1246         TIME                            KernelTime;
1247         UNICODE_STRING                  Name;
1248         ULONG                           BasePriority;
1249         ULONG                           ProcessId;
1250         ULONG                           ParentProcessId;
1251         ULONG                           HandleCount;
1252         ULONG                           Unused2[2];
1253         ULONG                           PeakVirtualSizeBytes;
1254         ULONG                           TotalVirtualSizeBytes;
1255         ULONG                           PageFaultCount;
1256         ULONG                           PeakWorkingSetSizeBytes;
1257         ULONG                           TotalWorkingSetSizeBytes;
1258         ULONG                           PeakPagedPoolUsagePages;
1259         ULONG                           TotalPagedPoolUsagePages;
1260         ULONG                           PeakNonPagedPoolUsagePages;
1261         ULONG                           TotalNonPagedPoolUsagePages;
1262         ULONG                           TotalPageFileUsageBytes;
1263         ULONG                           PeakPageFileUsageBytes;
1264         ULONG                           TotalPrivateBytes;
1265         SYSTEM_THREAD_INFORMATION       ThreadSysInfo [1];
1266         
1267 } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
1268
1269 // SystemCallCountInformation (6)
1270 typedef
1271 struct _SYSTEM_SDT_INFORMATION
1272 {
1273         ULONG   BufferLength;
1274         ULONG   NumberOfSystemServiceTables;
1275         ULONG   NumberOfServices [1];
1276         ULONG   ServiceCounters [1];
1277
1278 } SYSTEM_SDT_INFORMATION, *PSYSTEM_SDT_INFORMATION;
1279
1280 // SystemDeviceInformation (7)
1281 typedef
1282 struct _SYSTEM_DEVICE_INFORMATION
1283 {
1284         ULONG   NumberOfDisks;
1285         ULONG   NumberOfFloppies;
1286         ULONG   NumberOfCdRoms;
1287         ULONG   NumberOfTapes;
1288         ULONG   NumberOfSerialPorts;
1289         ULONG   NumberOfParallelPorts;
1290 } SYSTEM_DEVICE_INFORMATION, *PSYSTEM_DEVICE_INFORMATION;
1291
1292 // SystemProcessorPerformanceInformation (8)
1293 // (one per processor in the system)
1294 typedef
1295 struct _SYSTEM_PROCESSORTIME_INFO
1296 {
1297         TIME    TotalProcessorRunTime;
1298         TIME    TotalProcessorTime;
1299         TIME    TotalProcessorUserTime;
1300         TIME    TotalDPCTime;
1301         TIME    TotalInterruptTime;
1302         ULONG   TotalInterrupts;
1303         ULONG   Unused;
1304
1305 } SYSTEM_PROCESSORTIME_INFO, *PSYSTEM_PROCESSORTIME_INFO;
1306
1307 // SystemFlagsInformation (9)
1308 typedef
1309 struct _SYSTEM_FLAGS_INFORMATION
1310 {
1311         ULONG   Flags;
1312
1313 } SYSTEM_FLAGS_INFORMATION, * PSYSTEM_FLAGS_INFORMATION;
1314
1315 #define FLG_STOP_ON_EXCEPTION           0x00000001
1316 #define FLG_SHOW_LDR_SNAPS              0x00000002
1317 #define FLG_DEBUG_INITIAL_COMMAND       0x00000004
1318 #define FLG_STOP_ON_HANG_GUI            0x00000008
1319 #define FLG_HEAP_ENABLE_TAIL_CHECK      0x00000010
1320 #define FLG_HEAP_ENABLE_FREE_CHECK      0x00000020
1321 #define FLG_HEAP_VALIDATE_PARAMETERS    0x00000040
1322 #define FLG_HEAP_VALIDATE_ALL           0x00000080
1323 #define FLG_POOL_ENABLE_TAIL_CHECK      0x00000100
1324 #define FLG_POOL_ENABLE_FREE_CHECK      0x00000200
1325 #define FLG_POOL_ENABLE_TAGGING         0x00000400
1326 #define FLG_HEAP_ENABLE_TAGGING         0x00000800
1327 #define FLG_USER_STACK_TRACE_DB         0x00001000
1328 #define FLG_KERNEL_STACK_TRACE_DB       0x00002000
1329 #define FLG_MAINTAIN_OBJECT_TYPELIST    0x00004000
1330 #define FLG_HEAP_ENABLE_TAG_BY_DLL      0x00008000
1331 #define FLG_IGNORE_DEBUG_PRIV           0x00010000
1332 #define FLG_ENABLE_CSRDEBUG             0x00020000
1333 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD   0x00040000
1334 #define FLG_DISABLE_PAGE_KERNEL_STACKS  0x00080000
1335 #define FLG_HEAP_ENABLE_CALL_TRACING    0x00100000
1336 #define FLG_HEAP_DISABLE_COALESCING     0x00200000
1337 #define FLG_ENABLE_CLOSE_EXCEPTION      0x00400000
1338 #define FLG_ENABLE_EXCEPTION_LOGGING    0x00800000
1339 #define FLG_UNKNOWN_01000000            0x01000000
1340 #define FLG_UNKNOWN_02000000            0x02000000
1341 #define FLG_UNKNOWN_04000000            0x04000000
1342 #define FLG_ENABLE_DBGPRINT_BUFFERING   0x08000000
1343 #define FLG_UNKNOWN_10000000            0x10000000
1344 #define FLG_UNKNOWN_20000000            0x20000000
1345 #define FLG_UNKNOWN_40000000            0x40000000
1346 #define FLG_UNKNOWN_80000000            0x80000000
1347
1348 // SystemCallTimeInformation (10)
1349 // UNKNOWN
1350
1351 // SystemLocksInformation (12)
1352 typedef
1353 struct _SYSTEM_RESOURCE_LOCK_ENTRY
1354 {
1355         ULONG   ResourceAddress;
1356         ULONG   Always1;
1357         ULONG   Unknown;
1358         ULONG   ActiveCount;
1359         ULONG   ContentionCount;
1360         ULONG   Unused[2];
1361         ULONG   NumberOfSharedWaiters;
1362         ULONG   NumberOfExclusiveWaiters;
1363         
1364 } SYSTEM_RESOURCE_LOCK_ENTRY, *PSYSTEM_RESOURCE_LOCK_ENTRY;
1365
1366 typedef
1367 struct _SYSTEM_RESOURCE_LOCK_INFO
1368 {
1369         ULONG                           Count;
1370         SYSTEM_RESOURCE_LOCK_ENTRY      Lock [1];
1371         
1372 } SYSTEM_RESOURCE_LOCK_INFO, *PSYSTEM_RESOURCE_LOCK_INFO;
1373
1374 // SystemInformation13 (13)
1375 // UNKNOWN
1376
1377 // SystemInformation14 (14)
1378 // UNKNOWN
1379
1380 // SystemInformation15 (15)
1381 // UNKNOWN
1382
1383 // SystemInstructionEmulationInfo (19)
1384 typedef
1385 struct _SYSTEM_VDM_INFORMATION
1386 {
1387         ULONG VdmSegmentNotPresentCount;
1388         ULONG VdmINSWCount;
1389         ULONG VdmESPREFIXCount;
1390         ULONG VdmCSPREFIXCount;
1391         ULONG VdmSSPREFIXCount;
1392         ULONG VdmDSPREFIXCount;
1393         ULONG VdmFSPREFIXCount;
1394         ULONG VdmGSPREFIXCount;
1395         ULONG VdmOPER32PREFIXCount;
1396         ULONG VdmADDR32PREFIXCount;
1397         ULONG VdmINSBCount;
1398         ULONG VdmINSWV86Count;
1399         ULONG VdmOUTSBCount;
1400         ULONG VdmOUTSWCount;
1401         ULONG VdmPUSHFCount;
1402         ULONG VdmPOPFCount;
1403         ULONG VdmINTNNCount;
1404         ULONG VdmINTOCount;
1405         ULONG VdmIRETCount;
1406         ULONG VdmINBIMMCount;
1407         ULONG VdmINWIMMCount;
1408         ULONG VdmOUTBIMMCount;
1409         ULONG VdmOUTWIMMCount;
1410         ULONG VdmINBCount;
1411         ULONG VdmINWCount;
1412         ULONG VdmOUTBCount;
1413         ULONG VdmOUTWCount;
1414         ULONG VdmLOCKPREFIXCount;
1415         ULONG VdmREPNEPREFIXCount;
1416         ULONG VdmREPPREFIXCount;
1417         ULONG VdmHLTCount;
1418         ULONG VdmCLICount;
1419         ULONG VdmSTICount;
1420         ULONG VdmBopCount;
1421
1422 } SYSTEM_VDM_INFORMATION, *PSYSTEM_VDM_INFORMATION;
1423
1424 // SystemInformation20 (20)
1425 // UNKNOWN
1426
1427 // SystemPoolTagInformation (22)
1428 // found by Klaus P. Gerlicher
1429 // (implemented only in checked builds)
1430 typedef
1431 struct _POOL_TAG_STATS
1432 {
1433         ULONG AllocationCount;
1434         ULONG FreeCount;
1435         ULONG SizeBytes;
1436         
1437 } POOL_TAG_STATS;
1438
1439 typedef
1440 struct _SYSTEM_POOL_TAG_ENTRY
1441 {
1442         ULONG           Tag;
1443         POOL_TAG_STATS  Paged;
1444         POOL_TAG_STATS  NonPaged;
1445
1446 } SYSTEM_POOL_TAG_ENTRY, * PSYSTEM_POOL_TAG_ENTRY;
1447
1448 typedef
1449 struct _SYSTEM_POOL_TAG_INFO
1450 {
1451         ULONG                   Count;
1452         SYSTEM_POOL_TAG_ENTRY   PoolEntry [1];
1453
1454 } SYSTEM_POOL_TAG_INFO, *PSYSTEM_POOL_TAG_INFO;
1455
1456 // SystemProcessorScheduleInfo (23)
1457 typedef
1458 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
1459 {
1460         ULONG nContextSwitches;
1461         ULONG nDPCQueued;
1462         ULONG nDPCRate;
1463         ULONG TimerResolution;
1464         ULONG nDPCBypasses;
1465         ULONG nAPCBypasses;
1466         
1467 } SYSTEM_PROCESSOR_SCHEDULE_INFO, *PSYSTEM_PROCESSOR_SCHEDULE_INFO;
1468
1469 // SystemInformation25 (25)
1470 // UNKNOWN
1471
1472 // SystemProcessorFaultCountInfo (33)
1473 typedef
1474 struct _SYSTEM_PROCESSOR_FAULT_INFO
1475 {
1476         ULONG   nAlignmentFixup;
1477         ULONG   nExceptionDispatches;
1478         ULONG   nFloatingEmulation;
1479         ULONG   Unknown;
1480         
1481 } SYSTEM_PROCESSOR_FAULT_INFO, *PSYSTEM_PROCESSOR_FAULT_INFO;
1482
1483 // SystemCrashDumpStateInfo (34)
1484 //
1485
1486 // SystemDebuggerInformation (35)
1487 typedef
1488 struct _SYSTEM_DEBUGGER_INFO
1489 {
1490         BOOLEAN KdDebuggerEnabled;
1491         BOOLEAN KdDebuggerPresent;
1492         
1493 } SYSTEM_DEBUGGER_INFO, *PSYSTEM_DEBUGGER_INFO;
1494
1495 // SystemInformation36 (36)
1496 // UNKNOWN
1497
1498 // SystemQuotaInformation (37)
1499 typedef
1500 struct _SYSTEM_QUOTA_INFORMATION
1501 {
1502         ULONG   CmpGlobalQuota;
1503         ULONG   CmpGlobalQuotaUsed;
1504         ULONG   MmSizeofPagedPoolInBytes;
1505         
1506 } SYSTEM_QUOTA_INFORMATION, *PSYSTEM_QUOTA_INFORMATION;
1507
1508 // (49)
1509 // UNKNOWN
1510
1511 // SystemVerifierInformation (51)
1512 // UNKNOWN
1513
1514 // SystemAddVerifier (52)
1515 // UNKNOWN
1516
1517 // wait type
1518
1519 #define WaitAll                                 0
1520 #define WaitAny                                 1
1521
1522 // number of wait objects
1523
1524 #define THREAD_WAIT_OBJECTS                     3
1525 //#define MAXIMUM_WAIT_OBJECTS                  64
1526
1527 // key restore flags
1528
1529 #define REG_WHOLE_HIVE_VOLATILE                 1
1530 #define REG_REFRESH_HIVE                        2
1531
1532 // object type  access rights
1533
1534 #define OBJECT_TYPE_CREATE              0x0001
1535 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1536
1537 // directory access rights
1538
1539 #define DIRECTORY_QUERY                         0x0001
1540 #define DIRECTORY_TRAVERSE                      0x0002
1541 #define DIRECTORY_CREATE_OBJECT                 0x0004
1542 #define DIRECTORY_CREATE_SUBDIRECTORY           0x0008
1543
1544 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
1545
1546 // symbolic link access rights
1547
1548 #define SYMBOLIC_LINK_QUERY                     0x0001
1549 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1550
1551
1552 typedef struct _OBJECT_DATA_INFORMATION
1553 {
1554         BOOLEAN bInheritHandle;
1555         BOOLEAN bProtectFromClose;
1556 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
1557
1558
1559 typedef struct _OBJECT_TYPE_INFORMATION
1560 {
1561         UNICODE_STRING  Name;
1562         UNICODE_STRING Type;
1563         ULONG TotalHandles;
1564         ULONG ReferenceCount;
1565 } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
1566
1567
1568 // directory information
1569
1570 typedef struct _OBJDIR_INFORMATION {
1571         UNICODE_STRING ObjectName;
1572         UNICODE_STRING ObjectTypeName; // Directory, Device ...
1573         UCHAR          Data[0];
1574 } OBJDIR_INFORMATION, *POBJDIR_INFORMATION;
1575
1576
1577 /*
1578          Action is one of the following values:
1579
1580         FILE_ACTION_ADDED               0x00000001
1581         FILE_ACTION_REMOVED             0x00000002
1582         FILE_ACTION_MODIFIED            0x00000003
1583         FILE_ACTION_RENAMED_OLD_NAME    0x00000004
1584         FILE_ACTION_RENAMED_NEW_NAME    0x00000005
1585         FILE_ACTION_ADDED_STREAM        0x00000006
1586         FILE_ACTION_REMOVED_STREAM      0x00000007
1587         FILE_ACTION_MODIFIED_STREAM     0x00000008
1588
1589 */
1590
1591
1592 // File System Control commands ( related to defragging )
1593
1594 #define FSCTL_READ_MFT_RECORD                   0x90068 // NTFS only
1595
1596 typedef struct _BITMAP_DESCRIPTOR
1597 {
1598         ULONGLONG       StartLcn;
1599         ULONGLONG       ClustersToEndOfVol;
1600         BYTE            Map[0]; // variable size
1601 } BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR;
1602
1603
1604 //typedef enum _TIMER_TYPE 
1605 //{
1606 //      NotificationTimer,
1607 //      SynchronizationTimer
1608 //} TIMER_TYPE;
1609
1610 typedef struct _TIMER_BASIC_INFORMATION
1611 {
1612   LARGE_INTEGER TimeRemaining;
1613   BOOLEAN SignalState;
1614 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
1615
1616 typedef enum _TIMER_INFORMATION_CLASS
1617 {
1618   TimerBasicInformation
1619 } TIMER_INFORMATION_CLASS;
1620
1621 typedef
1622 struct _LPC_PORT_BASIC_INFORMATION
1623 {
1624         DWORD   Unknown0;
1625         DWORD   Unknown1;
1626         DWORD   Unknown2;
1627         DWORD   Unknown3;
1628         DWORD   Unknown4;
1629         DWORD   Unknown5;
1630         DWORD   Unknown6;
1631         DWORD   Unknown7;
1632         DWORD   Unknown8;
1633         DWORD   Unknown9;
1634         DWORD   Unknown10;
1635         DWORD   Unknown11;
1636         DWORD   Unknown12;
1637         DWORD   Unknown13;
1638
1639 } LPC_PORT_BASIC_INFORMATION, * PLPC_PORT_BASIC_INFORMATION;
1640
1641 #endif