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