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