Fix indentation, remove trailing whitespace and sort prototypes.
[reactos.git] / reactos / include / ndk / umtypes.h
1 /*
2 * PROJECT: ReactOS Native Headers
3 * FILE: include/ndk/umtypes.h
4 * PURPOSE: Definitions needed for Native Headers if target is not Kernel-Mode.
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
6 * UPDATE HISTORY:
7 * Created 06/10/04
8 */
9
10 #ifndef _UMTYPES_H
11 #define _UMTYPES_H
12
13 /* DEPENDENCIES **************************************************************/
14 #include <winioctl.h>
15 #include <ntstatus.h>
16 #include <ddk/ntnls.h>
17 #define STATIC static
18
19 /* EXPORTED DATA *************************************************************/
20
21 /* CONSTANTS *****************************************************************/
22
23 /* NTAPI/NTOSAPI Define */
24 #define NTAPI __stdcall
25 #define NTOSAPI
26
27 /* Definitions for Object Creation -- winternl.h */
28 #define OBJ_INHERIT 2L
29 #define OBJ_PERMANENT 16L
30 #define OBJ_EXCLUSIVE 32L
31 #define OBJ_CASE_INSENSITIVE 64L
32 #define OBJ_OPENIF 128L
33 #define OBJ_OPENLINK 256L
34 #define OBJ_VALID_ATTRIBUTES 498L
35 #define InitializeObjectAttributes(p,n,a,r,s) { \
36 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
37 (p)->RootDirectory = (r); \
38 (p)->Attributes = (a); \
39 (p)->ObjectName = (n); \
40 (p)->SecurityDescriptor = (s); \
41 (p)->SecurityQualityOfService = NULL; \
42 }
43
44 /* Native API Return Value Macros */
45 #define NT_SUCCESS(x) ((x)>=0)
46 #define NT_WARNING(x) ((ULONG)(x)>>30==2)
47 #define NT_ERROR(x) ((ULONG)(x)>>30==3)
48
49 /* Object Access Rights FIXME: Some are in w32api's psdk..,is that normal ?*/
50 #define DIRECTORY_QUERY (0x0001)
51 #define DIRECTORY_TRAVERSE (0x0002)
52 #define DIRECTORY_CREATE_OBJECT (0x0004)
53 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
54 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
55 #define EVENT_QUERY_STATE (0x0001)
56 #define SEMAPHORE_QUERY_STATE (0x0001)
57 #define SYMBOLIC_LINK_QUERY 0x0001
58 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
59
60 /* I/O Control Codes for communicating with Mailslots */
61 #define FSCTL_MAILSLOT_PEEK \
62 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
63
64 /* I/O Control Codes for communicating with Pipes */
65 #define FSCTL_PIPE_ASSIGN_EVENT \
66 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
67
68 #define FSCTL_PIPE_DISCONNECT \
69 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
70
71 #define FSCTL_PIPE_LISTEN \
72 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
73
74 #define FSCTL_PIPE_PEEK \
75 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
76
77 #define FSCTL_PIPE_QUERY_EVENT \
78 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
79
80 #define FSCTL_PIPE_TRANSCEIVE \
81 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
82
83 #define FSCTL_PIPE_WAIT \
84 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
85
86 #define FSCTL_PIPE_IMPERSONATE \
87 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
88
89 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
90 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
91
92 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
93 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
94
95 #define FSCTL_PIPE_INTERNAL_READ \
96 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
97
98 #define FSCTL_PIPE_INTERNAL_WRITE \
99 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
100
101 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
102 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
103
104 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
105 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
106
107 /* Macros for current Process/Thread built-in 'special' ID */
108 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
109 #define ZwCurrentProcess() NtCurrentProcess()
110 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
111 #define ZwCurrentThread() NtCurrentThread()
112
113 /* Kernel Shared Data Constants */
114 #define PROCESSOR_FEATURE_MAX 64
115 #define SharedUserData ((KUSER_SHARED_DATA * CONST) USER_SHARED_DATA)
116
117 /* Paging Values on x86 */
118 #define PAGE_SIZE 0x1000
119 #define PAGE_SHIFT 12L
120
121 /* Run-Time Library (RTL) Registry Constants */
122 #define RTL_REGISTRY_ABSOLUTE 0
123 #define RTL_REGISTRY_SERVICES 1
124 #define RTL_REGISTRY_CONTROL 2
125 #define RTL_REGISTRY_WINDOWS_NT 3
126 #define RTL_REGISTRY_DEVICEMAP 4
127 #define RTL_REGISTRY_USER 5
128 #define RTL_REGISTRY_MAXIMUM 6
129 #define RTL_REGISTRY_HANDLE 0x40000000
130 #define RTL_REGISTRY_OPTIONAL 0x80000000
131 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
132 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
133 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
134 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
135 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
136 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
137 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
138
139 /* File Result Flags */
140 #define FILE_SUPERSEDED 0x00000000
141 #define FILE_OPENED 0x00000001
142 #define FILE_CREATED 0x00000002
143 #define FILE_OVERWRITTEN 0x00000003
144 #define FILE_EXISTS 0x00000004
145 #define FILE_DOES_NOT_EXIST 0x00000005
146
147 /* Pipe Flags */
148 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
149 #define FILE_PIPE_MESSAGE_MODE 0x00000001
150 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
151 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
152 #define FILE_PIPE_INBOUND 0x00000000
153 #define FILE_PIPE_OUTBOUND 0x00000001
154 #define FILE_PIPE_FULL_DUPLEX 0x00000002
155 #define FILE_PIPE_CLIENT_END 0x00000000
156 #define FILE_PIPE_SERVER_END 0x00000001
157
158 /* Device Charactertics */
159 #define FILE_REMOVABLE_MEDIA 0x00000001
160 #define FILE_REMOTE_DEVICE 0x00000010
161
162 /* SID Constants */
163 #define SID_MAX_SUB_AUTHORITIES 15
164
165 /* Version Constants */
166 #define VER_MINORVERSION 0x0000001
167 #define VER_MAJORVERSION 0x0000002
168 #define VER_BUILDNUMBER 0x0000004
169 #define VER_PLATFORMID 0x0000008
170 #define VER_SERVICEPACKMINOR 0x0000010
171 #define VER_SERVICEPACKMAJOR 0x0000020
172 #define VER_SUITENAME 0x0000040
173 #define VER_PRODUCT_TYPE 0x0000080
174 #define VER_PLATFORM_WIN32s 0
175 #define VER_PLATFORM_WIN32_WINDOWS 1
176 #define VER_PLATFORM_WIN32_NT 2
177 #define VER_EQUAL 1
178 #define VER_GREATER 2
179 #define VER_GREATER_EQUAL 3
180 #define VER_LESS 4
181 #define VER_LESS_EQUAL 5
182 #define VER_AND 6
183 #define VER_OR 7
184 #define VER_CONDITION_MASK 7
185 #define VER_NUM_BITS_PER_CONDITION_MASK 3
186
187 /* RTL String Hash Algorithms */
188 #define HASH_STRING_ALGORITHM_DEFAULT 0
189 #define HASH_STRING_ALGORITHM_X65599 1
190 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
191
192 /* List Macros */
193 static __inline
194 VOID
195 InitializeListHead(
196 IN PLIST_ENTRY ListHead)
197 {
198 ListHead->Flink = ListHead->Blink = ListHead;
199 }
200
201 static __inline
202 VOID
203 InsertHeadList(
204 IN PLIST_ENTRY ListHead,
205 IN PLIST_ENTRY Entry)
206 {
207 PLIST_ENTRY OldFlink;
208 OldFlink = ListHead->Flink;
209 Entry->Flink = OldFlink;
210 Entry->Blink = ListHead;
211 OldFlink->Blink = Entry;
212 ListHead->Flink = Entry;
213 }
214
215 static __inline
216 VOID
217 InsertTailList(
218 IN PLIST_ENTRY ListHead,
219 IN PLIST_ENTRY Entry)
220 {
221 PLIST_ENTRY OldBlink;
222 OldBlink = ListHead->Blink;
223 Entry->Flink = ListHead;
224 Entry->Blink = OldBlink;
225 OldBlink->Flink = Entry;
226 ListHead->Blink = Entry;
227 }
228
229 #define IsListEmpty(ListHead) \
230 ((ListHead)->Flink == (ListHead))
231
232 #define PopEntryList(ListHead) \
233 (ListHead)->Next; \
234 { \
235 PSINGLE_LIST_ENTRY _FirstEntry; \
236 _FirstEntry = (ListHead)->Next; \
237 if (_FirstEntry != NULL) \
238 (ListHead)->Next = _FirstEntry->Next; \
239 }
240
241 #define PushEntryList(_ListHead, _Entry) \
242 (_Entry)->Next = (_ListHead)->Next; \
243 (_ListHead)->Next = (_Entry); \
244
245 static __inline
246 BOOLEAN
247 RemoveEntryList(
248 IN PLIST_ENTRY Entry)
249 {
250 PLIST_ENTRY OldFlink;
251 PLIST_ENTRY OldBlink;
252
253 OldFlink = Entry->Flink;
254 OldBlink = Entry->Blink;
255 OldFlink->Blink = OldBlink;
256 OldBlink->Flink = OldFlink;
257 return (OldFlink == OldBlink);
258 }
259
260 static __inline
261 PLIST_ENTRY
262 RemoveHeadList(
263 IN PLIST_ENTRY ListHead)
264 {
265 PLIST_ENTRY Flink;
266 PLIST_ENTRY Entry;
267
268 Entry = ListHead->Flink;
269 Flink = Entry->Flink;
270 ListHead->Flink = Flink;
271 Flink->Blink = ListHead;
272 return Entry;
273 }
274
275 static __inline
276 PLIST_ENTRY
277 RemoveTailList(
278 IN PLIST_ENTRY ListHead)
279 {
280 PLIST_ENTRY Blink;
281 PLIST_ENTRY Entry;
282
283 Entry = ListHead->Blink;
284 Blink = Entry->Blink;
285 ListHead->Blink = Blink;
286 Blink->Flink = ListHead;
287 return Entry;
288 }
289
290 #define IsFirstEntry(ListHead, Entry) \
291 ((ListHead)->Flink == Entry)
292
293 #define IsLastEntry(ListHead, Entry) \
294 ((ListHead)->Blink == Entry)
295
296 /*
297 * Constant String Macro
298 */
299 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
300 { \
301 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
302 sizeof(__SOURCE_STRING__), \
303 (__SOURCE_STRING__) \
304 }
305
306 /* ENUMERATIONS **************************************************************/
307
308 /* Kernel Shared Data Values */
309 typedef enum _NT_PRODUCT_TYPE
310 {
311 NtProductWinNt = 1,
312 NtProductLanManNt,
313 NtProductServer
314 } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
315
316 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
317 {
318 StandardDesign,
319 NEC98x86,
320 EndAlternatives
321 } ALTERNATIVE_ARCHITECTURE_TYPE;
322
323 /* Run-Time Library (RTL) Enumerations */
324 typedef enum _TABLE_SEARCH_RESULT
325 {
326 TableEmptyTree,
327 TableFoundNode,
328 TableInsertAsLeft,
329 TableInsertAsRight
330 } TABLE_SEARCH_RESULT;
331
332 typedef enum _RTL_GENERIC_COMPARE_RESULTS
333 {
334 GenericLessThan,
335 GenericGreaterThan,
336 GenericEqual
337 } RTL_GENERIC_COMPARE_RESULTS;
338
339 /* Kernel or Native Enumerations used by Native API */
340 typedef enum _SECTION_INHERIT
341 {
342 ViewShare = 1,
343 ViewUnmap = 2
344 } SECTION_INHERIT;
345
346 typedef enum _POOL_TYPE
347 {
348 NonPagedPool,
349 PagedPool,
350 NonPagedPoolMustSucceed,
351 DontUseThisType,
352 NonPagedPoolCacheAligned,
353 PagedPoolCacheAligned,
354 NonPagedPoolCacheAlignedMustS,
355 MaxPoolType,
356 NonPagedPoolSession = 32,
357 PagedPoolSession,
358 NonPagedPoolMustSucceedSession,
359 DontUseThisTypeSession,
360 NonPagedPoolCacheAlignedSession,
361 PagedPoolCacheAlignedSession,
362 NonPagedPoolCacheAlignedMustSSession
363 } POOL_TYPE;
364
365 typedef enum _EVENT_TYPE
366 {
367 NotificationEvent,
368 SynchronizationEvent
369 } EVENT_TYPE;
370
371 typedef enum _TIMER_TYPE
372 {
373 NotificationTimer,
374 SynchronizationTimer
375 } TIMER_TYPE;
376
377 typedef enum _WAIT_TYPE
378 {
379 WaitAll,
380 WaitAny
381 } WAIT_TYPE;
382
383 typedef enum _INTERFACE_TYPE
384 {
385 InterfaceTypeUndefined = -1,
386 Internal,
387 Isa,
388 Eisa,
389 MicroChannel,
390 TurboChannel,
391 PCIBus,
392 VMEBus,
393 NuBus,
394 PCMCIABus,
395 CBus,
396 MPIBus,
397 MPSABus,
398 ProcessorInternal,
399 InternalPowerBus,
400 PNPISABus,
401 PNPBus,
402 MaximumInterfaceType
403 }INTERFACE_TYPE, *PINTERFACE_TYPE;
404
405 typedef enum _MODE
406 {
407 KernelMode,
408 UserMode,
409 MaximumMode
410 } MODE;
411
412 typedef enum _KWAIT_REASON
413 {
414 Executive,
415 FreePage,
416 PageIn,
417 PoolAllocation,
418 DelayExecution,
419 Suspended,
420 UserRequest,
421 WrExecutive,
422 WrFreePage,
423 WrPageIn,
424 WrPoolAllocation,
425 WrDelayExecution,
426 WrSuspended,
427 WrUserRequest,
428 WrEventPair,
429 WrQueue,
430 WrLpcReceive,
431 WrLpcReply,
432 WrVirtualMemory,
433 WrPageOut,
434 WrRendezvous,
435 Spare2,
436 WrGuardedMutex,
437 Spare4,
438 Spare5,
439 Spare6,
440 WrKernel,
441 WrResource,
442 WrPushLock,
443 WrMutex,
444 WrQuantumEnd,
445 WrDispatchInt,
446 WrPreempted,
447 WrYieldExecution,
448 MaximumWaitReason
449 } KWAIT_REASON;
450
451 typedef enum _KPROFILE_SOURCE
452 {
453 ProfileTime,
454 ProfileAlignmentFixup,
455 ProfileTotalIssues,
456 ProfilePipelineDry,
457 ProfileLoadInstructions,
458 ProfilePipelineFrozen,
459 ProfileBranchInstructions,
460 ProfileTotalNonissues,
461 ProfileDcacheMisses,
462 ProfileIcacheMisses,
463 ProfileCacheMisses,
464 ProfileBranchMispredictions,
465 ProfileStoreInstructions,
466 ProfileFpInstructions,
467 ProfileIntegerInstructions,
468 Profile2Issue,
469 Profile3Issue,
470 Profile4Issue,
471 ProfileSpecialInstructions,
472 ProfileTotalCycles,
473 ProfileIcacheIssues,
474 ProfileDcacheAccesses,
475 ProfileMemoryBarrierCycles,
476 ProfileLoadLinkedIssues,
477 ProfileMaximum
478 } KPROFILE_SOURCE;
479
480 /**** Information Classes ****/
481
482 /*
483 * File
484 */
485 typedef enum _FILE_INFORMATION_CLASS
486 {
487 FileDirectoryInformation = 1,
488 FileFullDirectoryInformation,
489 FileBothDirectoryInformation,
490 FileBasicInformation,
491 FileStandardInformation,
492 FileInternalInformation,
493 FileEaInformation,
494 FileAccessInformation,
495 FileNameInformation,
496 FileRenameInformation,
497 FileLinkInformation,
498 FileNamesInformation,
499 FileDispositionInformation,
500 FilePositionInformation,
501 FileFullEaInformation,
502 FileModeInformation,
503 FileAlignmentInformation,
504 FileAllInformation,
505 FileAllocationInformation,
506 FileEndOfFileInformation,
507 FileAlternateNameInformation,
508 FileStreamInformation,
509 FilePipeInformation,
510 FilePipeLocalInformation,
511 FilePipeRemoteInformation,
512 FileMailslotQueryInformation,
513 FileMailslotSetInformation,
514 FileCompressionInformation,
515 FileObjectIdInformation,
516 FileCompletionInformation,
517 FileMoveClusterInformation,
518 FileQuotaInformation,
519 FileReparsePointInformation,
520 FileNetworkOpenInformation,
521 FileAttributeTagInformation,
522 FileTrackingInformation,
523 FileIdBothDirectoryInformation,
524 FileIdFullDirectoryInformation,
525 FileValidDataLengthInformation,
526 FileShortNameInformation,
527 FileMaximumInformation
528 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
529
530 /*
531 * File System
532 */
533 typedef enum _FSINFOCLASS
534 {
535 FileFsVolumeInformation = 1,
536 FileFsLabelInformation,
537 FileFsSizeInformation,
538 FileFsDeviceInformation,
539 FileFsAttributeInformation,
540 FileFsControlInformation,
541 FileFsFullSizeInformation,
542 FileFsObjectIdInformation,
543 FileFsDriverPathInformation,
544 FileFsMaximumInformation
545 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
546
547 /*
548 * Registry Key
549 */
550 typedef enum _KEY_INFORMATION_CLASS
551 {
552 KeyBasicInformation,
553 KeyNodeInformation,
554 KeyFullInformation,
555 KeyNameInformation,
556 KeyCachedInformation,
557 KeyFlagsInformation
558 } KEY_INFORMATION_CLASS;
559
560 /*
561 * Registry Key Value
562 */
563 typedef enum _KEY_VALUE_INFORMATION_CLASS
564 {
565 KeyValueBasicInformation,
566 KeyValueFullInformation,
567 KeyValuePartialInformation,
568 KeyValueFullInformationAlign64,
569 KeyValuePartialInformationAlign64
570 } KEY_VALUE_INFORMATION_CLASS;
571
572 /*
573 * Registry Key Set
574 */
575 typedef enum _KEY_SET_INFORMATION_CLASS
576 {
577 KeyWriteTimeInformation,
578 KeyUserFlagsInformation,
579 MaxKeySetInfoClass
580 } KEY_SET_INFORMATION_CLASS;
581
582 /*
583 * Process
584 */
585 typedef enum _PROCESSINFOCLASS
586 {
587 ProcessBasicInformation,
588 ProcessQuotaLimits,
589 ProcessIoCounters,
590 ProcessVmCounters,
591 ProcessTimes,
592 ProcessBasePriority,
593 ProcessRaisePriority,
594 ProcessDebugPort,
595 ProcessExceptionPort,
596 ProcessAccessToken,
597 ProcessLdtInformation,
598 ProcessLdtSize,
599 ProcessDefaultHardErrorMode,
600 ProcessIoPortHandlers,
601 ProcessPooledUsageAndLimits,
602 ProcessWorkingSetWatch,
603 ProcessUserModeIOPL,
604 ProcessEnableAlignmentFaultFixup,
605 ProcessPriorityClass,
606 ProcessWx86Information,
607 ProcessHandleCount,
608 ProcessAffinityMask,
609 ProcessPriorityBoost,
610 ProcessDeviceMap,
611 ProcessSessionInformation,
612 ProcessForegroundInformation,
613 ProcessWow64Information,
614 ProcessImageFileName,
615 ProcessLUIDDeviceMapsEnabled,
616 ProcessBreakOnTermination,
617 ProcessDebugObjectHandle,
618 ProcessDebugFlags,
619 ProcessHandleTracing,
620 MaxProcessInfoClass
621 } PROCESSINFOCLASS;
622
623 /*
624 * Thread
625 */
626 typedef enum _THREADINFOCLASS
627 {
628 ThreadBasicInformation,
629 ThreadTimes,
630 ThreadPriority,
631 ThreadBasePriority,
632 ThreadAffinityMask,
633 ThreadImpersonationToken,
634 ThreadDescriptorTableEntry,
635 ThreadEnableAlignmentFaultFixup,
636 ThreadEventPair_Reusable,
637 ThreadQuerySetWin32StartAddress,
638 ThreadZeroTlsCell,
639 ThreadPerformanceCount,
640 ThreadAmILastThread,
641 ThreadIdealProcessor,
642 ThreadPriorityBoost,
643 ThreadSetTlsArrayAddress,
644 ThreadIsIoPending,
645 ThreadHideFromDebugger,
646 ThreadBreakOnTermination,
647 MaxThreadInfoClass
648 } THREADINFOCLASS;
649
650 /* TYPES *********************************************************************/
651
652 /* Basic Types that aren't defined in User-Mode Headers */
653 typedef CONST int CINT;
654 typedef CONST char *PCSZ;
655 typedef short CSHORT;
656 typedef CSHORT *PCSHORT;
657 typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
658
659 /* Kernel Types used by Native APIs */
660 typedef LONG KPRIORITY;
661 typedef LONG NTSTATUS, *PNTSTATUS;
662 typedef UCHAR KIRQL, *PKIRQL;
663 typedef ULONG KAFFINITY, *PKAFFINITY;
664 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
665 typedef struct _PEB *PPEB;
666 typedef ULONG KPROCESSOR_MODE;
667 typedef struct _OBJECT_TYPE *POBJECT_TYPE;
668 struct _ETHREAD;
669 struct _CSR_API_MESSAGE;
670 typedef ULONG EXECUTION_STATE;
671
672 /* Basic NT Types */
673 #if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H)
674 typedef struct _UNICODE_STRING
675 {
676 USHORT Length;
677 USHORT MaximumLength;
678 PWSTR Buffer;
679 } UNICODE_STRING, *PUNICODE_STRING;
680 typedef const UNICODE_STRING* PCUNICODE_STRING;
681
682 typedef struct _STRING
683 {
684 USHORT Length;
685 USHORT MaximumLength;
686 PCHAR Buffer;
687 } STRING, *PSTRING;
688
689 typedef struct _OBJECT_ATTRIBUTES
690 {
691 ULONG Length;
692 HANDLE RootDirectory;
693 PUNICODE_STRING ObjectName;
694 ULONG Attributes;
695 PVOID SecurityDescriptor;
696 PVOID SecurityQualityOfService;
697 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
698 #endif
699
700 typedef STRING ANSI_STRING;
701 typedef PSTRING PANSI_STRING;
702 typedef STRING OEM_STRING;
703 typedef PSTRING POEM_STRING;
704
705 typedef struct _IO_STATUS_BLOCK
706 {
707 union
708 {
709 NTSTATUS Status;
710 PVOID Pointer;
711 };
712 ULONG_PTR Information;
713 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
714
715 typedef VOID NTAPI
716 (*PIO_APC_ROUTINE)(
717 IN PVOID ApcContext,
718 IN PIO_STATUS_BLOCK IoStatusBlock,
719 IN ULONG Reserved);
720
721 typedef VOID NTAPI
722 (*PKNORMAL_ROUTINE)(
723 IN PVOID NormalContext,
724 IN PVOID SystemArgument1,
725 IN PVOID SystemArgument2);
726
727 typedef VOID NTAPI
728 (*PTIMER_APC_ROUTINE)(
729 IN PVOID TimerContext,
730 IN ULONG TimerLowValue,
731 IN LONG TimerHighValue);
732
733 /* Kernel Types which are returned or used by Native API */
734 typedef struct _OBJECT_NAME_INFORMATION
735 {
736 UNICODE_STRING Name;
737 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
738
739 typedef struct _IO_ERROR_LOG_PACKET
740 {
741 UCHAR MajorFunctionCode;
742 UCHAR RetryCount;
743 USHORT DumpDataSize;
744 USHORT NumberOfStrings;
745 USHORT StringOffset;
746 USHORT EventCategory;
747 NTSTATUS ErrorCode;
748 ULONG UniqueErrorValue;
749 NTSTATUS FinalStatus;
750 ULONG SequenceNumber;
751 ULONG IoControlCode;
752 LARGE_INTEGER DeviceOffset;
753 ULONG DumpData[1];
754 }IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
755
756 typedef struct _IO_ERROR_LOG_MESSAGE
757 {
758 USHORT Type;
759 USHORT Size;
760 USHORT DriverNameLength;
761 LARGE_INTEGER TimeStamp;
762 ULONG DriverNameOffset;
763 IO_ERROR_LOG_PACKET EntryData;
764 } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
765
766 typedef struct _CLIENT_ID
767 {
768 HANDLE UniqueProcess;
769 HANDLE UniqueThread;
770 } CLIENT_ID, *PCLIENT_ID;
771
772 typedef struct _KSYSTEM_TIME
773 {
774 ULONG LowPart;
775 LONG High1Time;
776 LONG High2Time;
777 } KSYSTEM_TIME, *PKSYSTEM_TIME;
778
779 typedef struct _TIME_FIELDS
780 {
781 CSHORT Year;
782 CSHORT Month;
783 CSHORT Day;
784 CSHORT Hour;
785 CSHORT Minute;
786 CSHORT Second;
787 CSHORT Milliseconds;
788 CSHORT Weekday;
789 } TIME_FIELDS, *PTIME_FIELDS;
790
791 typedef struct _VM_COUNTERS
792 {
793 SIZE_T PeakVirtualSize;
794 SIZE_T VirtualSize;
795 ULONG PageFaultCount;
796 SIZE_T PeakWorkingSetSize;
797 SIZE_T WorkingSetSize;
798 SIZE_T QuotaPeakPagedPoolUsage;
799 SIZE_T QuotaPagedPoolUsage;
800 SIZE_T QuotaPeakNonPagedPoolUsage;
801 SIZE_T QuotaNonPagedPoolUsage;
802 SIZE_T PagefileUsage;
803 SIZE_T PeakPagefileUsage;
804 } VM_COUNTERS, *PVM_COUNTERS;
805
806 typedef struct _VM_COUNTERS_EX
807 {
808 SIZE_T PeakVirtualSize;
809 SIZE_T VirtualSize;
810 ULONG PageFaultCount;
811 SIZE_T PeakWorkingSetSize;
812 SIZE_T WorkingSetSize;
813 SIZE_T QuotaPeakPagedPoolUsage;
814 SIZE_T QuotaPagedPoolUsage;
815 SIZE_T QuotaPeakNonPagedPoolUsage;
816 SIZE_T QuotaNonPagedPoolUsage;
817 SIZE_T PagefileUsage;
818 SIZE_T PeakPagefileUsage;
819 SIZE_T PrivateUsage;
820 } VM_COUNTERS_EX, *PVM_COUNTERS_EX;
821
822 /**** Information Types ****/
823
824 /*
825 * Registry Key Set
826 */
827
828 /* Class 0 */
829 typedef struct _KEY_WRITE_TIME_INFORMATION
830 {
831 LARGE_INTEGER LastWriteTime;
832 } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
833
834 /* Class 1 */
835 typedef struct _KEY_USER_FLAGS_INFORMATION
836 {
837 ULONG UserFlags;
838 } KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION;
839
840 typedef struct _KEY_FULL_INFORMATION
841 {
842 LARGE_INTEGER LastWriteTime;
843 ULONG TitleIndex;
844 ULONG ClassOffset;
845 ULONG ClassLength;
846 ULONG SubKeys;
847 ULONG MaxNameLen;
848 ULONG MaxClassLen;
849 ULONG Values;
850 ULONG MaxValueNameLen;
851 ULONG MaxValueDataLen;
852 WCHAR Class[1];
853 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
854
855 typedef struct _KEY_NODE_INFORMATION
856 {
857 LARGE_INTEGER LastWriteTime;
858 ULONG TitleIndex;
859 ULONG ClassOffset;
860 ULONG ClassLength;
861 ULONG NameLength;
862 WCHAR Name[1];
863 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
864
865 /*
866 * File
867 */
868
869 /* Class 1 */
870 typedef struct _FILE_BASIC_INFORMATION
871 {
872 LARGE_INTEGER CreationTime;
873 LARGE_INTEGER LastAccessTime;
874 LARGE_INTEGER LastWriteTime;
875 LARGE_INTEGER ChangeTime;
876 ULONG FileAttributes;
877 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
878
879 /* Class 2 */
880 typedef struct _FILE_STANDARD_INFORMATION
881 {
882 LARGE_INTEGER AllocationSize;
883 LARGE_INTEGER EndOfFile;
884 ULONG NumberOfLinks;
885 BOOLEAN DeletePending;
886 BOOLEAN Directory;
887 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
888
889 typedef struct _FILE_NETWORK_OPEN_INFORMATION
890 {
891 LARGE_INTEGER CreationTime;
892 LARGE_INTEGER LastAccessTime;
893 LARGE_INTEGER LastWriteTime;
894 LARGE_INTEGER ChangeTime;
895 LARGE_INTEGER AllocationSize;
896 LARGE_INTEGER EndOfFile;
897 ULONG FileAttributes;
898 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
899
900 typedef struct _FILE_ZERO_DATA_INFORMATION
901 {
902 LARGE_INTEGER FileOffset;
903 LARGE_INTEGER BeyondFinalZero;
904 } FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION;
905
906 typedef struct _FILE_EA_INFORMATION
907 {
908 ULONG EaSize;
909 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
910
911 typedef struct _FILE_COMPRESSION_INFORMATION
912 {
913 LARGE_INTEGER CompressedFileSize;
914 USHORT CompressionFormat;
915 UCHAR CompressionUnitShift;
916 UCHAR ChunkShift;
917 UCHAR ClusterShift;
918 UCHAR Reserved[3];
919 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
920
921 typedef struct _FILE_POSITION_INFORMATION
922 {
923 LARGE_INTEGER CurrentByteOffset;
924 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
925
926 typedef struct _FILE_DISPOSITION_INFORMATION
927 {
928 BOOLEAN DeleteFile;
929 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
930
931 typedef struct FILE_ALLOCATED_RANGE_BUFFER
932 {
933 LARGE_INTEGER FileOffset;
934 LARGE_INTEGER Length;
935 } FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
936
937 typedef struct _FILE_FULL_EA_INFORMATION
938 {
939 ULONG NextEntryOffset;
940 UCHAR Flags;
941 UCHAR EaNameLength;
942 USHORT EaValueLength;
943 CHAR EaName[1];
944 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
945
946 typedef struct _FILE_QUOTA_INFORMATION
947 {
948 ULONG NextEntryOffset;
949 ULONG SidLength;
950 LARGE_INTEGER ChangeTime;
951 LARGE_INTEGER QuotaUsed;
952 LARGE_INTEGER QuotaThreshold;
953 LARGE_INTEGER QuotaLimit;
954 SID Sid;
955 } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
956
957 typedef struct _FILE_INTERNAL_INFORMATION
958 {
959 LARGE_INTEGER IndexNumber;
960 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
961
962 typedef struct _FILE_RENAME_INFORMATION
963 {
964 BOOLEAN ReplaceIfExists;
965 HANDLE RootDirectory;
966 ULONG FileNameLength;
967 WCHAR FileName[1];
968 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
969
970 typedef struct _FILE_PIPE_INFORMATION
971 {
972 ULONG ReadMode;
973 ULONG CompletionMode;
974 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
975
976 typedef struct _FILE_PIPE_LOCAL_INFORMATION
977 {
978 ULONG NamedPipeType;
979 ULONG NamedPipeConfiguration;
980 ULONG MaximumInstances;
981 ULONG CurrentInstances;
982 ULONG InboundQuota;
983 ULONG ReadDataAvailable;
984 ULONG OutboundQuota;
985 ULONG WriteQuotaAvailable;
986 ULONG NamedPipeState;
987 ULONG NamedPipeEnd;
988 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
989
990 typedef struct _FILE_PIPE_REMOTE_INFORMATION
991 {
992 LARGE_INTEGER CollectDataTime;
993 ULONG MaximumCollectionCount;
994 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
995
996 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
997 {
998 ULONG MaximumMessageSize;
999 ULONG MailslotQuota;
1000 ULONG NextMessageSize;
1001 ULONG MessagesAvailable;
1002 LARGE_INTEGER ReadTimeout;
1003 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
1004
1005 typedef struct _FILE_MAILSLOT_SET_INFORMATION
1006 {
1007 LARGE_INTEGER ReadTimeout;
1008 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
1009
1010 typedef struct _FILE_BOTH_DIR_INFORMATION
1011 {
1012 ULONG NextEntryOffset;
1013 ULONG FileIndex;
1014 LARGE_INTEGER CreationTime;
1015 LARGE_INTEGER LastAccessTime;
1016 LARGE_INTEGER LastWriteTime;
1017 LARGE_INTEGER ChangeTime;
1018 LARGE_INTEGER EndOfFile;
1019 LARGE_INTEGER AllocationSize;
1020 ULONG FileAttributes;
1021 ULONG FileNameLength;
1022 ULONG EaSize;
1023 CCHAR ShortNameLength;
1024 WCHAR ShortName[12];
1025 WCHAR FileName[1];
1026 } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
1027
1028 typedef struct _FILE_COMPLETION_INFORMATION
1029 {
1030 HANDLE Port;
1031 PVOID Key;
1032 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
1033
1034 typedef struct _FILE_LINK_INFORMATION
1035 {
1036 BOOLEAN ReplaceIfExists;
1037 HANDLE RootDirectory;
1038 ULONG FileNameLength;
1039 WCHAR FileName[1];
1040 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
1041
1042 typedef struct _FILE_NAME_INFORMATION
1043 {
1044 ULONG FileNameLength;
1045 WCHAR FileName[1];
1046 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
1047
1048 typedef struct _FILE_ALLOCATION_INFORMATION
1049 {
1050 LARGE_INTEGER AllocationSize;
1051 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
1052
1053 typedef struct _FILE_END_OF_FILE_INFORMATION
1054 {
1055 LARGE_INTEGER EndOfFile;
1056 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
1057
1058 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
1059 {
1060 LARGE_INTEGER ValidDataLength;
1061 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
1062
1063 /*
1064 * File System
1065 */
1066 typedef struct _FILE_FS_DEVICE_INFORMATION
1067 {
1068 DEVICE_TYPE DeviceType;
1069 ULONG Characteristics;
1070 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
1071
1072 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
1073 {
1074 ULONG FileSystemAttributes;
1075 ULONG MaximumComponentNameLength;
1076 ULONG FileSystemNameLength;
1077 WCHAR FileSystemName[1];
1078 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
1079
1080 typedef struct _FILE_FS_SIZE_INFORMATION
1081 {
1082 LARGE_INTEGER TotalAllocationUnits;
1083 LARGE_INTEGER AvailableAllocationUnits;
1084 ULONG SectorsPerAllocationUnit;
1085 ULONG BytesPerSector;
1086 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
1087
1088 typedef struct _FILE_FS_LABEL_INFORMATION
1089 {
1090 ULONG VolumeLabelLength;
1091 WCHAR VolumeLabel[1];
1092 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
1093
1094 typedef struct _FILE_FS_VOLUME_INFORMATION
1095 {
1096 LARGE_INTEGER VolumeCreationTime;
1097 ULONG VolumeSerialNumber;
1098 ULONG VolumeLabelLength;
1099 BOOLEAN SupportsObjects;
1100 WCHAR VolumeLabel[1];
1101 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
1102
1103 /*
1104 * Registry Key Value
1105 */
1106
1107 /* Class 0 */
1108 typedef struct _KEY_VALUE_ENTRY
1109 {
1110 PUNICODE_STRING ValueName;
1111 ULONG DataLength;
1112 ULONG DataOffset;
1113 ULONG Type;
1114 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
1115
1116 /* Class 1 */
1117 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
1118 {
1119 ULONG TitleIndex;
1120 ULONG Type;
1121 ULONG DataLength;
1122 UCHAR Data[1];
1123 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
1124
1125 /* Class 2 */
1126 typedef struct _KEY_VALUE_BASIC_INFORMATION
1127 {
1128 ULONG TitleIndex;
1129 ULONG Type;
1130 ULONG NameLength;
1131 WCHAR Name[1];
1132 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
1133
1134 /* Class 3 */
1135 typedef struct _KEY_VALUE_FULL_INFORMATION
1136 {
1137 ULONG TitleIndex;
1138 ULONG Type;
1139 ULONG DataOffset;
1140 ULONG DataLength;
1141 ULONG NameLength;
1142 WCHAR Name[1];
1143 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
1144
1145 /*
1146 * Registry Key
1147 */
1148
1149 /* Class 0 */
1150 typedef struct _KEY_BASIC_INFORMATION
1151 {
1152 LARGE_INTEGER LastWriteTime;
1153 ULONG TitleIndex;
1154 ULONG NameLength;
1155 WCHAR Name[1];
1156 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
1157
1158 /* File Pipe Structures for the FSCTLs */
1159 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
1160 {
1161 LARGE_INTEGER Timeout;
1162 ULONG NameLength;
1163 BOOLEAN TimeoutSpecified;
1164 WCHAR Name[1];
1165 } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
1166
1167 typedef struct _FILE_PIPE_PEEK_BUFFER
1168 {
1169 ULONG NamedPipeState;
1170 ULONG ReadDataAvailable;
1171 ULONG NumberOfMessages;
1172 ULONG MessageLength;
1173 CHAR Data[1];
1174 } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
1175
1176 /* The Kerner/User Shared Data Structure */
1177 typedef struct _KUSER_SHARED_DATA
1178 {
1179 ULONG TickCountLowDeprecated;
1180 ULONG TickCountMultiplier;
1181 volatile KSYSTEM_TIME InterruptTime;
1182 volatile KSYSTEM_TIME SystemTime;
1183 volatile KSYSTEM_TIME TimeZoneBias;
1184 USHORT ImageNumberLow;
1185 USHORT ImageNumberHigh;
1186 WCHAR NtSystemRoot[260];
1187 ULONG MaxStackTraceDepth;
1188 ULONG CryptoExponent;
1189 ULONG TimeZoneId;
1190 ULONG LargePageMinimum;
1191 ULONG Reserved2[7];
1192 NT_PRODUCT_TYPE NtProductType;
1193 BOOLEAN ProductTypeIsValid;
1194 ULONG NtMajorVersion;
1195 ULONG NtMinorVersion;
1196 BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
1197 ULONG Reserved1;
1198 ULONG Reserved3;
1199 volatile ULONG TimeSlip;
1200 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
1201 LARGE_INTEGER SystemExpirationDate;
1202 ULONG SuiteMask;
1203 BOOLEAN KdDebuggerEnabled;
1204 volatile ULONG ActiveConsoleId;
1205 volatile ULONG DismountCount;
1206 ULONG ComPlusPackage;
1207 ULONG LastSystemRITEventTickCount;
1208 ULONG NumberOfPhysicalPages;
1209 BOOLEAN SafeBootMode;
1210 ULONG TraceLogging;
1211 ULONGLONG Fill0;
1212 ULONGLONG SystemCall[4];
1213 union {
1214 volatile KSYSTEM_TIME TickCount;
1215 volatile ULONG64 TickCountQuad;
1216 };
1217 } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
1218
1219 /* Run-Time Library (RTL) Types */
1220 typedef struct _RTL_BITMAP
1221 {
1222 ULONG SizeOfBitMap;
1223 PULONG Buffer;
1224 } RTL_BITMAP, *PRTL_BITMAP;
1225
1226 typedef struct _RTL_BITMAP_RUN
1227 {
1228 ULONG StartingIndex;
1229 ULONG NumberOfBits;
1230 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
1231
1232 typedef struct _COMPRESSED_DATA_INFO
1233 {
1234 USHORT CompressionFormatAndEngine;
1235 UCHAR CompressionUnitShift;
1236 UCHAR ChunkShift;
1237 UCHAR ClusterShift;
1238 UCHAR Reserved;
1239 USHORT NumberOfChunks;
1240 ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
1241 } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
1242
1243 typedef struct _GENERATE_NAME_CONTEXT
1244 {
1245 USHORT Checksum;
1246 BOOLEAN CheckSumInserted;
1247 UCHAR NameLength;
1248 WCHAR NameBuffer[8];
1249 ULONG ExtensionLength;
1250 WCHAR ExtensionBuffer[4];
1251 ULONG LastIndexValue;
1252 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
1253
1254 typedef struct _RTL_SPLAY_LINKS
1255 {
1256 struct _RTL_SPLAY_LINKS *Parent;
1257 struct _RTL_SPLAY_LINKS *LeftChild;
1258 struct _RTL_SPLAY_LINKS *RightChild;
1259 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
1260
1261 struct _RTL_AVL_TABLE;
1262 struct _RTL_GENERIC_TABLE;
1263
1264 typedef NTSTATUS STDCALL
1265 (*PRTL_AVL_MATCH_FUNCTION)(
1266 struct _RTL_AVL_TABLE *Table,
1267 PVOID UserData,
1268 PVOID MatchData
1269 );
1270
1271 typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
1272 (*PRTL_AVL_COMPARE_ROUTINE) (
1273 struct _RTL_AVL_TABLE *Table,
1274 PVOID FirstStruct,
1275 PVOID SecondStruct
1276 );
1277
1278 typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
1279 (*PRTL_GENERIC_COMPARE_ROUTINE) (
1280 struct _RTL_GENERIC_TABLE *Table,
1281 PVOID FirstStruct,
1282 PVOID SecondStruct
1283 );
1284
1285 typedef PVOID STDCALL
1286 (*PRTL_GENERIC_ALLOCATE_ROUTINE) (
1287 struct _RTL_GENERIC_TABLE *Table,
1288 LONG ByteSize
1289 );
1290
1291 typedef VOID STDCALL
1292 (*PRTL_GENERIC_FREE_ROUTINE) (
1293 struct _RTL_GENERIC_TABLE *Table,
1294 PVOID Buffer
1295 );
1296
1297 typedef VOID STDCALL
1298 (*PRTL_AVL_ALLOCATE_ROUTINE) (
1299 struct _RTL_AVL_TABLE *Table,
1300 LONG ByteSize
1301 );
1302
1303 typedef VOID STDCALL
1304 (*PRTL_AVL_FREE_ROUTINE) (
1305 struct _RTL_AVL_TABLE *Table,
1306 PVOID Buffer
1307 );
1308
1309 typedef struct _RTL_GENERIC_TABLE
1310 {
1311 PRTL_SPLAY_LINKS TableRoot;
1312 LIST_ENTRY InsertOrderList;
1313 PLIST_ENTRY OrderedPointer;
1314 ULONG WhichOrderedElement;
1315 ULONG NumberGenericTableElements;
1316 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
1317 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
1318 PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
1319 PVOID TableContext;
1320 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
1321
1322 typedef struct _RTL_BALANCED_LINKS
1323 {
1324 struct _RTL_BALANCED_LINKS *Parent;
1325 struct _RTL_BALANCED_LINKS *LeftChild;
1326 struct _RTL_BALANCED_LINKS *RightChild;
1327 CHAR Balance;
1328 UCHAR Reserved[3];
1329 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
1330
1331 typedef struct _RTL_AVL_TABLE
1332 {
1333 RTL_BALANCED_LINKS BalancedRoot;
1334 PVOID OrderedPointer;
1335 ULONG WhichOrderedElement;
1336 ULONG NumberGenericTableElements;
1337 ULONG DepthOfTree;
1338 PRTL_BALANCED_LINKS RestartKey;
1339 ULONG DeleteCount;
1340 PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
1341 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
1342 PRTL_AVL_FREE_ROUTINE FreeRoutine;
1343 PVOID TableContext;
1344 } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
1345
1346 typedef NTSTATUS STDCALL
1347 (*PRTL_QUERY_REGISTRY_ROUTINE)(
1348 IN PWSTR ValueName,
1349 IN ULONG ValueType,
1350 IN PVOID ValueData,
1351 IN ULONG ValueLength,
1352 IN PVOID Context,
1353 IN PVOID EntryContext
1354 );
1355
1356 typedef struct _RTL_QUERY_REGISTRY_TABLE
1357 {
1358 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
1359 ULONG Flags;
1360 PWSTR Name;
1361 PVOID EntryContext;
1362 ULONG DefaultType;
1363 PVOID DefaultData;
1364 ULONG DefaultLength;
1365 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
1366
1367 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
1368 {
1369 CSHORT NodeTypeCode;
1370 CSHORT NameLength;
1371 struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
1372 struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
1373 RTL_SPLAY_LINKS Links;
1374 PUNICODE_STRING Prefix;
1375 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
1376
1377 typedef struct _UNICODE_PREFIX_TABLE
1378 {
1379 CSHORT NodeTypeCode;
1380 CSHORT NameLength;
1381 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
1382 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
1383 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
1384
1385 /* FIXME - need FAST_MUTEX and PHANDLE_TABLE for RTL_ATOM_TABLE in umode! */
1386 typedef void *FAST_MUTEX;
1387 typedef void *PHANDLE_TABLE;
1388
1389 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW;
1390 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW;
1391 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW;
1392 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW;
1393
1394 #endif