d998022c63fed22fef543a98fb164cb4b2ad6033
[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 typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
1017         ULONG NextEntryOffset;
1018         ULONG FileIndex;
1019         LARGE_INTEGER CreationTime;
1020         LARGE_INTEGER LastAccessTime;
1021         LARGE_INTEGER LastWriteTime;
1022         LARGE_INTEGER ChangeTime;
1023         LARGE_INTEGER EndOfFile;
1024         LARGE_INTEGER AllocationSize;
1025         ULONG FileAttributes;
1026         ULONG FileNameLength;
1027         ULONG EaSize;
1028         CCHAR ShortNameLength;
1029         WCHAR ShortName[12];
1030         LARGE_INTEGER FileId;
1031         WCHAR FileName[1];
1032 } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
1033
1034 /*
1035         NotifyFilter / CompletionFilter:
1036
1037         FILE_NOTIFY_CHANGE_FILE_NAME        0x00000001
1038         FILE_NOTIFY_CHANGE_DIR_NAME         0x00000002
1039         FILE_NOTIFY_CHANGE_NAME             0x00000003
1040         FILE_NOTIFY_CHANGE_ATTRIBUTES       0x00000004
1041         FILE_NOTIFY_CHANGE_SIZE             0x00000008
1042         FILE_NOTIFY_CHANGE_LAST_WRITE       0x00000010
1043         FILE_NOTIFY_CHANGE_LAST_ACCESS      0x00000020
1044         FILE_NOTIFY_CHANGE_CREATION         0x00000040
1045         FILE_NOTIFY_CHANGE_EA               0x00000080
1046         FILE_NOTIFY_CHANGE_SECURITY         0x00000100
1047         FILE_NOTIFY_CHANGE_STREAM_NAME      0x00000200
1048         FILE_NOTIFY_CHANGE_STREAM_SIZE      0x00000400
1049         FILE_NOTIFY_CHANGE_STREAM_WRITE     0x00000800
1050 */
1051
1052 typedef struct _FILE_NOTIFY_INFORMATION {
1053         ULONG Action;
1054         ULONG FileNameLength;
1055         WCHAR FileName[0]; 
1056 } FILE_NOTIFY_INFORMATION;
1057
1058 #define FSCTL_GET_VOLUME_BITMAP                 0x9006F
1059 #define FSCTL_GET_RETRIEVAL_POINTERS            0x90073
1060 #define FSCTL_MOVE_FILE                         0x90074
1061
1062 typedef struct _MAPPING_PAIR
1063 {
1064         ULONGLONG       Vcn;
1065         ULONGLONG       Lcn;
1066 } MAPPING_PAIR, *PMAPPING_PAIR;
1067
1068 typedef struct _GET_RETRIEVAL_DESCRIPTOR
1069 {
1070         ULONG           NumberOfPairs;
1071         ULONGLONG       StartVcn;
1072         MAPPING_PAIR    Pair[0]; // variable size 
1073 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
1074
1075 typedef struct _MOVEFILE_DESCRIPTOR
1076 {
1077         HANDLE            FileHandle;
1078         ULONG             Reserved;
1079         LARGE_INTEGER     StartVcn;
1080         LARGE_INTEGER     TargetLcn;
1081         ULONG             NumVcns;
1082         ULONG             Reserved1;
1083 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
1084
1085 typedef struct _SECTION_BASIC_INFORMATION
1086 {
1087   PVOID BaseAddress;
1088   ULONG Attributes;
1089   LARGE_INTEGER Size;
1090 } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
1091
1092 typedef enum _SECTION_INFORMATION_CLASS 
1093 {
1094   SectionBasicInformation,
1095   SectionImageInformation,
1096 } SECTION_INFORMATION_CLASS;
1097
1098 // shutdown action
1099
1100 typedef enum SHUTDOWN_ACTION_TAG {
1101   ShutdownNoReboot,
1102   ShutdownReboot,
1103   ShutdownPowerOff
1104 } SHUTDOWN_ACTION;
1105
1106 typedef enum _IO_COMPLETION_INFORMATION_CLASS {
1107    IoCompletionBasicInformation
1108 } IO_COMPLETION_INFORMATION_CLASS;
1109
1110 typedef struct _IO_COMPLETION_BASIC_INFORMATION {
1111    LONG SignalState;
1112 } IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION;
1113
1114 #else /* __USE_W32API */
1115
1116 #define DebugDbgLoadSymbols ((DEBUG_CONTROL_CODE)0xffffffff)
1117
1118 #endif /* __USE_W32API */
1119
1120 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
1121 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
1122 #if 1
1123 extern ULONG NtBuildNumber;
1124 #else
1125 #ifdef __NTOSKRNL__
1126 extern ULONG NtBuildNumber;
1127 #else
1128 extern ULONG NtBuildNumber;
1129 #endif
1130 #endif
1131
1132 // event access mask
1133
1134 #define EVENT_READ_ACCESS                       1
1135 #define EVENT_WRITE_ACCESS                      2
1136
1137 //process query / set information class
1138
1139 #define ProcessBasicInformation                 0
1140 #define ProcessQuotaLimits                      1
1141 #define ProcessIoCounters                       2
1142 #define ProcessVmCounters                       3
1143 #define ProcessTimes                            4
1144 #define ProcessBasePriority                     5
1145 #define ProcessRaisePriority                    6
1146 #define ProcessDebugPort                        7
1147 #define ProcessExceptionPort                    8
1148 #define ProcessAccessToken                      9
1149 #define ProcessLdtInformation                   10
1150 #define ProcessLdtSize                          11
1151 #define ProcessDefaultHardErrorMode             12
1152 #define ProcessIoPortHandlers                   13
1153 #define ProcessPooledUsageAndLimits             14
1154 #define ProcessWorkingSetWatch                  15
1155 #define ProcessUserModeIOPL                     16
1156 #define ProcessEnableAlignmentFaultFixup        17
1157 #define ProcessPriorityClass                    18
1158 #define ProcessWx86Information                  19
1159 #define ProcessHandleCount                      20
1160 #define ProcessAffinityMask                     21
1161 #define ProcessPriorityBoost                    22
1162 #define ProcessDeviceMap                        23
1163 #define ProcessSessionInformation               24
1164 #define ProcessForegroundInformation            25
1165 #define ProcessWow64Information                 26
1166 /* ReactOS private. */
1167 #define ProcessImageFileName                    27
1168 #define ProcessDesktop                          28
1169 #define MaxProcessInfoClass                     29
1170
1171 /*
1172  * thread query / set information class
1173  */
1174 #define ThreadBasicInformation                  0
1175 #define ThreadTimes                             1
1176 #define ThreadPriority                          2
1177 #define ThreadBasePriority                      3
1178 #define ThreadAffinityMask                      4
1179 #define ThreadImpersonationToken                5
1180 #define ThreadDescriptorTableEntry              6
1181 #define ThreadEnableAlignmentFaultFixup         7
1182 #define ThreadEventPair                         8
1183 #define ThreadQuerySetWin32StartAddress         9
1184 #define ThreadZeroTlsCell                       10
1185 #define ThreadPerformanceCount                  11
1186 #define ThreadAmILastThread                     12
1187 #define ThreadIdealProcessor                    13
1188 #define ThreadPriorityBoost                     14
1189 #define ThreadSetTlsArrayAddress                15
1190 #define ThreadIsIoPending                       16
1191 #define ThreadHideFromDebugger                  17
1192 #define MaxThreadInfoClass                      17
1193
1194 // object handle information
1195
1196 #define ObjectBasicInformation                  0
1197 #define ObjectNameInformation                   1
1198 #define ObjectTypeInformation                   2
1199 #define ObjectAllInformation                    3
1200 #define ObjectDataInformation                   4
1201
1202 typedef struct _ATOM_TABLE_INFORMATION
1203 {
1204    ULONG NumberOfAtoms;
1205    RTL_ATOM Atoms[1];
1206 } ATOM_TABLE_INFORMATION, *PATOM_TABLE_INFORMATION;
1207
1208
1209 // mutant information
1210
1211 typedef enum _MUTANT_INFORMATION_CLASS
1212 {
1213   MutantBasicInformation = 0
1214 } MUTANT_INFORMATION_CLASS;
1215
1216 typedef struct _MUTANT_BASIC_INFORMATION
1217 {
1218   LONG Count;
1219   BOOLEAN Owned;
1220   BOOLEAN Abandoned;
1221 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
1222
1223
1224 // SystemTimeOfDayInformation (3)
1225 typedef
1226 struct _SYSTEM_TIMEOFDAY_INFORMATION
1227 {
1228         LARGE_INTEGER   BootTime;
1229         LARGE_INTEGER   CurrentTime;
1230         LARGE_INTEGER   TimeZoneBias;
1231         ULONG           TimeZoneId;
1232         ULONG           Reserved;
1233 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION;
1234
1235 // SystemPathInformation (4)
1236 // IT DOES NOT WORK
1237 typedef
1238 struct _SYSTEM_PATH_INFORMATION
1239 {
1240         PVOID   Dummy;
1241
1242 } SYSTEM_PATH_INFORMATION, * PSYSTEM_PATH_INFORMATION;
1243
1244 // SystemProcessInformation (5)
1245
1246 typedef struct _SYSTEM_THREADS
1247 {
1248  TIME         KernelTime;
1249  TIME         UserTime;
1250  TIME         CreateTime;
1251  ULONG        WaitTime;
1252  PVOID        StartAddress;
1253  CLIENT_ID    ClientId;
1254  KPRIORITY    Priority;
1255  KPRIORITY    BasePriority;
1256  ULONG        ContextSwitchCount;
1257  ULONG State;
1258  KWAIT_REASON WaitReason;
1259 } SYSTEM_THREADS, *PSYSTEM_THREADS;
1260
1261 typedef struct _SYSTEM_PROCESSES_NT4
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  SYSTEM_THREADS Threads[ANYSIZE_ARRAY];
1277 } SYSTEM_PROCESSES_NT4, *PSYSTEM_PROCESSES_NT4;
1278
1279 typedef struct _SYSTEM_PROCESSES_NT5
1280 {
1281  SIZE_T         NextEntryDelta;
1282  ULONG          ThreadCount;
1283  ULONG          Reserved1[6];
1284  TIME           CreateTime;
1285  TIME           UserTime;
1286  TIME           KernelTime;
1287  UNICODE_STRING ProcessName;
1288  KPRIORITY      BasePriority;
1289  ULONG          ProcessId;
1290  ULONG          InheritedFromProcessId;
1291  ULONG          HandleCount;
1292  ULONG          Reserved2[2];
1293  VM_COUNTERS    VmCounters;
1294  IO_COUNTERS    IoCounters;
1295  SYSTEM_THREADS Threads[ANYSIZE_ARRAY];
1296 } SYSTEM_PROCESSES_NT5, *PSYSTEM_PROCESSES_NT5;
1297
1298 /* Not sure. What version are we emulating? */
1299 typedef SYSTEM_PROCESSES_NT5 SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;
1300
1301 // SystemCallCountInformation (6)
1302 typedef
1303 struct _SYSTEM_SDT_INFORMATION
1304 {
1305         ULONG   BufferLength;
1306         ULONG   NumberOfSystemServiceTables;
1307         ULONG   NumberOfServices [1];
1308         ULONG   ServiceCounters [1];
1309
1310 } SYSTEM_SDT_INFORMATION, *PSYSTEM_SDT_INFORMATION;
1311
1312 // SystemDeviceInformation (7)
1313 typedef
1314 struct _SYSTEM_DEVICE_INFORMATION
1315 {
1316         ULONG   NumberOfDisks;
1317         ULONG   NumberOfFloppies;
1318         ULONG   NumberOfCdRoms;
1319         ULONG   NumberOfTapes;
1320         ULONG   NumberOfSerialPorts;
1321         ULONG   NumberOfParallelPorts;
1322 } SYSTEM_DEVICE_INFORMATION, *PSYSTEM_DEVICE_INFORMATION;
1323
1324 // SystemProcessorPerformanceInformation (8)
1325 // (one per processor in the system)
1326 typedef
1327 struct _SYSTEM_PROCESSORTIME_INFO
1328 {
1329         TIME    TotalProcessorRunTime;
1330         TIME    TotalProcessorTime;
1331         TIME    TotalProcessorUserTime;
1332         TIME    TotalDPCTime;
1333         TIME    TotalInterruptTime;
1334         ULONG   TotalInterrupts;
1335         ULONG   Unused;
1336
1337 } SYSTEM_PROCESSORTIME_INFO, *PSYSTEM_PROCESSORTIME_INFO;
1338
1339 // SystemFlagsInformation (9)
1340 typedef
1341 struct _SYSTEM_FLAGS_INFORMATION
1342 {
1343         ULONG   Flags;
1344
1345 } SYSTEM_FLAGS_INFORMATION, * PSYSTEM_FLAGS_INFORMATION;
1346
1347 #define FLG_STOP_ON_EXCEPTION           0x00000001
1348 #define FLG_SHOW_LDR_SNAPS              0x00000002
1349 #define FLG_DEBUG_INITIAL_COMMAND       0x00000004
1350 #define FLG_STOP_ON_HANG_GUI            0x00000008
1351 #define FLG_HEAP_ENABLE_TAIL_CHECK      0x00000010
1352 #define FLG_HEAP_ENABLE_FREE_CHECK      0x00000020
1353 #define FLG_HEAP_VALIDATE_PARAMETERS    0x00000040
1354 #define FLG_HEAP_VALIDATE_ALL           0x00000080
1355 #define FLG_POOL_ENABLE_TAIL_CHECK      0x00000100
1356 #define FLG_POOL_ENABLE_FREE_CHECK      0x00000200
1357 #define FLG_POOL_ENABLE_TAGGING         0x00000400
1358 #define FLG_HEAP_ENABLE_TAGGING         0x00000800
1359 #define FLG_USER_STACK_TRACE_DB         0x00001000
1360 #define FLG_KERNEL_STACK_TRACE_DB       0x00002000
1361 #define FLG_MAINTAIN_OBJECT_TYPELIST    0x00004000
1362 #define FLG_HEAP_ENABLE_TAG_BY_DLL      0x00008000
1363 #define FLG_IGNORE_DEBUG_PRIV           0x00010000
1364 #define FLG_ENABLE_CSRDEBUG             0x00020000
1365 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD   0x00040000
1366 #define FLG_DISABLE_PAGE_KERNEL_STACKS  0x00080000
1367 #define FLG_HEAP_ENABLE_CALL_TRACING    0x00100000
1368 #define FLG_HEAP_DISABLE_COALESCING     0x00200000
1369 #define FLG_ENABLE_CLOSE_EXCEPTION      0x00400000
1370 #define FLG_ENABLE_EXCEPTION_LOGGING    0x00800000
1371 #define FLG_UNKNOWN_01000000            0x01000000
1372 #define FLG_UNKNOWN_02000000            0x02000000
1373 #define FLG_UNKNOWN_04000000            0x04000000
1374 #define FLG_ENABLE_DBGPRINT_BUFFERING   0x08000000
1375 #define FLG_UNKNOWN_10000000            0x10000000
1376 #define FLG_UNKNOWN_20000000            0x20000000
1377 #define FLG_UNKNOWN_40000000            0x40000000
1378 #define FLG_UNKNOWN_80000000            0x80000000
1379
1380 // SystemCallTimeInformation (10)
1381 // UNKNOWN
1382
1383 // SystemLocksInformation (12)
1384 typedef
1385 struct _SYSTEM_RESOURCE_LOCK_ENTRY
1386 {
1387         ULONG   ResourceAddress;
1388         ULONG   Always1;
1389         ULONG   Unknown;
1390         ULONG   ActiveCount;
1391         ULONG   ContentionCount;
1392         ULONG   Unused[2];
1393         ULONG   NumberOfSharedWaiters;
1394         ULONG   NumberOfExclusiveWaiters;
1395         
1396 } SYSTEM_RESOURCE_LOCK_ENTRY, *PSYSTEM_RESOURCE_LOCK_ENTRY;
1397
1398 typedef
1399 struct _SYSTEM_RESOURCE_LOCK_INFO
1400 {
1401         ULONG                           Count;
1402         SYSTEM_RESOURCE_LOCK_ENTRY      Lock [1];
1403         
1404 } SYSTEM_RESOURCE_LOCK_INFO, *PSYSTEM_RESOURCE_LOCK_INFO;
1405
1406 // SystemInformation13 (13)
1407 // UNKNOWN
1408
1409 // SystemInformation14 (14)
1410 // UNKNOWN
1411
1412 // SystemInformation15 (15)
1413 // UNKNOWN
1414
1415 // SystemInstructionEmulationInfo (19)
1416 typedef
1417 struct _SYSTEM_VDM_INFORMATION
1418 {
1419         ULONG VdmSegmentNotPresentCount;
1420         ULONG VdmINSWCount;
1421         ULONG VdmESPREFIXCount;
1422         ULONG VdmCSPREFIXCount;
1423         ULONG VdmSSPREFIXCount;
1424         ULONG VdmDSPREFIXCount;
1425         ULONG VdmFSPREFIXCount;
1426         ULONG VdmGSPREFIXCount;
1427         ULONG VdmOPER32PREFIXCount;
1428         ULONG VdmADDR32PREFIXCount;
1429         ULONG VdmINSBCount;
1430         ULONG VdmINSWV86Count;
1431         ULONG VdmOUTSBCount;
1432         ULONG VdmOUTSWCount;
1433         ULONG VdmPUSHFCount;
1434         ULONG VdmPOPFCount;
1435         ULONG VdmINTNNCount;
1436         ULONG VdmINTOCount;
1437         ULONG VdmIRETCount;
1438         ULONG VdmINBIMMCount;
1439         ULONG VdmINWIMMCount;
1440         ULONG VdmOUTBIMMCount;
1441         ULONG VdmOUTWIMMCount;
1442         ULONG VdmINBCount;
1443         ULONG VdmINWCount;
1444         ULONG VdmOUTBCount;
1445         ULONG VdmOUTWCount;
1446         ULONG VdmLOCKPREFIXCount;
1447         ULONG VdmREPNEPREFIXCount;
1448         ULONG VdmREPPREFIXCount;
1449         ULONG VdmHLTCount;
1450         ULONG VdmCLICount;
1451         ULONG VdmSTICount;
1452         ULONG VdmBopCount;
1453
1454 } SYSTEM_VDM_INFORMATION, *PSYSTEM_VDM_INFORMATION;
1455
1456 // SystemInformation20 (20)
1457 // UNKNOWN
1458
1459 // SystemPoolTagInformation (22)
1460 // found by Klaus P. Gerlicher
1461 // (implemented only in checked builds)
1462 typedef
1463 struct _POOL_TAG_STATS
1464 {
1465         ULONG AllocationCount;
1466         ULONG FreeCount;
1467         ULONG SizeBytes;
1468         
1469 } POOL_TAG_STATS;
1470
1471 typedef
1472 struct _SYSTEM_POOL_TAG_ENTRY
1473 {
1474         ULONG           Tag;
1475         POOL_TAG_STATS  Paged;
1476         POOL_TAG_STATS  NonPaged;
1477
1478 } SYSTEM_POOL_TAG_ENTRY, * PSYSTEM_POOL_TAG_ENTRY;
1479
1480 typedef
1481 struct _SYSTEM_POOL_TAG_INFO
1482 {
1483         ULONG                   Count;
1484         SYSTEM_POOL_TAG_ENTRY   PoolEntry [1];
1485
1486 } SYSTEM_POOL_TAG_INFO, *PSYSTEM_POOL_TAG_INFO;
1487
1488 // SystemProcessorScheduleInfo (23)
1489 typedef
1490 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
1491 {
1492         ULONG nContextSwitches;
1493         ULONG nDPCQueued;
1494         ULONG nDPCRate;
1495         ULONG TimerResolution;
1496         ULONG nDPCBypasses;
1497         ULONG nAPCBypasses;
1498         
1499 } SYSTEM_PROCESSOR_SCHEDULE_INFO, *PSYSTEM_PROCESSOR_SCHEDULE_INFO;
1500
1501 // SystemInformation25 (25)
1502 // UNKNOWN
1503
1504 // SystemProcessorFaultCountInfo (33)
1505 typedef
1506 struct _SYSTEM_PROCESSOR_FAULT_INFO
1507 {
1508         ULONG   nAlignmentFixup;
1509         ULONG   nExceptionDispatches;
1510         ULONG   nFloatingEmulation;
1511         ULONG   Unknown;
1512         
1513 } SYSTEM_PROCESSOR_FAULT_INFO, *PSYSTEM_PROCESSOR_FAULT_INFO;
1514
1515 // SystemCrashDumpStateInfo (34)
1516 //
1517
1518 // SystemDebuggerInformation (35)
1519 typedef
1520 struct _SYSTEM_DEBUGGER_INFO
1521 {
1522         BOOLEAN KdDebuggerEnabled;
1523         BOOLEAN KdDebuggerPresent;
1524         
1525 } SYSTEM_DEBUGGER_INFO, *PSYSTEM_DEBUGGER_INFO;
1526
1527 // SystemInformation36 (36)
1528 // UNKNOWN
1529
1530 // SystemQuotaInformation (37)
1531 typedef
1532 struct _SYSTEM_QUOTA_INFORMATION
1533 {
1534         ULONG   CmpGlobalQuota;
1535         ULONG   CmpGlobalQuotaUsed;
1536         ULONG   MmSizeofPagedPoolInBytes;
1537         
1538 } SYSTEM_QUOTA_INFORMATION, *PSYSTEM_QUOTA_INFORMATION;
1539
1540 // (49)
1541 // UNKNOWN
1542
1543 // SystemVerifierInformation (51)
1544 // UNKNOWN
1545
1546 // SystemAddVerifier (52)
1547 // UNKNOWN
1548
1549 // wait type
1550
1551 #define WaitAll                                 0
1552 #define WaitAny                                 1
1553
1554 // number of wait objects
1555
1556 #define THREAD_WAIT_OBJECTS                     3
1557 //#define MAXIMUM_WAIT_OBJECTS                  64
1558
1559 // key restore flags
1560
1561 #define REG_WHOLE_HIVE_VOLATILE                 1
1562 #define REG_REFRESH_HIVE                        2
1563
1564 // object type  access rights
1565
1566 #define OBJECT_TYPE_CREATE              0x0001
1567 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1568
1569 // directory access rights
1570
1571 #define DIRECTORY_QUERY                         0x0001
1572 #define DIRECTORY_TRAVERSE                      0x0002
1573 #define DIRECTORY_CREATE_OBJECT                 0x0004
1574 #define DIRECTORY_CREATE_SUBDIRECTORY           0x0008
1575
1576 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
1577
1578 // symbolic link access rights
1579
1580 #define SYMBOLIC_LINK_QUERY                     0x0001
1581 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1582
1583
1584 typedef struct _OBJECT_DATA_INFORMATION
1585 {
1586         BOOLEAN bInheritHandle;
1587         BOOLEAN bProtectFromClose;
1588 } OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
1589
1590
1591 typedef struct _OBJECT_TYPE_INFORMATION
1592 {
1593         UNICODE_STRING  Name;
1594         UNICODE_STRING Type;
1595         ULONG TotalHandles;
1596         ULONG ReferenceCount;
1597 } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
1598
1599
1600 // directory information
1601
1602 typedef struct _OBJDIR_INFORMATION {
1603         UNICODE_STRING ObjectName;
1604         UNICODE_STRING ObjectTypeName; // Directory, Device ...
1605         UCHAR          Data[0];
1606 } OBJDIR_INFORMATION, *POBJDIR_INFORMATION;
1607
1608
1609 /*
1610          Action is one of the following values:
1611
1612         FILE_ACTION_ADDED               0x00000001
1613         FILE_ACTION_REMOVED             0x00000002
1614         FILE_ACTION_MODIFIED            0x00000003
1615         FILE_ACTION_RENAMED_OLD_NAME    0x00000004
1616         FILE_ACTION_RENAMED_NEW_NAME    0x00000005
1617         FILE_ACTION_ADDED_STREAM        0x00000006
1618         FILE_ACTION_REMOVED_STREAM      0x00000007
1619         FILE_ACTION_MODIFIED_STREAM     0x00000008
1620
1621 */
1622
1623
1624 // File System Control commands ( related to defragging )
1625
1626 #define FSCTL_READ_MFT_RECORD                   0x90068 // NTFS only
1627
1628 typedef struct _BITMAP_DESCRIPTOR
1629 {
1630         ULONGLONG       StartLcn;
1631         ULONGLONG       ClustersToEndOfVol;
1632         BYTE            Map[0]; // variable size
1633 } BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR;
1634
1635
1636 //typedef enum _TIMER_TYPE 
1637 //{
1638 //      NotificationTimer,
1639 //      SynchronizationTimer
1640 //} TIMER_TYPE;
1641
1642 typedef struct _TIMER_BASIC_INFORMATION
1643 {
1644   LARGE_INTEGER TimeRemaining;
1645   BOOLEAN SignalState;
1646 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
1647
1648 typedef enum _TIMER_INFORMATION_CLASS
1649 {
1650   TimerBasicInformation
1651 } TIMER_INFORMATION_CLASS;
1652
1653 typedef
1654 struct _LPC_PORT_BASIC_INFORMATION
1655 {
1656         DWORD   Unknown0;
1657         DWORD   Unknown1;
1658         DWORD   Unknown2;
1659         DWORD   Unknown3;
1660         DWORD   Unknown4;
1661         DWORD   Unknown5;
1662         DWORD   Unknown6;
1663         DWORD   Unknown7;
1664         DWORD   Unknown8;
1665         DWORD   Unknown9;
1666         DWORD   Unknown10;
1667         DWORD   Unknown11;
1668         DWORD   Unknown12;
1669         DWORD   Unknown13;
1670
1671 } LPC_PORT_BASIC_INFORMATION, * PLPC_PORT_BASIC_INFORMATION;
1672
1673 #endif