1. implemented SetProcessWorkingSetSize()
[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 // SystemTimeZoneInformation (44)
522 typedef
523 struct _SYSTEM_TIME_ZONE_INFORMATION
524 {
525 LONG Bias;
526 WCHAR StandardName [32];
527 TIME StandardDate;
528 LONG StandardBias;
529 WCHAR DaylightName [32];
530 TIME DaylightDate;
531 LONG DaylightBias;
532
533 } SYSTEM_TIME_ZONE_INFORMATION, * PSYSTEM_TIME_ZONE_INFORMATION;
534
535 // SystemLookasideInformation (45)
536 typedef
537 struct _SYSTEM_LOOKASIDE_INFORMATION
538 {
539 USHORT Depth;
540 USHORT MaximumDepth;
541 ULONG TotalAllocates;
542 ULONG AllocatesMisses;
543 ULONG TotalFrees;
544 ULONG FreeMisses;
545 POOL_TYPE Type;
546 ULONG Tag;
547 ULONG Size;
548
549 } SYSTEM_LOOKASIDE_INFORMATION, * PSYSTEM_LOOKASIDE_INFORMATION;
550
551 // SystemSetTimeSlipEvent (46)
552 typedef
553 struct _SYSTEM_SET_TIME_SLIP_EVENT
554 {
555 HANDLE TimeSlipEvent; /* IN */
556
557 } SYSTEM_SET_TIME_SLIP_EVENT, * PSYSTEM_SET_TIME_SLIP_EVENT;
558
559 // SystemCreateSession (47)
560 // (available only on TSE/NT5+)
561 typedef
562 struct _SYSTEM_CREATE_SESSION
563 {
564 ULONG SessionId; /* OUT */
565
566 } SYSTEM_CREATE_SESSION, * PSYSTEM_CREATE_SESSION;
567
568 // SystemDeleteSession (48)
569 // (available only on TSE/NT5+)
570 typedef
571 struct _SYSTEM_DELETE_SESSION
572 {
573 ULONG SessionId; /* IN */
574
575 } SYSTEM_DELETE_SESSION, * PSYSTEM_DELETE_SESSION;
576
577 // SystemRangeStartInformation (50)
578 typedef
579 struct _SYSTEM_RANGE_START_INFORMATION
580 {
581 PVOID SystemRangeStart;
582
583 } SYSTEM_RANGE_START_INFORMATION, * PSYSTEM_RANGE_START_INFORMATION;
584
585 // SystemSessionProcessesInformation (53)
586 // (available only on TSE/NT5+)
587 typedef
588 struct _SYSTEM_SESSION_PROCESSES_INFORMATION
589 {
590 ULONG SessionId;
591 ULONG BufferSize;
592 PVOID Buffer; /* same format as in SystemProcessInformation */
593
594 } SYSTEM_SESSION_PROCESSES_INFORMATION, * PSYSTEM_SESSION_PROCESSES_INFORMATION;
595
596 // memory information
597
598 typedef enum _MEMORY_INFORMATION_CLASS {
599 MemoryBasicInformation,
600 MemoryWorkingSetList,
601 MemorySectionName //,
602 //MemoryBasicVlmInformation //???
603 } MEMORY_INFORMATION_CLASS;
604
605 typedef struct _MEMORY_BASIC_INFORMATION { // Information Class 0
606 PVOID BaseAddress;
607 PVOID AllocationBase;
608 ULONG AllocationProtect;
609 ULONG RegionSize;
610 ULONG State;
611 ULONG Protect;
612 ULONG Type;
613 } MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;
614
615 typedef struct _MEMORY_WORKING_SET_LIST { // Information Class 1
616 ULONG NumberOfPages;
617 ULONG WorkingSetList[1];
618 } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
619
620 // Information Class 2
621 /*#define _MEMORY_SECTION_NAME_STATIC(__bufsize__) \
622 { \
623 UNICODE_STRING SectionFileName; \
624 WCHAR NameBuffer[(__bufsize__)]; \
625 }*/
626
627 typedef struct
628 {
629 UNICODE_STRING SectionFileName;
630 WCHAR NameBuffer[ANYSIZE_ARRAY];
631 } MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
632
633 // Information class 0
634 typedef struct _PROCESS_BASIC_INFORMATION
635 {
636 NTSTATUS ExitStatus;
637 PPEB PebBaseAddress;
638 KAFFINITY AffinityMask;
639 KPRIORITY BasePriority;
640 ULONG UniqueProcessId;
641 ULONG InheritedFromUniqueProcessId;
642 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
643
644 // Information class 1
645 typedef struct _QUOTA_LIMITS
646 {
647 ULONG PagedPoolLimit;
648 ULONG NonPagedPoolLimit;
649 SIZE_T MinimumWorkingSetSize;
650 SIZE_T MaximumWorkingSetSize;
651 ULONG PagefileLimit;
652 TIME TimeLimit;
653 } QUOTA_LIMITS, *PQUOTA_LIMITS;
654
655 // Information class 2
656 typedef struct _IO_COUNTERS
657 {
658 LARGE_INTEGER ReadOperationCount;
659 LARGE_INTEGER WriteOperationCount;
660 LARGE_INTEGER OtherOperationCount;
661 LARGE_INTEGER ReadTransferCount;
662 LARGE_INTEGER WriteTransferCount;
663 LARGE_INTEGER OtherTransferCount;
664 } IO_COUNTERS, *PIO_COUNTERS;
665
666 // Information class 3
667 typedef struct _VM_COUNTERS_
668 {
669 ULONG PeakVirtualSize;
670 ULONG VirtualSize;
671 ULONG PageFaultCount;
672 ULONG PeakWorkingSetSize;
673 ULONG WorkingSetSize;
674 ULONG QuotaPeakPagedPoolUsage;
675 ULONG QuotaPagedPoolUsage;
676 ULONG QuotaPeakNonPagedPoolUsage;
677 ULONG QuotaNonPagedPoolUsage;
678 ULONG PagefileUsage;
679 ULONG PeakPagefileUsage;
680 } VM_COUNTERS, *PVM_COUNTERS;
681
682 // Information class 4
683 typedef struct _KERNEL_USER_TIMES
684 {
685 TIME CreateTime;
686 TIME ExitTime;
687 TIME KernelTime;
688 TIME UserTime;
689 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
690
691 // Information class 9
692 typedef struct _PROCESS_ACCESS_TOKEN
693 {
694 HANDLE Token;
695 HANDLE Thread;
696 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
697
698 // Information class 14
699 typedef struct _POOLED_USAGE_AND_LIMITS_
700 {
701 ULONG PeakPagedPoolUsage;
702 ULONG PagedPoolUsage;
703 ULONG PagedPoolLimit;
704 ULONG PeakNonPagedPoolUsage;
705 ULONG NonPagedPoolUsage;
706 ULONG NonPagedPoolLimit;
707 ULONG PeakPagefileUsage;
708 ULONG PagefileUsage;
709 ULONG PagefileLimit;
710 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
711
712 // Information class 15
713 typedef struct _PROCESS_WS_WATCH_INFORMATION
714 {
715 PVOID FaultingPc;
716 PVOID FaultingVa;
717 } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
718
719 // Information class 18
720 typedef struct _PROCESS_PRIORITY_CLASS
721 {
722 BOOLEAN Foreground;
723 UCHAR PriorityClass;
724 } PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;
725
726 // Information class 23
727 typedef struct _PROCESS_DEVICEMAP_INFORMATION
728 {
729 union {
730 struct {
731 HANDLE DirectoryHandle;
732 } Set;
733 struct {
734 ULONG DriveMap;
735 UCHAR DriveType[32];
736 } Query;
737 };
738 } PROCESS_DEVICEMAP_INFORMATION, *pPROCESS_DEVICEMAP_INFORMATION;
739
740 // Information class 24
741 typedef struct _PROCESS_SESSION_INFORMATION
742 {
743 ULONG SessionId;
744 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
745
746 // thread information
747
748 // incompatible with MS NT
749
750 typedef struct _THREAD_BASIC_INFORMATION
751 {
752 NTSTATUS ExitStatus;
753 PVOID TebBaseAddress; // PNT_TIB (GN)
754 CLIENT_ID ClientId;
755 KAFFINITY AffinityMask;
756 KPRIORITY Priority;
757 KPRIORITY BasePriority;
758 } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
759
760
761 // file information
762
763 typedef struct _FILE_BASIC_INFORMATION
764 {
765 LARGE_INTEGER CreationTime;
766 LARGE_INTEGER LastAccessTime;
767 LARGE_INTEGER LastWriteTime;
768 LARGE_INTEGER ChangeTime;
769 ULONG FileAttributes;
770 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
771
772 typedef struct _FILE_STANDARD_INFORMATION
773 {
774 LARGE_INTEGER AllocationSize;
775 LARGE_INTEGER EndOfFile;
776 ULONG NumberOfLinks;
777 BOOLEAN DeletePending;
778 BOOLEAN Directory;
779 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
780
781 typedef struct _FILE_POSITION_INFORMATION
782 {
783 LARGE_INTEGER CurrentByteOffset;
784 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
785
786 typedef struct _FILE_ALIGNMENT_INFORMATION
787 {
788 ULONG AlignmentRequirement;
789 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
790
791 typedef struct _FILE_DISPOSITION_INFORMATION
792 {
793 BOOLEAN DoDeleteFile;
794 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
795
796 typedef struct _FILE_END_OF_FILE_INFORMATION
797 {
798 LARGE_INTEGER EndOfFile;
799 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
800
801 typedef struct _FILE_NETWORK_OPEN_INFORMATION
802 {
803 TIME CreationTime;
804 TIME LastAccessTime;
805 TIME LastWriteTime;
806 TIME ChangeTime;
807 LARGE_INTEGER AllocationSize;
808 LARGE_INTEGER EndOfFile;
809 ULONG FileAttributes;
810 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
811
812 typedef struct _FILE_FULL_EA_INFORMATION
813 {
814 ULONG NextEntryOffset;
815 UCHAR Flags;
816 UCHAR EaNameLength;
817 USHORT EaValueLength;
818 CHAR EaName[1];
819 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
820
821
822 typedef struct _FILE_EA_INFORMATION {
823 ULONG EaSize;
824 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
825
826
827 typedef struct _FILE_GET_EA_INFORMATION {
828 ULONG NextEntryOffset;
829 UCHAR EaNameLength;
830 CHAR EaName[0];
831 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
832
833 typedef struct _FILE_STREAM_INFORMATION {
834 ULONG NextEntryOffset;
835 ULONG StreamNameLength;
836 LARGE_INTEGER StreamSize;
837 LARGE_INTEGER StreamAllocationSize;
838 WCHAR StreamName[0];
839 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
840
841 typedef struct _FILE_ALLOCATION_INFORMATION {
842 LARGE_INTEGER AllocationSize;
843 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
844
845 typedef struct _FILE_NAME_INFORMATION {
846 ULONG FileNameLength;
847 WCHAR FileName[0];
848 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
849
850 typedef struct _FILE_NAMES_INFORMATION
851 {
852 ULONG NextEntryOffset;
853 ULONG FileIndex;
854 ULONG FileNameLength;
855 WCHAR FileName[0];
856 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
857
858
859 typedef struct _FILE_RENAME_INFORMATION {
860 BOOLEAN Replace;
861 HANDLE RootDir;
862 ULONG FileNameLength;
863 WCHAR FileName[0];
864 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
865
866
867 typedef struct _FILE_INTERNAL_INFORMATION {
868 LARGE_INTEGER IndexNumber;
869 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
870
871 typedef struct _FILE_ACCESS_INFORMATION {
872 ACCESS_MASK AccessFlags;
873 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
874
875
876 typedef struct _FILE_MODE_INFORMATION {
877 ULONG Mode;
878 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
879
880
881 typedef struct _FILE_PIPE_INFORMATION {
882 ULONG ReadMode;
883 ULONG CompletionMode;
884 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
885
886 typedef struct _FILE_PIPE_LOCAL_INFORMATION {
887 ULONG NamedPipeType;
888 ULONG NamedPipeConfiguration;
889 ULONG MaximumInstances;
890 ULONG CurrentInstances;
891 ULONG InboundQuota;
892 ULONG ReadDataAvailable;
893 ULONG OutboundQuota;
894 ULONG WriteQuotaAvailable;
895 ULONG NamedPipeState;
896 ULONG NamedPipeEnd;
897 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
898
899 typedef struct _FILE_PIPE_REMOTE_INFORMATION {
900 LARGE_INTEGER CollectDataTime;
901 ULONG MaximumCollectionCount;
902 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
903
904 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
905 ULONG MaxMessageSize;
906 ULONG Unknown; /* ?? */
907 ULONG NextSize;
908 ULONG MessageCount;
909 LARGE_INTEGER Timeout;
910 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
911
912 typedef struct _FILE_MAILSLOT_SET_INFORMATION {
913 LARGE_INTEGER Timeout;
914 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
915
916 typedef struct _FILE_COMPRESSION_INFORMATION {
917 LARGE_INTEGER CompressedFileSize;
918 USHORT CompressionFormat;
919 UCHAR CompressionUnitShift;
920 UCHAR ChunkShift;
921 UCHAR ClusterShift;
922 UCHAR Reserved[3];
923 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
924
925 typedef struct _FILE_COMPLETION_INFORMATION { // Information Class 30
926 HANDLE IoCompletionHandle;
927 ULONG CompletionKey;
928 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
929
930 typedef struct _FILE_ALL_INFORMATION {
931 FILE_BASIC_INFORMATION BasicInformation;
932 FILE_STANDARD_INFORMATION StandardInformation;
933 FILE_INTERNAL_INFORMATION InternalInformation;
934 FILE_EA_INFORMATION EaInformation;
935 FILE_ACCESS_INFORMATION AccessInformation;
936 FILE_POSITION_INFORMATION PositionInformation;
937 FILE_MODE_INFORMATION ModeInformation;
938 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
939 FILE_NAME_INFORMATION NameInformation;
940 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
941
942
943 // file system information structures
944
945 typedef struct _FILE_FS_DEVICE_INFORMATION {
946 DEVICE_TYPE DeviceType;
947 ULONG Characteristics;
948 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
949
950
951 typedef struct _FILE_FS_VOLUME_INFORMATION {
952 TIME VolumeCreationTime;
953 ULONG VolumeSerialNumber;
954 ULONG VolumeLabelLength;
955 BOOLEAN SupportsObjects;
956 WCHAR VolumeLabel[0];
957 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
958
959 typedef struct _FILE_FS_SIZE_INFORMATION {
960 LARGE_INTEGER TotalAllocationUnits;
961 LARGE_INTEGER AvailableAllocationUnits;
962 ULONG SectorsPerAllocationUnit;
963 ULONG BytesPerSector;
964 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
965
966 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
967 ULONG FileSystemAttributes;
968 LONG MaximumComponentNameLength;
969 ULONG FileSystemNameLength;
970 WCHAR FileSystemName[0];
971 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
972
973 /*
974 FileSystemAttributes is one of the following values:
975
976 FILE_CASE_SENSITIVE_SEARCH 0x00000001
977 FILE_CASE_PRESERVED_NAMES 0x00000002
978 FILE_UNICODE_ON_DISK 0x00000004
979 FILE_PERSISTENT_ACLS 0x00000008
980 FILE_FILE_COMPRESSION 0x00000010
981 FILE_VOLUME_QUOTAS 0x00000020
982 FILE_VOLUME_IS_COMPRESSED 0x00008000
983 */
984 typedef struct _FILE_FS_LABEL_INFORMATION {
985 ULONG VolumeLabelLength;
986 WCHAR VolumeLabel[0];
987 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
988
989
990 typedef struct _FILE_DIRECTORY_INFORMATION {
991 ULONG NextEntryOffset;
992 ULONG FileIndex;
993 TIME CreationTime;
994 TIME LastAccessTime;
995 TIME LastWriteTime;
996 TIME ChangeTime;
997 LARGE_INTEGER EndOfFile;
998 LARGE_INTEGER AllocationSize;
999 ULONG FileAttributes;
1000 ULONG FileNameLength;
1001 WCHAR FileName[0];
1002 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
1003
1004 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
1005 ULONG NextEntryOffset;
1006 ULONG FileIndex;
1007 TIME CreationTime;
1008 TIME LastAccessTime;
1009 TIME LastWriteTime;
1010 TIME ChangeTime;
1011 LARGE_INTEGER EndOfFile;
1012 LARGE_INTEGER AllocationSize;
1013 ULONG FileAttributes;
1014 ULONG FileNameLength;
1015 ULONG EaSize;
1016 WCHAR FileName[0]; // variable size
1017 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
1018 FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
1019
1020
1021 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
1022 ULONG NextEntryOffset;
1023 ULONG FileIndex;
1024 TIME CreationTime;
1025 TIME LastAccessTime;
1026 TIME LastWriteTime;
1027 TIME ChangeTime;
1028 LARGE_INTEGER EndOfFile;
1029 LARGE_INTEGER AllocationSize;
1030 ULONG FileAttributes;
1031 ULONG FileNameLength;
1032 ULONG EaSize;
1033 CHAR ShortNameLength;
1034 WCHAR ShortName[12]; // 8.3 name
1035 WCHAR FileName[0];
1036 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
1037 FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
1038
1039 /*
1040 NotifyFilter / CompletionFilter:
1041
1042 FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
1043 FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
1044 FILE_NOTIFY_CHANGE_NAME 0x00000003
1045 FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
1046 FILE_NOTIFY_CHANGE_SIZE 0x00000008
1047 FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
1048 FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
1049 FILE_NOTIFY_CHANGE_CREATION 0x00000040
1050 FILE_NOTIFY_CHANGE_EA 0x00000080
1051 FILE_NOTIFY_CHANGE_SECURITY 0x00000100
1052 FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
1053 FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
1054 FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
1055 */
1056
1057 typedef struct _FILE_NOTIFY_INFORMATION {
1058 ULONG Action;
1059 ULONG FileNameLength;
1060 WCHAR FileName[0];
1061 } FILE_NOTIFY_INFORMATION;
1062
1063 #define FSCTL_GET_VOLUME_BITMAP 0x9006F
1064 #define FSCTL_GET_RETRIEVAL_POINTERS 0x90073
1065 #define FSCTL_MOVE_FILE 0x90074
1066
1067 typedef struct _MAPPING_PAIR
1068 {
1069 ULONGLONG Vcn;
1070 ULONGLONG Lcn;
1071 } MAPPING_PAIR, *PMAPPING_PAIR;
1072
1073 typedef struct _GET_RETRIEVAL_DESCRIPTOR
1074 {
1075 ULONG NumberOfPairs;
1076 ULONGLONG StartVcn;
1077 MAPPING_PAIR Pair[0]; // variable size
1078 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
1079
1080 typedef struct _MOVEFILE_DESCRIPTOR
1081 {
1082 HANDLE FileHandle;
1083 ULONG Reserved;
1084 LARGE_INTEGER StartVcn;
1085 LARGE_INTEGER TargetLcn;
1086 ULONG NumVcns;
1087 ULONG Reserved1;
1088 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
1089
1090 typedef struct _SECTION_BASIC_INFORMATION
1091 {
1092 PVOID BaseAddress;
1093 ULONG Attributes;
1094 LARGE_INTEGER Size;
1095 } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
1096
1097 typedef enum _SECTION_INFORMATION_CLASS
1098 {
1099 SectionBasicInformation,
1100 SectionImageInformation,
1101 } SECTION_INFORMATION_CLASS;
1102
1103 // shutdown action
1104
1105 typedef enum SHUTDOWN_ACTION_TAG {
1106 ShutdownNoReboot,
1107 ShutdownReboot,
1108 ShutdownPowerOff
1109 } SHUTDOWN_ACTION;
1110
1111 typedef enum _IO_COMPLETION_INFORMATION_CLASS {
1112 IoCompletionBasicInformation
1113 } IO_COMPLETION_INFORMATION_CLASS;
1114
1115 typedef struct _IO_COMPLETION_BASIC_INFORMATION {
1116 LONG Depth;
1117 } IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION;
1118
1119 #else /* __USE_W32API */
1120
1121 #define DebugDbgLoadSymbols ((DEBUG_CONTROL_CODE)0xffffffff)
1122
1123 #endif /* __USE_W32API */
1124
1125 #ifdef __USE_W32API
1126 #include <ddk/ntddk.h>
1127 #endif /* __USE_W32API */
1128 #ifndef NtCurrentProcess
1129 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
1130 #endif /* NtCurrentProcess */
1131 #ifndef NtCurrentThread
1132 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
1133 #endif /* NtCurrentThread */
1134
1135 #ifdef __GNUC__
1136 #ifdef __NTOSKRNL__
1137 extern ULONG EXPORTED NtBuildNumber;
1138 #else
1139 extern ULONG IMPORTED NtBuildNumber;
1140 #endif
1141 #else
1142 /* Microsoft-style declarations */
1143 #ifdef __NTOSKRNL__
1144 extern EXPORTED ULONG NtBuildNumber;
1145 #else
1146 extern IMPORTED ULONG NtBuildNumber;
1147 #endif
1148 #endif /* __GNUC__ */
1149
1150
1151 // event access mask
1152
1153 #define EVENT_READ_ACCESS 1
1154 #define EVENT_WRITE_ACCESS 2
1155
1156 //process query / set information class
1157
1158 #define ProcessBasicInformation 0
1159 #define ProcessQuotaLimits 1
1160 #define ProcessIoCounters 2
1161 #define ProcessVmCounters 3
1162 #define ProcessTimes 4
1163 #define ProcessBasePriority 5
1164 #define ProcessRaisePriority 6
1165 #define ProcessDebugPort 7
1166 #define ProcessExceptionPort 8
1167 #define ProcessAccessToken 9
1168 #define ProcessLdtInformation 10
1169 #define ProcessLdtSize 11
1170 #define ProcessDefaultHardErrorMode 12
1171 #define ProcessIoPortHandlers 13
1172 #define ProcessPooledUsageAndLimits 14
1173 #define ProcessWorkingSetWatch 15
1174 #define ProcessUserModeIOPL 16
1175 #define ProcessEnableAlignmentFaultFixup 17
1176 #define ProcessPriorityClass 18
1177 #define ProcessWx86Information 19
1178 #define ProcessHandleCount 20
1179 #define ProcessAffinityMask 21
1180 #define ProcessPriorityBoost 22
1181 #define ProcessDeviceMap 23
1182 #define ProcessSessionInformation 24
1183 #define ProcessForegroundInformation 25
1184 #define ProcessWow64Information 26
1185 /* ReactOS private. */
1186 #define ProcessImageFileName 27
1187 #define ProcessDesktop 28
1188 #define MaxProcessInfoClass 29
1189
1190 /*
1191 * thread query / set information class
1192 */
1193 #define ThreadBasicInformation 0
1194 #define ThreadTimes 1
1195 #define ThreadPriority 2
1196 #define ThreadBasePriority 3
1197 #define ThreadAffinityMask 4
1198 #define ThreadImpersonationToken 5
1199 #define ThreadDescriptorTableEntry 6
1200 #define ThreadEnableAlignmentFaultFixup 7
1201 #define ThreadEventPair 8
1202 #define ThreadQuerySetWin32StartAddress 9
1203 #define ThreadZeroTlsCell 10
1204 #define ThreadPerformanceCount 11
1205 #define ThreadAmILastThread 12
1206 #define ThreadIdealProcessor 13
1207 #define ThreadPriorityBoost 14
1208 #define ThreadSetTlsArrayAddress 15
1209 #define ThreadIsIoPending 16
1210 #define ThreadHideFromDebugger 17
1211 #define MaxThreadInfoClass 17
1212
1213
1214 typedef struct _ATOM_TABLE_INFORMATION
1215 {
1216 ULONG NumberOfAtoms;
1217 RTL_ATOM Atoms[1];
1218 } ATOM_TABLE_INFORMATION, *PATOM_TABLE_INFORMATION;
1219
1220
1221 // mutant information
1222
1223 typedef enum _MUTANT_INFORMATION_CLASS
1224 {
1225 MutantBasicInformation = 0
1226 } MUTANT_INFORMATION_CLASS;
1227
1228 typedef struct _MUTANT_BASIC_INFORMATION
1229 {
1230 LONG Count;
1231 BOOLEAN Owned;
1232 BOOLEAN Abandoned;
1233 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
1234
1235
1236 // SystemTimeOfDayInformation (3)
1237 typedef
1238 struct _SYSTEM_TIMEOFDAY_INFORMATION
1239 {
1240 LARGE_INTEGER BootTime;
1241 LARGE_INTEGER CurrentTime;
1242 LARGE_INTEGER TimeZoneBias;
1243 ULONG TimeZoneId;
1244 ULONG Reserved;
1245 } SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION;
1246
1247 // SystemPathInformation (4)
1248 // IT DOES NOT WORK
1249 typedef
1250 struct _SYSTEM_PATH_INFORMATION
1251 {
1252 PVOID Dummy;
1253
1254 } SYSTEM_PATH_INFORMATION, * PSYSTEM_PATH_INFORMATION;
1255
1256 // SystemProcessInformation (5)
1257
1258 #ifndef __USE_W32API
1259
1260 typedef struct _SYSTEM_THREADS {
1261 LARGE_INTEGER KernelTime;
1262 LARGE_INTEGER UserTime;
1263 LARGE_INTEGER CreateTime;
1264 ULONG WaitTime;
1265 PVOID StartAddress;
1266 CLIENT_ID ClientId;
1267 KPRIORITY Priority;
1268 KPRIORITY BasePriority;
1269 ULONG ContextSwitchCount;
1270 THREAD_STATE State;
1271 KWAIT_REASON WaitReason;
1272 } SYSTEM_THREADS, *PSYSTEM_THREADS;
1273
1274 #endif /* __USE_W32API */
1275
1276 typedef struct _SYSTEM_PROCESSES_NT4
1277 {
1278 SIZE_T NextEntryDelta;
1279 ULONG ThreadCount;
1280 ULONG Reserved1[6];
1281 TIME CreateTime;
1282 TIME UserTime;
1283 TIME KernelTime;
1284 UNICODE_STRING ProcessName;
1285 KPRIORITY BasePriority;
1286 ULONG ProcessId;
1287 ULONG InheritedFromProcessId;
1288 ULONG HandleCount;
1289 ULONG Reserved2[2];
1290 VM_COUNTERS VmCounters;
1291 SYSTEM_THREADS Threads[ANYSIZE_ARRAY];
1292 } SYSTEM_PROCESSES_NT4, *PSYSTEM_PROCESSES_NT4;
1293
1294 typedef struct _SYSTEM_PROCESSES_NT5
1295 {
1296 SIZE_T NextEntryDelta;
1297 ULONG ThreadCount;
1298 ULONG Reserved1[6];
1299 TIME CreateTime;
1300 TIME UserTime;
1301 TIME KernelTime;
1302 UNICODE_STRING ProcessName;
1303 KPRIORITY BasePriority;
1304 ULONG ProcessId;
1305 ULONG InheritedFromProcessId;
1306 ULONG HandleCount;
1307 ULONG Reserved2[2];
1308 VM_COUNTERS VmCounters;
1309 IO_COUNTERS IoCounters;
1310 SYSTEM_THREADS Threads[ANYSIZE_ARRAY];
1311 } SYSTEM_PROCESSES_NT5, *PSYSTEM_PROCESSES_NT5;
1312
1313 #ifndef __USE_W32API
1314
1315 /* Not sure. What version are we emulating? */
1316 typedef SYSTEM_PROCESSES_NT5 SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;
1317
1318 #endif /* __USE_W32API */
1319
1320 // SystemCallCountInformation (6)
1321 typedef
1322 struct _SYSTEM_SDT_INFORMATION
1323 {
1324 ULONG BufferLength;
1325 ULONG NumberOfSystemServiceTables;
1326 ULONG NumberOfServices [1];
1327 ULONG ServiceCounters [1];
1328
1329 } SYSTEM_SDT_INFORMATION, *PSYSTEM_SDT_INFORMATION;
1330
1331 // SystemDeviceInformation (7)
1332 typedef
1333 struct _SYSTEM_DEVICE_INFORMATION
1334 {
1335 ULONG NumberOfDisks;
1336 ULONG NumberOfFloppies;
1337 ULONG NumberOfCdRoms;
1338 ULONG NumberOfTapes;
1339 ULONG NumberOfSerialPorts;
1340 ULONG NumberOfParallelPorts;
1341 } SYSTEM_DEVICE_INFORMATION, *PSYSTEM_DEVICE_INFORMATION;
1342
1343 // SystemProcessorPerformanceInformation (8)
1344 // (one per processor in the system)
1345 typedef
1346 struct _SYSTEM_PROCESSORTIME_INFO
1347 {
1348 TIME TotalProcessorRunTime;
1349 TIME TotalProcessorTime;
1350 TIME TotalProcessorUserTime;
1351 TIME TotalDPCTime;
1352 TIME TotalInterruptTime;
1353 ULONG TotalInterrupts;
1354 ULONG Unused;
1355
1356 } SYSTEM_PROCESSORTIME_INFO, *PSYSTEM_PROCESSORTIME_INFO;
1357
1358 // SystemFlagsInformation (9)
1359 typedef
1360 struct _SYSTEM_FLAGS_INFORMATION
1361 {
1362 ULONG Flags;
1363
1364 } SYSTEM_FLAGS_INFORMATION, * PSYSTEM_FLAGS_INFORMATION;
1365
1366 #define FLG_STOP_ON_EXCEPTION 0x00000001
1367 #define FLG_SHOW_LDR_SNAPS 0x00000002
1368 #define FLG_DEBUG_INITIAL_COMMAND 0x00000004
1369 #define FLG_STOP_ON_HANG_GUI 0x00000008
1370 #define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
1371 #define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
1372 #define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
1373 #define FLG_HEAP_VALIDATE_ALL 0x00000080
1374 #define FLG_POOL_ENABLE_TAIL_CHECK 0x00000100
1375 #define FLG_POOL_ENABLE_FREE_CHECK 0x00000200
1376 #define FLG_POOL_ENABLE_TAGGING 0x00000400
1377 #define FLG_HEAP_ENABLE_TAGGING 0x00000800
1378 #define FLG_USER_STACK_TRACE_DB 0x00001000
1379 #define FLG_KERNEL_STACK_TRACE_DB 0x00002000
1380 #define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
1381 #define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
1382 #define FLG_IGNORE_DEBUG_PRIV 0x00010000
1383 #define FLG_ENABLE_CSRDEBUG 0x00020000
1384 #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
1385 #define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
1386 #define FLG_HEAP_ENABLE_CALL_TRACING 0x00100000
1387 #define FLG_HEAP_DISABLE_COALESCING 0x00200000
1388 #define FLG_ENABLE_CLOSE_EXCEPTION 0x00400000
1389 #define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
1390 #define FLG_UNKNOWN_01000000 0x01000000
1391 #define FLG_UNKNOWN_02000000 0x02000000
1392 #define FLG_UNKNOWN_04000000 0x04000000
1393 #define FLG_ENABLE_DBGPRINT_BUFFERING 0x08000000
1394 #define FLG_UNKNOWN_10000000 0x10000000
1395 #define FLG_UNKNOWN_20000000 0x20000000
1396 #define FLG_UNKNOWN_40000000 0x40000000
1397 #define FLG_UNKNOWN_80000000 0x80000000
1398
1399 // SystemCallTimeInformation (10)
1400 // UNKNOWN
1401
1402 // SystemLocksInformation (12)
1403 typedef
1404 struct _SYSTEM_RESOURCE_LOCK_ENTRY
1405 {
1406 ULONG ResourceAddress;
1407 ULONG Always1;
1408 ULONG Unknown;
1409 ULONG ActiveCount;
1410 ULONG ContentionCount;
1411 ULONG Unused[2];
1412 ULONG NumberOfSharedWaiters;
1413 ULONG NumberOfExclusiveWaiters;
1414
1415 } SYSTEM_RESOURCE_LOCK_ENTRY, *PSYSTEM_RESOURCE_LOCK_ENTRY;
1416
1417 typedef
1418 struct _SYSTEM_RESOURCE_LOCK_INFO
1419 {
1420 ULONG Count;
1421 SYSTEM_RESOURCE_LOCK_ENTRY Lock [1];
1422
1423 } SYSTEM_RESOURCE_LOCK_INFO, *PSYSTEM_RESOURCE_LOCK_INFO;
1424
1425 // SystemInformation13 (13)
1426 // UNKNOWN
1427
1428 // SystemInformation14 (14)
1429 // UNKNOWN
1430
1431 // SystemInformation15 (15)
1432 // UNKNOWN
1433
1434 // SystemInstructionEmulationInfo (19)
1435 typedef
1436 struct _SYSTEM_VDM_INFORMATION
1437 {
1438 ULONG VdmSegmentNotPresentCount;
1439 ULONG VdmINSWCount;
1440 ULONG VdmESPREFIXCount;
1441 ULONG VdmCSPREFIXCount;
1442 ULONG VdmSSPREFIXCount;
1443 ULONG VdmDSPREFIXCount;
1444 ULONG VdmFSPREFIXCount;
1445 ULONG VdmGSPREFIXCount;
1446 ULONG VdmOPER32PREFIXCount;
1447 ULONG VdmADDR32PREFIXCount;
1448 ULONG VdmINSBCount;
1449 ULONG VdmINSWV86Count;
1450 ULONG VdmOUTSBCount;
1451 ULONG VdmOUTSWCount;
1452 ULONG VdmPUSHFCount;
1453 ULONG VdmPOPFCount;
1454 ULONG VdmINTNNCount;
1455 ULONG VdmINTOCount;
1456 ULONG VdmIRETCount;
1457 ULONG VdmINBIMMCount;
1458 ULONG VdmINWIMMCount;
1459 ULONG VdmOUTBIMMCount;
1460 ULONG VdmOUTWIMMCount;
1461 ULONG VdmINBCount;
1462 ULONG VdmINWCount;
1463 ULONG VdmOUTBCount;
1464 ULONG VdmOUTWCount;
1465 ULONG VdmLOCKPREFIXCount;
1466 ULONG VdmREPNEPREFIXCount;
1467 ULONG VdmREPPREFIXCount;
1468 ULONG VdmHLTCount;
1469 ULONG VdmCLICount;
1470 ULONG VdmSTICount;
1471 ULONG VdmBopCount;
1472
1473 } SYSTEM_VDM_INFORMATION, *PSYSTEM_VDM_INFORMATION;
1474
1475 // SystemInformation20 (20)
1476 // UNKNOWN
1477
1478 // SystemPoolTagInformation (22)
1479 // found by Klaus P. Gerlicher
1480 // (implemented only in checked builds)
1481 typedef
1482 struct _POOL_TAG_STATS
1483 {
1484 ULONG AllocationCount;
1485 ULONG FreeCount;
1486 ULONG SizeBytes;
1487
1488 } POOL_TAG_STATS;
1489
1490 typedef
1491 struct _SYSTEM_POOL_TAG_ENTRY
1492 {
1493 ULONG Tag;
1494 POOL_TAG_STATS Paged;
1495 POOL_TAG_STATS NonPaged;
1496
1497 } SYSTEM_POOL_TAG_ENTRY, * PSYSTEM_POOL_TAG_ENTRY;
1498
1499 typedef
1500 struct _SYSTEM_POOL_TAG_INFO
1501 {
1502 ULONG Count;
1503 SYSTEM_POOL_TAG_ENTRY PoolEntry [1];
1504
1505 } SYSTEM_POOL_TAG_INFO, *PSYSTEM_POOL_TAG_INFO;
1506
1507 // SystemProcessorScheduleInfo (23)
1508 typedef
1509 struct _SYSTEM_PROCESSOR_SCHEDULE_INFO
1510 {
1511 ULONG nContextSwitches;
1512 ULONG nDPCQueued;
1513 ULONG nDPCRate;
1514 ULONG TimerResolution;
1515 ULONG nDPCBypasses;
1516 ULONG nAPCBypasses;
1517
1518 } SYSTEM_PROCESSOR_SCHEDULE_INFO, *PSYSTEM_PROCESSOR_SCHEDULE_INFO;
1519
1520 // SystemInformation25 (25)
1521 // UNKNOWN
1522
1523 // SystemProcessorFaultCountInfo (33)
1524 typedef
1525 struct _SYSTEM_PROCESSOR_FAULT_INFO
1526 {
1527 ULONG nAlignmentFixup;
1528 ULONG nExceptionDispatches;
1529 ULONG nFloatingEmulation;
1530 ULONG Unknown;
1531
1532 } SYSTEM_PROCESSOR_FAULT_INFO, *PSYSTEM_PROCESSOR_FAULT_INFO;
1533
1534 // SystemCrashDumpStateInfo (34)
1535 //
1536
1537 // SystemDebuggerInformation (35)
1538 typedef
1539 struct _SYSTEM_DEBUGGER_INFO
1540 {
1541 BOOLEAN KdDebuggerEnabled;
1542 BOOLEAN KdDebuggerPresent;
1543
1544 } SYSTEM_DEBUGGER_INFO, *PSYSTEM_DEBUGGER_INFO;
1545
1546 // SystemInformation36 (36)
1547 // UNKNOWN
1548
1549 // SystemQuotaInformation (37)
1550 typedef
1551 struct _SYSTEM_QUOTA_INFORMATION
1552 {
1553 ULONG CmpGlobalQuota;
1554 ULONG CmpGlobalQuotaUsed;
1555 ULONG MmSizeofPagedPoolInBytes;
1556
1557 } SYSTEM_QUOTA_INFORMATION, *PSYSTEM_QUOTA_INFORMATION;
1558
1559 // (49)
1560 // UNKNOWN
1561
1562 // SystemVerifierInformation (51)
1563 // UNKNOWN
1564
1565 // SystemAddVerifier (52)
1566 // UNKNOWN
1567
1568 // wait type
1569
1570 #define WaitAll 0
1571 #define WaitAny 1
1572
1573 // number of wait objects
1574
1575 #define THREAD_WAIT_OBJECTS 3
1576 //#define MAXIMUM_WAIT_OBJECTS 64
1577
1578 // object type access rights
1579
1580 #define OBJECT_TYPE_CREATE 0x0001
1581 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1582
1583 // directory access rights
1584
1585 #ifndef __USE_W32API
1586 #define DIRECTORY_QUERY 0x0001
1587 #define DIRECTORY_TRAVERSE 0x0002
1588 #define DIRECTORY_CREATE_OBJECT 0x0004
1589 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
1590 #endif
1591
1592 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
1593
1594 // symbolic link access rights
1595
1596 #define SYMBOLIC_LINK_QUERY 0x0001
1597 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
1598
1599
1600 /* object information class */
1601
1602 #ifndef __USE_W32API
1603
1604 typedef enum _OBJECT_INFORMATION_CLASS
1605 {
1606 ObjectBasicInformation,
1607 ObjectNameInformation,
1608 ObjectTypeInformation,
1609 ObjectAllTypesInformation,
1610 ObjectHandleInformation
1611 } OBJECT_INFORMATION_CLASS;
1612
1613
1614 // directory information
1615
1616 typedef struct _DIRECTORY_BASIC_INFORMATION
1617 {
1618 UNICODE_STRING ObjectName;
1619 UNICODE_STRING ObjectTypeName; // Directory, Device ...
1620 } DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION;
1621
1622
1623 // power information levels
1624 typedef enum _POWER_INFORMATION_LEVEL {
1625 SystemPowerPolicyAc,
1626 SystemPowerPolicyDc,
1627 VerifySystemPolicyAc,
1628 VerifySystemPolicyDc,
1629 SystemPowerCapabilities,
1630 SystemBatteryState,
1631 SystemPowerStateHandler,
1632 ProcessorStateHandler,
1633 SystemPowerPolicyCurrent,
1634 AdministratorPowerPolicy,
1635 SystemReserveHiberFile,
1636 ProcessorInformation,
1637 SystemPowerInformationData
1638 } POWER_INFORMATION_LEVEL;
1639
1640 #endif /* __USE_W32API */
1641
1642 /*
1643 Action is one of the following values:
1644
1645 FILE_ACTION_ADDED 0x00000001
1646 FILE_ACTION_REMOVED 0x00000002
1647 FILE_ACTION_MODIFIED 0x00000003
1648 FILE_ACTION_RENAMED_OLD_NAME 0x00000004
1649 FILE_ACTION_RENAMED_NEW_NAME 0x00000005
1650 FILE_ACTION_ADDED_STREAM 0x00000006
1651 FILE_ACTION_REMOVED_STREAM 0x00000007
1652 FILE_ACTION_MODIFIED_STREAM 0x00000008
1653
1654 */
1655
1656
1657 // File System Control commands ( related to defragging )
1658
1659 #define FSCTL_READ_MFT_RECORD 0x90068 // NTFS only
1660
1661 typedef struct _BITMAP_DESCRIPTOR
1662 {
1663 ULONGLONG StartLcn;
1664 ULONGLONG ClustersToEndOfVol;
1665 BYTE Map[0]; // variable size
1666 } BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR;
1667
1668
1669 //typedef enum _TIMER_TYPE
1670 //{
1671 // NotificationTimer,
1672 // SynchronizationTimer
1673 //} TIMER_TYPE;
1674
1675 typedef struct _TIMER_BASIC_INFORMATION
1676 {
1677 LARGE_INTEGER TimeRemaining;
1678 BOOLEAN SignalState;
1679 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
1680
1681 typedef enum _TIMER_INFORMATION_CLASS
1682 {
1683 TimerBasicInformation
1684 } TIMER_INFORMATION_CLASS;
1685
1686 #ifndef __USE_W32API
1687
1688 typedef enum
1689 {
1690 UNUSED_MSG_TYPE = 0x0, /* ReactOS */
1691 LPC_NEW_MESSAGE = 0x0, /* NT */
1692 LPC_REQUEST = 0x1,
1693 LPC_REPLY = 0x2,
1694 LPC_DATAGRAM = 0x3,
1695 LPC_LOST_REPLY = 0x4,
1696 LPC_PORT_CLOSED = 0x5,
1697 LPC_CLIENT_DIED = 0x6,
1698 LPC_EXCEPTION = 0x7,
1699 LPC_DEBUG_EVENT = 0x8,
1700 LPC_ERROR_EVENT = 0x9,
1701 LPC_CONNECTION_REQUEST = 0xa,
1702 LPC_CONNECTION_REFUSED = 0xb
1703
1704 } LPC_TYPE, *PLPC_TYPE;
1705
1706 typedef struct _LPC_SECTION_WRITE
1707 {
1708 ULONG Length;
1709 HANDLE SectionHandle;
1710 ULONG SectionOffset;
1711 ULONG ViewSize;
1712 PVOID ViewBase;
1713 PVOID TargetViewBase;
1714 } LPC_SECTION_WRITE, *PLPC_SECTION_WRITE;
1715
1716 typedef struct _LPC_SECTION_READ
1717 {
1718 ULONG Length;
1719 ULONG ViewSize;
1720 PVOID ViewBase;
1721 } LPC_SECTION_READ, *PLPC_SECTION_READ;
1722
1723 typedef struct _LPC_MESSAGE
1724 {
1725 USHORT DataSize;
1726 USHORT MessageSize;
1727 USHORT MessageType;
1728 USHORT VirtualRangesOffset;
1729 CLIENT_ID ClientId;
1730 ULONG MessageId;
1731 ULONG SectionSize; /* CallbackID */
1732 } LPC_MESSAGE, *PLPC_MESSAGE;
1733
1734 #define LPC_MESSAGE_BASE_SIZE sizeof(LPC_MESSAGE)
1735
1736 #define PORT_MESSAGE_TYPE(m) (LPC_TYPE)((m).Header.MessageType)
1737
1738 #define PORT_MAX_DATA_LENGTH 0x104
1739 #define PORT_MAX_MESSAGE_LENGTH 0x148
1740
1741 #endif /* __USE_W32API */
1742
1743 #define MAX_MESSAGE_DATA (0x130)
1744
1745 typedef struct _LPC_MAX_MESSAGE
1746 {
1747 LPC_MESSAGE Header;
1748 BYTE Data[MAX_MESSAGE_DATA];
1749 } LPC_MAX_MESSAGE, *PLPC_MAX_MESSAGE;
1750
1751 typedef struct _LPC_PORT_BASIC_INFORMATION
1752 {
1753 DWORD Unknown0;
1754 DWORD Unknown1;
1755 DWORD Unknown2;
1756 DWORD Unknown3;
1757 DWORD Unknown4;
1758 DWORD Unknown5;
1759 DWORD Unknown6;
1760 DWORD Unknown7;
1761 DWORD Unknown8;
1762 DWORD Unknown9;
1763 DWORD Unknown10;
1764 DWORD Unknown11;
1765 DWORD Unknown12;
1766 DWORD Unknown13;
1767
1768 } LPC_PORT_BASIC_INFORMATION, * PLPC_PORT_BASIC_INFORMATION;
1769
1770
1771 typedef struct _KINTERRUPT
1772 {
1773 ULONG Vector;
1774 KAFFINITY ProcessorEnableMask;
1775 PKSPIN_LOCK IrqLock;
1776 BOOLEAN Shareable;
1777 BOOLEAN FloatingSave;
1778 PKSERVICE_ROUTINE ServiceRoutine;
1779 PVOID ServiceContext;
1780 LIST_ENTRY Entry;
1781 KIRQL SynchLevel;
1782 } KINTERRUPT;
1783
1784 #ifndef __USE_W32API
1785
1786 typedef struct _KINTERRUPT *PKINTERRUPT;
1787
1788 #endif /* __USE_W32API */
1789
1790 /* BEGIN REACTOS ONLY */
1791
1792 typedef enum _TRAVERSE_METHOD {
1793 TraverseMethodPreorder,
1794 TraverseMethodInorder,
1795 TraverseMethodPostorder
1796 } TRAVERSE_METHOD;
1797
1798 typedef LONG STDCALL_FUNC
1799 (*PKEY_COMPARATOR)(IN PVOID Key1,
1800 IN PVOID Key2);
1801
1802 typedef BOOLEAN STDCALL_FUNC
1803 (*PTRAVERSE_ROUTINE)(IN PVOID Context,
1804 IN PVOID Key,
1805 IN PVOID Value);
1806
1807 struct _BINARY_TREE_NODE;
1808
1809 typedef struct _BINARY_TREE
1810 {
1811 struct _BINARY_TREE_NODE * RootNode;
1812 PKEY_COMPARATOR Compare;
1813 BOOLEAN UseNonPagedPool;
1814 union {
1815 NPAGED_LOOKASIDE_LIST NonPaged;
1816 PAGED_LOOKASIDE_LIST Paged;
1817 } List;
1818 union {
1819 KSPIN_LOCK NonPaged;
1820 FAST_MUTEX Paged;
1821 } Lock;
1822 } BINARY_TREE, *PBINARY_TREE;
1823
1824
1825 struct _SPLAY_TREE_NODE;
1826
1827 typedef struct _SPLAY_TREE
1828 {
1829 struct _SPLAY_TREE_NODE * RootNode;
1830 PKEY_COMPARATOR Compare;
1831 BOOLEAN Weighted;
1832 BOOLEAN UseNonPagedPool;
1833 union {
1834 NPAGED_LOOKASIDE_LIST NonPaged;
1835 PAGED_LOOKASIDE_LIST Paged;
1836 } List;
1837 union {
1838 KSPIN_LOCK NonPaged;
1839 FAST_MUTEX Paged;
1840 } Lock;
1841 PVOID Reserved[4];
1842 } SPLAY_TREE, *PSPLAY_TREE;
1843
1844
1845 typedef struct _HASH_TABLE
1846 {
1847 // Size of hash table in number of bits
1848 ULONG HashTableSize;
1849
1850 // Use non-paged pool memory?
1851 BOOLEAN UseNonPagedPool;
1852
1853 // Lock for this structure
1854 union {
1855 KSPIN_LOCK NonPaged;
1856 FAST_MUTEX Paged;
1857 } Lock;
1858
1859 // Pointer to array of hash buckets with splay trees
1860 PSPLAY_TREE HashTrees;
1861 } HASH_TABLE, *PHASH_TABLE;
1862
1863
1864 /* END REACTOS ONLY */
1865
1866 #endif