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