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