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