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