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