e1235bf459a897a5e8ec1f8b903648ea2745783f
[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 getting the current Process or Thread */
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 /* ENUMERATIONS **************************************************************/
188
189 /* Kernel Shared Data Values */
190 typedef enum _NT_PRODUCT_TYPE
191 {
192 NtProductWinNt = 1,
193 NtProductLanManNt,
194 NtProductServer
195 } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
196
197 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
198 {
199 StandardDesign,
200 NEC98x86,
201 EndAlternatives
202 } ALTERNATIVE_ARCHITECTURE_TYPE;
203
204 /* Run-Time Library (RTL) Enumerations */
205 typedef enum _TABLE_SEARCH_RESULT
206 {
207 TableEmptyTree,
208 TableFoundNode,
209 TableInsertAsLeft,
210 TableInsertAsRight
211 } TABLE_SEARCH_RESULT;
212
213 typedef enum _RTL_GENERIC_COMPARE_RESULTS
214 {
215 GenericLessThan,
216 GenericGreaterThan,
217 GenericEqual
218 } RTL_GENERIC_COMPARE_RESULTS;
219
220 /* Kernel or Native Enumerations used by Native API */
221 typedef enum _SECTION_INHERIT
222 {
223 ViewShare = 1,
224 ViewUnmap = 2
225 } SECTION_INHERIT;
226
227 typedef enum _POOL_TYPE
228 {
229 NonPagedPool,
230 PagedPool,
231 NonPagedPoolMustSucceed,
232 DontUseThisType,
233 NonPagedPoolCacheAligned,
234 PagedPoolCacheAligned,
235 NonPagedPoolCacheAlignedMustS,
236 MaxPoolType,
237 NonPagedPoolSession = 32,
238 PagedPoolSession,
239 NonPagedPoolMustSucceedSession,
240 DontUseThisTypeSession,
241 NonPagedPoolCacheAlignedSession,
242 PagedPoolCacheAlignedSession,
243 NonPagedPoolCacheAlignedMustSSession
244 } POOL_TYPE;
245
246 typedef enum _EVENT_TYPE
247 {
248 NotificationEvent,
249 SynchronizationEvent
250 } EVENT_TYPE;
251
252 typedef enum _TIMER_TYPE
253 {
254 NotificationTimer,
255 SynchronizationTimer
256 } TIMER_TYPE;
257
258 typedef enum _WAIT_TYPE
259 {
260 WaitAll,
261 WaitAny
262 } WAIT_TYPE;
263
264 typedef enum _INTERFACE_TYPE
265 {
266 InterfaceTypeUndefined = -1,
267 Internal,
268 Isa,
269 Eisa,
270 MicroChannel,
271 TurboChannel,
272 PCIBus,
273 VMEBus,
274 NuBus,
275 PCMCIABus,
276 CBus,
277 MPIBus,
278 MPSABus,
279 ProcessorInternal,
280 InternalPowerBus,
281 PNPISABus,
282 PNPBus,
283 MaximumInterfaceType
284 }INTERFACE_TYPE, *PINTERFACE_TYPE;
285
286 typedef enum _PNP_VETO_TYPE
287 {
288 PNP_VetoTypeUnknown,
289 PNP_VetoLegacyDevice,
290 PNP_VetoPendingClose,
291 PNP_VetoWindowsApp,
292 PNP_VetoWindowsService,
293 PNP_VetoOutstandingOpen,
294 PNP_VetoDevice,
295 PNP_VetoDriver,
296 PNP_VetoIllegalDeviceRequest,
297 PNP_VetoInsufficientPower,
298 PNP_VetoNonDisableable,
299 PNP_VetoLegacyDriver,
300 PNP_VetoInsufficientRights
301 } PNP_VETO_TYPE, *PPNP_VETO_TYPE;
302
303 typedef enum _MODE
304 {
305 KernelMode,
306 UserMode,
307 MaximumMode
308 } MODE;
309
310 typedef enum _KWAIT_REASON
311 {
312 Executive,
313 FreePage,
314 PageIn,
315 PoolAllocation,
316 DelayExecution,
317 Suspended,
318 UserRequest,
319 WrExecutive,
320 WrFreePage,
321 WrPageIn,
322 WrPoolAllocation,
323 WrDelayExecution,
324 WrSuspended,
325 WrUserRequest,
326 WrEventPair,
327 WrQueue,
328 WrLpcReceive,
329 WrLpcReply,
330 WrVirtualMemory,
331 WrPageOut,
332 WrRendezvous,
333 Spare2,
334 WrGuardedMutex,
335 Spare4,
336 Spare5,
337 Spare6,
338 WrKernel,
339 WrResource,
340 WrPushLock,
341 WrMutex,
342 WrQuantumEnd,
343 WrDispatchInt,
344 WrPreempted,
345 WrYieldExecution,
346 MaximumWaitReason
347 } KWAIT_REASON;
348
349 typedef enum _KPROFILE_SOURCE
350 {
351 ProfileTime,
352 ProfileAlignmentFixup,
353 ProfileTotalIssues,
354 ProfilePipelineDry,
355 ProfileLoadInstructions,
356 ProfilePipelineFrozen,
357 ProfileBranchInstructions,
358 ProfileTotalNonissues,
359 ProfileDcacheMisses,
360 ProfileIcacheMisses,
361 ProfileCacheMisses,
362 ProfileBranchMispredictions,
363 ProfileStoreInstructions,
364 ProfileFpInstructions,
365 ProfileIntegerInstructions,
366 Profile2Issue,
367 Profile3Issue,
368 Profile4Issue,
369 ProfileSpecialInstructions,
370 ProfileTotalCycles,
371 ProfileIcacheIssues,
372 ProfileDcacheAccesses,
373 ProfileMemoryBarrierCycles,
374 ProfileLoadLinkedIssues,
375 ProfileMaximum
376 } KPROFILE_SOURCE;
377
378 /**** Information Classes ****/
379
380 /*
381 * File
382 */
383 typedef enum _FILE_INFORMATION_CLASS
384 {
385 FileDirectoryInformation = 1,
386 FileFullDirectoryInformation,
387 FileBothDirectoryInformation,
388 FileBasicInformation,
389 FileStandardInformation,
390 FileInternalInformation,
391 FileEaInformation,
392 FileAccessInformation,
393 FileNameInformation,
394 FileRenameInformation,
395 FileLinkInformation,
396 FileNamesInformation,
397 FileDispositionInformation,
398 FilePositionInformation,
399 FileFullEaInformation,
400 FileModeInformation,
401 FileAlignmentInformation,
402 FileAllInformation,
403 FileAllocationInformation,
404 FileEndOfFileInformation,
405 FileAlternateNameInformation,
406 FileStreamInformation,
407 FilePipeInformation,
408 FilePipeLocalInformation,
409 FilePipeRemoteInformation,
410 FileMailslotQueryInformation,
411 FileMailslotSetInformation,
412 FileCompressionInformation,
413 FileObjectIdInformation,
414 FileCompletionInformation,
415 FileMoveClusterInformation,
416 FileQuotaInformation,
417 FileReparsePointInformation,
418 FileNetworkOpenInformation,
419 FileAttributeTagInformation,
420 FileTrackingInformation,
421 FileIdBothDirectoryInformation,
422 FileIdFullDirectoryInformation,
423 FileValidDataLengthInformation,
424 FileShortNameInformation,
425 FileMaximumInformation
426 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
427
428 /*
429 * File System
430 */
431 typedef enum _FSINFOCLASS
432 {
433 FileFsVolumeInformation = 1,
434 FileFsLabelInformation,
435 FileFsSizeInformation,
436 FileFsDeviceInformation,
437 FileFsAttributeInformation,
438 FileFsControlInformation,
439 FileFsFullSizeInformation,
440 FileFsObjectIdInformation,
441 FileFsDriverPathInformation,
442 FileFsMaximumInformation
443 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
444
445 /*
446 * Registry Key
447 */
448 typedef enum _KEY_INFORMATION_CLASS
449 {
450 KeyBasicInformation,
451 KeyNodeInformation,
452 KeyFullInformation,
453 KeyNameInformation,
454 KeyCachedInformation,
455 KeyFlagsInformation
456 } KEY_INFORMATION_CLASS;
457
458 /*
459 * Registry Key Value
460 */
461 typedef enum _KEY_VALUE_INFORMATION_CLASS
462 {
463 KeyValueBasicInformation,
464 KeyValueFullInformation,
465 KeyValuePartialInformation,
466 KeyValueFullInformationAlign64,
467 KeyValuePartialInformationAlign64
468 } KEY_VALUE_INFORMATION_CLASS;
469
470 /*
471 * Registry Key Set
472 */
473 typedef enum _KEY_SET_INFORMATION_CLASS
474 {
475 KeyWriteTimeInformation,
476 KeyUserFlagsInformation,
477 MaxKeySetInfoClass
478 } KEY_SET_INFORMATION_CLASS;
479
480 /*
481 * Process
482 */
483 typedef enum _PROCESSINFOCLASS
484 {
485 ProcessBasicInformation,
486 ProcessQuotaLimits,
487 ProcessIoCounters,
488 ProcessVmCounters,
489 ProcessTimes,
490 ProcessBasePriority,
491 ProcessRaisePriority,
492 ProcessDebugPort,
493 ProcessExceptionPort,
494 ProcessAccessToken,
495 ProcessLdtInformation,
496 ProcessLdtSize,
497 ProcessDefaultHardErrorMode,
498 ProcessIoPortHandlers,
499 ProcessPooledUsageAndLimits,
500 ProcessWorkingSetWatch,
501 ProcessUserModeIOPL,
502 ProcessEnableAlignmentFaultFixup,
503 ProcessPriorityClass,
504 ProcessWx86Information,
505 ProcessHandleCount,
506 ProcessAffinityMask,
507 ProcessPriorityBoost,
508 ProcessDeviceMap,
509 ProcessSessionInformation,
510 ProcessForegroundInformation,
511 ProcessWow64Information,
512 ProcessImageFileName,
513 ProcessLUIDDeviceMapsEnabled,
514 ProcessBreakOnTermination,
515 ProcessDebugObjectHandle,
516 ProcessDebugFlags,
517 ProcessHandleTracing,
518 MaxProcessInfoClass
519 } PROCESSINFOCLASS;
520
521 /*
522 * Thread
523 */
524 typedef enum _THREADINFOCLASS
525 {
526 ThreadBasicInformation,
527 ThreadTimes,
528 ThreadPriority,
529 ThreadBasePriority,
530 ThreadAffinityMask,
531 ThreadImpersonationToken,
532 ThreadDescriptorTableEntry,
533 ThreadEnableAlignmentFaultFixup,
534 ThreadEventPair_Reusable,
535 ThreadQuerySetWin32StartAddress,
536 ThreadZeroTlsCell,
537 ThreadPerformanceCount,
538 ThreadAmILastThread,
539 ThreadIdealProcessor,
540 ThreadPriorityBoost,
541 ThreadSetTlsArrayAddress,
542 ThreadIsIoPending,
543 ThreadHideFromDebugger,
544 ThreadBreakOnTermination,
545 MaxThreadInfoClass
546 } THREADINFOCLASS;
547
548 /* TYPES *********************************************************************/
549
550 /* Basic Types that aren't defined in User-Mode Headers */
551 typedef CONST int CINT;
552 typedef CONST char *PCSZ;
553 typedef short CSHORT;
554 typedef CSHORT *PCSHORT;
555 typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
556
557 /* Kernel Types used by Native APIs */
558 typedef LONG KPRIORITY;
559 typedef LONG NTSTATUS, *PNTSTATUS;
560 typedef UCHAR KIRQL, *PKIRQL;
561 typedef ULONG KAFFINITY, *PKAFFINITY;
562 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
563 typedef struct _PEB *PPEB;
564 typedef ULONG KPROCESSOR_MODE;
565 typedef struct _OBJECT_TYPE *POBJECT_TYPE;
566 struct _ETHREAD;
567 struct _EVENT_TRACE_HEADER; /* <--- We might want to declare this one */
568 typedef ULONG EXECUTION_STATE;
569
570 /* Basic NT Types */
571 #if !defined(_NTSECAPI_H) && !defined(_SUBAUTH_H)
572 typedef struct _UNICODE_STRING
573 {
574 USHORT Length;
575 USHORT MaximumLength;
576 PWSTR Buffer;
577 } UNICODE_STRING, *PUNICODE_STRING;
578 typedef const UNICODE_STRING* PCUNICODE_STRING;
579
580 typedef struct _STRING
581 {
582 USHORT Length;
583 USHORT MaximumLength;
584 PCHAR Buffer;
585 } STRING, *PSTRING;
586
587 typedef struct _OBJECT_ATTRIBUTES
588 {
589 ULONG Length;
590 HANDLE RootDirectory;
591 PUNICODE_STRING ObjectName;
592 ULONG Attributes;
593 PVOID SecurityDescriptor;
594 PVOID SecurityQualityOfService;
595 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
596 #endif
597
598 typedef STRING ANSI_STRING;
599 typedef PSTRING PANSI_STRING;
600 typedef STRING OEM_STRING;
601 typedef PSTRING POEM_STRING;
602
603 typedef struct _IO_STATUS_BLOCK
604 {
605 union
606 {
607 NTSTATUS Status;
608 PVOID Pointer;
609 };
610 ULONG_PTR Information;
611 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
612
613 typedef VOID NTAPI
614 (*PIO_APC_ROUTINE)(
615 IN PVOID ApcContext,
616 IN PIO_STATUS_BLOCK IoStatusBlock,
617 IN ULONG Reserved);
618
619 typedef VOID NTAPI
620 (*PKNORMAL_ROUTINE)(
621 IN PVOID NormalContext,
622 IN PVOID SystemArgument1,
623 IN PVOID SystemArgument2);
624
625 typedef VOID NTAPI
626 (*PTIMER_APC_ROUTINE)(
627 IN PVOID TimerContext,
628 IN ULONG TimerLowValue,
629 IN LONG TimerHighValue);
630
631 /* Kernel Types which are returned or used by Native API */
632 typedef struct _OBJECT_NAME_INFORMATION
633 {
634 UNICODE_STRING Name;
635 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
636
637 typedef struct _CLIENT_ID
638 {
639 HANDLE UniqueProcess;
640 HANDLE UniqueThread;
641 } CLIENT_ID, *PCLIENT_ID;
642
643 typedef struct _KSYSTEM_TIME
644 {
645 ULONG LowPart;
646 LONG High1Time;
647 LONG High2Time;
648 } KSYSTEM_TIME, *PKSYSTEM_TIME;
649
650 typedef struct _TIME_FIELDS
651 {
652 CSHORT Year;
653 CSHORT Month;
654 CSHORT Day;
655 CSHORT Hour;
656 CSHORT Minute;
657 CSHORT Second;
658 CSHORT Milliseconds;
659 CSHORT Weekday;
660 } TIME_FIELDS, *PTIME_FIELDS;
661
662 typedef struct _VM_COUNTERS
663 {
664 SIZE_T PeakVirtualSize;
665 SIZE_T VirtualSize;
666 ULONG PageFaultCount;
667 SIZE_T PeakWorkingSetSize;
668 SIZE_T WorkingSetSize;
669 SIZE_T QuotaPeakPagedPoolUsage;
670 SIZE_T QuotaPagedPoolUsage;
671 SIZE_T QuotaPeakNonPagedPoolUsage;
672 SIZE_T QuotaNonPagedPoolUsage;
673 SIZE_T PagefileUsage;
674 SIZE_T PeakPagefileUsage;
675 } VM_COUNTERS, *PVM_COUNTERS;
676
677 typedef struct _VM_COUNTERS_EX
678 {
679 SIZE_T PeakVirtualSize;
680 SIZE_T VirtualSize;
681 ULONG PageFaultCount;
682 SIZE_T PeakWorkingSetSize;
683 SIZE_T WorkingSetSize;
684 SIZE_T QuotaPeakPagedPoolUsage;
685 SIZE_T QuotaPagedPoolUsage;
686 SIZE_T QuotaPeakNonPagedPoolUsage;
687 SIZE_T QuotaNonPagedPoolUsage;
688 SIZE_T PagefileUsage;
689 SIZE_T PeakPagefileUsage;
690 SIZE_T PrivateUsage;
691 } VM_COUNTERS_EX, *PVM_COUNTERS_EX;
692
693 /**** Information Types ****/
694
695 /*
696 * Registry Key Set
697 */
698
699 /* Class 0 */
700 typedef struct _KEY_WRITE_TIME_INFORMATION
701 {
702 LARGE_INTEGER LastWriteTime;
703 } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
704
705 /* Class 1 */
706 typedef struct _KEY_USER_FLAGS_INFORMATION
707 {
708 ULONG UserFlags;
709 } KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION;
710
711 typedef struct _KEY_FULL_INFORMATION
712 {
713 LARGE_INTEGER LastWriteTime;
714 ULONG TitleIndex;
715 ULONG ClassOffset;
716 ULONG ClassLength;
717 ULONG SubKeys;
718 ULONG MaxNameLen;
719 ULONG MaxClassLen;
720 ULONG Values;
721 ULONG MaxValueNameLen;
722 ULONG MaxValueDataLen;
723 WCHAR Class[1];
724 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
725
726 typedef struct _KEY_NODE_INFORMATION
727 {
728 LARGE_INTEGER LastWriteTime;
729 ULONG TitleIndex;
730 ULONG ClassOffset;
731 ULONG ClassLength;
732 ULONG NameLength;
733 WCHAR Name[1];
734 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
735
736 /*
737 * File
738 */
739
740 /* Class 1 */
741 typedef struct _FILE_BASIC_INFORMATION
742 {
743 LARGE_INTEGER CreationTime;
744 LARGE_INTEGER LastAccessTime;
745 LARGE_INTEGER LastWriteTime;
746 LARGE_INTEGER ChangeTime;
747 ULONG FileAttributes;
748 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
749
750 /* Class 2 */
751 typedef struct _FILE_STANDARD_INFORMATION
752 {
753 LARGE_INTEGER AllocationSize;
754 LARGE_INTEGER EndOfFile;
755 ULONG NumberOfLinks;
756 BOOLEAN DeletePending;
757 BOOLEAN Directory;
758 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
759
760 typedef struct _FILE_NETWORK_OPEN_INFORMATION
761 {
762 LARGE_INTEGER CreationTime;
763 LARGE_INTEGER LastAccessTime;
764 LARGE_INTEGER LastWriteTime;
765 LARGE_INTEGER ChangeTime;
766 LARGE_INTEGER AllocationSize;
767 LARGE_INTEGER EndOfFile;
768 ULONG FileAttributes;
769 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
770
771 typedef struct _FILE_ZERO_DATA_INFORMATION
772 {
773 LARGE_INTEGER FileOffset;
774 LARGE_INTEGER BeyondFinalZero;
775 } FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION;
776
777 typedef struct _FILE_EA_INFORMATION
778 {
779 ULONG EaSize;
780 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
781
782 typedef struct _FILE_COMPRESSION_INFORMATION
783 {
784 LARGE_INTEGER CompressedFileSize;
785 USHORT CompressionFormat;
786 UCHAR CompressionUnitShift;
787 UCHAR ChunkShift;
788 UCHAR ClusterShift;
789 UCHAR Reserved[3];
790 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
791
792 typedef struct _FILE_POSITION_INFORMATION
793 {
794 LARGE_INTEGER CurrentByteOffset;
795 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
796
797 typedef struct _FILE_DISPOSITION_INFORMATION
798 {
799 BOOLEAN DeleteFile;
800 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
801
802 typedef struct FILE_ALLOCATED_RANGE_BUFFER
803 {
804 LARGE_INTEGER FileOffset;
805 LARGE_INTEGER Length;
806 } FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
807
808 typedef struct _FILE_QUOTA_INFORMATION
809 {
810 ULONG NextEntryOffset;
811 ULONG SidLength;
812 LARGE_INTEGER ChangeTime;
813 LARGE_INTEGER QuotaUsed;
814 LARGE_INTEGER QuotaThreshold;
815 LARGE_INTEGER QuotaLimit;
816 SID Sid;
817 } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
818
819 typedef struct _FILE_INTERNAL_INFORMATION
820 {
821 LARGE_INTEGER IndexNumber;
822 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
823
824 typedef struct _FILE_RENAME_INFORMATION
825 {
826 BOOLEAN ReplaceIfExists;
827 HANDLE RootDirectory;
828 ULONG FileNameLength;
829 WCHAR FileName[1];
830 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
831
832 typedef struct _FILE_PIPE_INFORMATION
833 {
834 ULONG ReadMode;
835 ULONG CompletionMode;
836 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
837
838 typedef struct _FILE_PIPE_LOCAL_INFORMATION
839 {
840 ULONG NamedPipeType;
841 ULONG NamedPipeConfiguration;
842 ULONG MaximumInstances;
843 ULONG CurrentInstances;
844 ULONG InboundQuota;
845 ULONG ReadDataAvailable;
846 ULONG OutboundQuota;
847 ULONG WriteQuotaAvailable;
848 ULONG NamedPipeState;
849 ULONG NamedPipeEnd;
850 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
851
852 typedef struct _FILE_PIPE_REMOTE_INFORMATION
853 {
854 LARGE_INTEGER CollectDataTime;
855 ULONG MaximumCollectionCount;
856 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
857
858 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
859 {
860 ULONG MaximumMessageSize;
861 ULONG MailslotQuota;
862 ULONG NextMessageSize;
863 ULONG MessagesAvailable;
864 LARGE_INTEGER ReadTimeout;
865 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
866
867 typedef struct _FILE_MAILSLOT_SET_INFORMATION
868 {
869 LARGE_INTEGER ReadTimeout;
870 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
871
872 typedef struct _FILE_BOTH_DIR_INFORMATION
873 {
874 ULONG NextEntryOffset;
875 ULONG FileIndex;
876 LARGE_INTEGER CreationTime;
877 LARGE_INTEGER LastAccessTime;
878 LARGE_INTEGER LastWriteTime;
879 LARGE_INTEGER ChangeTime;
880 LARGE_INTEGER EndOfFile;
881 LARGE_INTEGER AllocationSize;
882 ULONG FileAttributes;
883 ULONG FileNameLength;
884 ULONG EaSize;
885 CCHAR ShortNameLength;
886 WCHAR ShortName[12];
887 WCHAR FileName[1];
888 } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
889
890 typedef struct _FILE_COMPLETION_INFORMATION
891 {
892 HANDLE Port;
893 PVOID Key;
894 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
895
896 typedef struct _FILE_LINK_INFORMATION
897 {
898 BOOLEAN ReplaceIfExists;
899 HANDLE RootDirectory;
900 ULONG FileNameLength;
901 WCHAR FileName[1];
902 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
903
904 typedef struct _FILE_NAME_INFORMATION
905 {
906 ULONG FileNameLength;
907 WCHAR FileName[1];
908 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
909
910 typedef struct _FILE_ALLOCATION_INFORMATION
911 {
912 LARGE_INTEGER AllocationSize;
913 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
914
915 typedef struct _FILE_END_OF_FILE_INFORMATION
916 {
917 LARGE_INTEGER EndOfFile;
918 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
919
920 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
921 {
922 LARGE_INTEGER ValidDataLength;
923 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
924
925 /*
926 * File System
927 */
928 typedef struct _FILE_FS_DEVICE_INFORMATION
929 {
930 DEVICE_TYPE DeviceType;
931 ULONG Characteristics;
932 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
933
934 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
935 {
936 ULONG FileSystemAttributes;
937 ULONG MaximumComponentNameLength;
938 ULONG FileSystemNameLength;
939 WCHAR FileSystemName[1];
940 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
941
942 typedef struct _FILE_FS_SIZE_INFORMATION
943 {
944 LARGE_INTEGER TotalAllocationUnits;
945 LARGE_INTEGER AvailableAllocationUnits;
946 ULONG SectorsPerAllocationUnit;
947 ULONG BytesPerSector;
948 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
949
950 typedef struct _FILE_FS_LABEL_INFORMATION
951 {
952 ULONG VolumeLabelLength;
953 WCHAR VolumeLabel[1];
954 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
955
956 typedef struct _FILE_FS_VOLUME_INFORMATION
957 {
958 LARGE_INTEGER VolumeCreationTime;
959 ULONG VolumeSerialNumber;
960 ULONG VolumeLabelLength;
961 BOOLEAN SupportsObjects;
962 WCHAR VolumeLabel[1];
963 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
964
965 /*
966 * Registry Key Value
967 */
968
969 /* Class 0 */
970 typedef struct _KEY_VALUE_ENTRY
971 {
972 PUNICODE_STRING ValueName;
973 ULONG DataLength;
974 ULONG DataOffset;
975 ULONG Type;
976 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
977
978 /* Class 1 */
979 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
980 {
981 ULONG TitleIndex;
982 ULONG Type;
983 ULONG DataLength;
984 UCHAR Data[1];
985 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
986
987 /* Class 2 */
988 typedef struct _KEY_VALUE_BASIC_INFORMATION
989 {
990 ULONG TitleIndex;
991 ULONG Type;
992 ULONG NameLength;
993 WCHAR Name[1];
994 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
995
996 /* Class 3 */
997 typedef struct _KEY_VALUE_FULL_INFORMATION
998 {
999 ULONG TitleIndex;
1000 ULONG Type;
1001 ULONG DataOffset;
1002 ULONG DataLength;
1003 ULONG NameLength;
1004 WCHAR Name[1];
1005 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
1006
1007 /*
1008 * Registry Key
1009 */
1010
1011 /* Class 0 */
1012 typedef struct _KEY_BASIC_INFORMATION
1013 {
1014 LARGE_INTEGER LastWriteTime;
1015 ULONG TitleIndex;
1016 ULONG NameLength;
1017 WCHAR Name[1];
1018 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
1019
1020 /* File Pipe Structures for the FSCTLs */
1021 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
1022 {
1023 LARGE_INTEGER Timeout;
1024 ULONG NameLength;
1025 BOOLEAN TimeoutSpecified;
1026 WCHAR Name[1];
1027 } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
1028
1029 typedef struct _FILE_PIPE_PEEK_BUFFER
1030 {
1031 ULONG NamedPipeState;
1032 ULONG ReadDataAvailable;
1033 ULONG NumberOfMessages;
1034 ULONG MessageLength;
1035 CHAR Data[1];
1036 } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
1037
1038 /* The Kerner/User Shared Data Structure */
1039 typedef struct _KUSER_SHARED_DATA
1040 {
1041 ULONG TickCountLowDeprecated;
1042 ULONG TickCountMultiplier;
1043 volatile KSYSTEM_TIME InterruptTime;
1044 volatile KSYSTEM_TIME SystemTime;
1045 volatile KSYSTEM_TIME TimeZoneBias;
1046 USHORT ImageNumberLow;
1047 USHORT ImageNumberHigh;
1048 WCHAR NtSystemRoot[260];
1049 ULONG MaxStackTraceDepth;
1050 ULONG CryptoExponent;
1051 ULONG TimeZoneId;
1052 ULONG LargePageMinimum;
1053 ULONG Reserved2[7];
1054 NT_PRODUCT_TYPE NtProductType;
1055 BOOLEAN ProductTypeIsValid;
1056 ULONG NtMajorVersion;
1057 ULONG NtMinorVersion;
1058 BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
1059 ULONG Reserved1;
1060 ULONG Reserved3;
1061 volatile ULONG TimeSlip;
1062 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
1063 LARGE_INTEGER SystemExpirationDate;
1064 ULONG SuiteMask;
1065 BOOLEAN KdDebuggerEnabled;
1066 volatile ULONG ActiveConsoleId;
1067 volatile ULONG DismountCount;
1068 ULONG ComPlusPackage;
1069 ULONG LastSystemRITEventTickCount;
1070 ULONG NumberOfPhysicalPages;
1071 BOOLEAN SafeBootMode;
1072 ULONG TraceLogging;
1073 ULONGLONG Fill0;
1074 ULONGLONG SystemCall[4];
1075 union {
1076 volatile KSYSTEM_TIME TickCount;
1077 volatile ULONG64 TickCountQuad;
1078 };
1079 } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
1080
1081 /* Run-Time Library (RTL) Types */
1082 typedef struct _RTL_BITMAP
1083 {
1084 ULONG SizeOfBitMap;
1085 PULONG Buffer;
1086 } RTL_BITMAP, *PRTL_BITMAP;
1087
1088 typedef struct _RTL_BITMAP_RUN
1089 {
1090 ULONG StartingIndex;
1091 ULONG NumberOfBits;
1092 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
1093
1094 typedef struct _COMPRESSED_DATA_INFO
1095 {
1096 USHORT CompressionFormatAndEngine;
1097 UCHAR CompressionUnitShift;
1098 UCHAR ChunkShift;
1099 UCHAR ClusterShift;
1100 UCHAR Reserved;
1101 USHORT NumberOfChunks;
1102 ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
1103 } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
1104
1105 typedef struct _GENERATE_NAME_CONTEXT
1106 {
1107 USHORT Checksum;
1108 BOOLEAN CheckSumInserted;
1109 UCHAR NameLength;
1110 WCHAR NameBuffer[8];
1111 ULONG ExtensionLength;
1112 WCHAR ExtensionBuffer[4];
1113 ULONG LastIndexValue;
1114 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
1115
1116 typedef struct _RTL_SPLAY_LINKS
1117 {
1118 struct _RTL_SPLAY_LINKS *Parent;
1119 struct _RTL_SPLAY_LINKS *LeftChild;
1120 struct _RTL_SPLAY_LINKS *RightChild;
1121 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
1122
1123 struct _RTL_AVL_TABLE;
1124 struct _RTL_GENERIC_TABLE;
1125
1126 typedef NTSTATUS STDCALL
1127 (*PRTL_AVL_MATCH_FUNCTION)(
1128 struct _RTL_AVL_TABLE *Table,
1129 PVOID UserData,
1130 PVOID MatchData
1131 );
1132
1133 typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
1134 (*PRTL_AVL_COMPARE_ROUTINE) (
1135 struct _RTL_AVL_TABLE *Table,
1136 PVOID FirstStruct,
1137 PVOID SecondStruct
1138 );
1139
1140 typedef RTL_GENERIC_COMPARE_RESULTS STDCALL
1141 (*PRTL_GENERIC_COMPARE_ROUTINE) (
1142 struct _RTL_GENERIC_TABLE *Table,
1143 PVOID FirstStruct,
1144 PVOID SecondStruct
1145 );
1146
1147 typedef PVOID STDCALL
1148 (*PRTL_GENERIC_ALLOCATE_ROUTINE) (
1149 struct _RTL_GENERIC_TABLE *Table,
1150 LONG ByteSize
1151 );
1152
1153 typedef VOID STDCALL
1154 (*PRTL_GENERIC_FREE_ROUTINE) (
1155 struct _RTL_GENERIC_TABLE *Table,
1156 PVOID Buffer
1157 );
1158
1159 typedef VOID STDCALL
1160 (*PRTL_AVL_ALLOCATE_ROUTINE) (
1161 struct _RTL_AVL_TABLE *Table,
1162 LONG ByteSize
1163 );
1164
1165 typedef VOID STDCALL
1166 (*PRTL_AVL_FREE_ROUTINE) (
1167 struct _RTL_AVL_TABLE *Table,
1168 PVOID Buffer
1169 );
1170
1171 typedef struct _RTL_GENERIC_TABLE
1172 {
1173 PRTL_SPLAY_LINKS TableRoot;
1174 LIST_ENTRY InsertOrderList;
1175 PLIST_ENTRY OrderedPointer;
1176 ULONG WhichOrderedElement;
1177 ULONG NumberGenericTableElements;
1178 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
1179 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
1180 PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
1181 PVOID TableContext;
1182 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
1183
1184 typedef struct _RTL_BALANCED_LINKS
1185 {
1186 struct _RTL_BALANCED_LINKS *Parent;
1187 struct _RTL_BALANCED_LINKS *LeftChild;
1188 struct _RTL_BALANCED_LINKS *RightChild;
1189 CHAR Balance;
1190 UCHAR Reserved[3];
1191 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
1192
1193 typedef struct _RTL_AVL_TABLE
1194 {
1195 RTL_BALANCED_LINKS BalancedRoot;
1196 PVOID OrderedPointer;
1197 ULONG WhichOrderedElement;
1198 ULONG NumberGenericTableElements;
1199 ULONG DepthOfTree;
1200 PRTL_BALANCED_LINKS RestartKey;
1201 ULONG DeleteCount;
1202 PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
1203 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
1204 PRTL_AVL_FREE_ROUTINE FreeRoutine;
1205 PVOID TableContext;
1206 } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
1207
1208 typedef NTSTATUS STDCALL
1209 (*PRTL_QUERY_REGISTRY_ROUTINE)(
1210 IN PWSTR ValueName,
1211 IN ULONG ValueType,
1212 IN PVOID ValueData,
1213 IN ULONG ValueLength,
1214 IN PVOID Context,
1215 IN PVOID EntryContext
1216 );
1217
1218 typedef struct _RTL_QUERY_REGISTRY_TABLE
1219 {
1220 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
1221 ULONG Flags;
1222 PWSTR Name;
1223 PVOID EntryContext;
1224 ULONG DefaultType;
1225 PVOID DefaultData;
1226 ULONG DefaultLength;
1227 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
1228
1229 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
1230 {
1231 CSHORT NodeTypeCode;
1232 CSHORT NameLength;
1233 struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
1234 struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
1235 RTL_SPLAY_LINKS Links;
1236 PUNICODE_STRING Prefix;
1237 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
1238
1239 typedef struct _UNICODE_PREFIX_TABLE
1240 {
1241 CSHORT NodeTypeCode;
1242 CSHORT NameLength;
1243 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
1244 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
1245 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
1246
1247 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW;
1248 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW;
1249 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW;
1250 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW;
1251
1252 #endif