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