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