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