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