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