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