Added new 'bootcd' target.
[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 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