3 Copyright (c) Alex Ionescu. All rights reserved.
11 Type definitions for the Run-Time Library
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
30 // Maximum Atom Length
32 #define RTL_MAXIMUM_ATOM_LENGTH 255
35 // Process Parameters Flags
37 #define RTL_USER_PROCESS_PARAMETERS_NORMALIZED 0x01
38 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_USER 0x02
39 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_SERVER 0x04
40 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_KERNEL 0x08
41 #define RTL_USER_PROCESS_PARAMETERS_UNKNOWN 0x10
42 #define RTL_USER_PROCESS_PARAMETERS_RESERVE_1MB 0x20
43 #define RTL_USER_PROCESS_PARAMETERS_DISABLE_HEAP_CHECKS 0x100
44 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_1 0x200
45 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_2 0x400
46 #define RTL_USER_PROCESS_PARAMETERS_PRIVATE_DLL_PATH 0x1000
47 #define RTL_USER_PROCESS_PARAMETERS_LOCAL_DLL_PATH 0x2000
48 #define RTL_USER_PROCESS_PARAMETERS_NX 0x20000
53 #define EXCEPTION_CHAIN_END ((PEXCEPTION_REGISTRATION_RECORD)-1)
54 #define EXCEPTION_UNWINDING 0x02
55 #define EXCEPTION_EXIT_UNWIND 0x04
56 #define EXCEPTION_STACK_INVALID 0x08
57 #define EXCEPTION_UNWIND (EXCEPTION_UNWINDING + EXCEPTION_EXIT_UNWIND)
58 #define EXCEPTION_NESTED_CALL 0x10
59 #define EXCEPTION_TARGET_UNWIND 0x20
60 #define EXCEPTION_COLLIDED_UNWIND 0x20
63 // Range and Range List Flags
65 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
66 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
68 #define RTL_RANGE_SHARED 0x01
69 #define RTL_RANGE_CONFLICT 0x02
72 // Activation Context Frame Flags
74 #define RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_FORMAT_WHISTLER \
80 #if !defined(NTOS_MODE_USER) && !defined(_NTIFS_)
81 #define HEAP_NO_SERIALIZE 0x00000001
82 #define HEAP_GROWABLE 0x00000002
83 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
84 #define HEAP_ZERO_MEMORY 0x00000008
85 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
86 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
87 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
88 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
89 #define HEAP_CREATE_ALIGN_16 0x00010000
90 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
91 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
95 // User-Defined Heap Flags and Classes
97 #define HEAP_SETTABLE_USER_VALUE 0x00000100
98 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
99 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
100 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
101 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
102 #define HEAP_CLASS_0 0x00000000
103 #define HEAP_CLASS_1 0x00001000
104 #define HEAP_CLASS_2 0x00002000
105 #define HEAP_CLASS_3 0x00003000
106 #define HEAP_CLASS_4 0x00004000
107 #define HEAP_CLASS_5 0x00005000
108 #define HEAP_CLASS_6 0x00006000
109 #define HEAP_CLASS_7 0x00007000
110 #define HEAP_CLASS_8 0x00008000
111 #define HEAP_CLASS_MASK 0x0000F000
114 // Internal HEAP Structure Flags
116 #define HEAP_FLAG_PAGE_ALLOCS 0x01000000
117 #define HEAP_PROTECTION_ENABLED 0x02000000
118 #define HEAP_BREAK_WHEN_OUT_OF_VM 0x04000000
119 #define HEAP_NO_ALIGNMENT 0x08000000
120 #define HEAP_CAPTURE_STACK_BACKTRACES 0x08000000
121 #define HEAP_SKIP_VALIDATION_CHECKS 0x10000000
122 #define HEAP_VALIDATE_ALL_ENABLED 0x20000000
123 #define HEAP_VALIDATE_PARAMETERS_ENABLED 0x40000000
124 #define HEAP_LOCK_USER_ALLOCATED 0x80000000
127 // Heap Validation Flags
129 #define HEAP_CREATE_VALID_MASK \
130 (HEAP_NO_SERIALIZE | \
132 HEAP_GENERATE_EXCEPTIONS | \
134 HEAP_REALLOC_IN_PLACE_ONLY | \
135 HEAP_TAIL_CHECKING_ENABLED | \
136 HEAP_FREE_CHECKING_ENABLED | \
137 HEAP_DISABLE_COALESCE_ON_FREE | \
139 HEAP_CREATE_ALIGN_16 | \
140 HEAP_CREATE_ENABLE_TRACING | \
141 HEAP_CREATE_ENABLE_EXECUTE)
143 C_ASSERT(HEAP_CREATE_VALID_MASK
== 0x0007F0FF);
147 // Native image architecture
150 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_I386
151 #elif defined(_M_ARM)
152 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_ARM
153 #elif defined(_M_AMD64)
154 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_AMD64
156 #error Define these please!
162 #define RTL_REGISTRY_ABSOLUTE 0
163 #define RTL_REGISTRY_SERVICES 1
164 #define RTL_REGISTRY_CONTROL 2
165 #define RTL_REGISTRY_WINDOWS_NT 3
166 #define RTL_REGISTRY_DEVICEMAP 4
167 #define RTL_REGISTRY_USER 5
168 #define RTL_REGISTRY_MAXIMUM 6
169 #define RTL_REGISTRY_HANDLE 0x40000000
170 #define RTL_REGISTRY_OPTIONAL 0x80000000
171 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
172 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
173 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
174 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
175 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
176 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
177 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
182 #define VER_MINORVERSION 0x0000001
183 #define VER_MAJORVERSION 0x0000002
184 #define VER_BUILDNUMBER 0x0000004
185 #define VER_PLATFORMID 0x0000008
186 #define VER_SERVICEPACKMINOR 0x0000010
187 #define VER_SERVICEPACKMAJOR 0x0000020
188 #define VER_SUITENAME 0x0000040
189 #define VER_PRODUCT_TYPE 0x0000080
190 #define VER_PLATFORM_WIN32s 0
191 #define VER_PLATFORM_WIN32_WINDOWS 1
192 #define VER_PLATFORM_WIN32_NT 2
194 #define VER_GREATER 2
195 #define VER_GREATER_EQUAL 3
197 #define VER_LESS_EQUAL 5
200 #define VER_CONDITION_MASK 7
201 #define VER_NUM_BITS_PER_CONDITION_MASK 3
206 #define TIME_ZONE_ID_UNKNOWN 0
207 #define TIME_ZONE_ID_STANDARD 1
208 #define TIME_ZONE_ID_DAYLIGHT 2
211 // Maximum Path Length
216 // RTL Lock Type (Critical Section or Resource)
218 #define RTL_CRITSECT_TYPE 0
219 #define RTL_RESOURCE_TYPE 1
222 // RtlAcquirePrivileges Flags
224 #define RTL_ACQUIRE_PRIVILEGE_IMPERSONATE 1
225 #define RTL_ACQUIRE_PRIVILEGE_PROCESS 2
227 #ifdef NTOS_MODE_USER
230 // String Hash Algorithms
232 #define HASH_STRING_ALGORITHM_DEFAULT 0
233 #define HASH_STRING_ALGORITHM_X65599 1
234 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
237 // RtlDuplicateString Flags
239 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
240 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
243 // RtlFindCharInUnicodeString Flags
245 #define RTL_FIND_CHAR_IN_UNICODE_STRING_CASE_INSENSITIVE 4
248 // RtlImageNtHeaderEx Flags
250 #define RTL_IMAGE_NT_HEADER_EX_FLAG_NO_RANGE_CHECK 0x00000001
255 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
256 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
257 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
260 // Activation Contexts
262 #define INVALID_ACTIVATION_CONTEXT (PVOID)0xFFFFFFFF
267 #if defined(__cplusplus)
268 #define RTL_CONST_CAST(type) const_cast<type>
270 #define RTL_CONST_CAST(type) (type)
274 // Constant String Macro
276 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
278 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
279 sizeof(__SOURCE_STRING__), \
280 (__SOURCE_STRING__) \
284 // Constant Object Attributes Macro
286 #define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a) \
288 sizeof(OBJECT_ATTRIBUTES), \
290 RTL_CONST_CAST(PUNICODE_STRING)(n), \
296 #define RTL_INIT_OBJECT_ATTRIBUTES(n, a) \
297 RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
299 #else /* NTOS_MODE_USER */
301 // Message Resource Flag
303 #define MESSAGE_RESOURCE_UNICODE 0x0001
305 #endif /* !NTOS_MODE_USER */
306 #define MAXIMUM_LEADBYTES 12
311 #define RTL_DEBUG_QUERY_MODULES 0x01
312 #define RTL_DEBUG_QUERY_BACKTRACES 0x02
313 #define RTL_DEBUG_QUERY_HEAPS 0x04
314 #define RTL_DEBUG_QUERY_HEAP_TAGS 0x08
315 #define RTL_DEBUG_QUERY_HEAP_BLOCKS 0x10
316 #define RTL_DEBUG_QUERY_LOCKS 0x20
321 #define RTL_HANDLE_VALID 0x1
326 #define RTL_ATOM_IS_PINNED 0x1
329 // Critical section lock bits
331 #define CS_LOCK_BIT 0x1
332 #define CS_LOCK_BIT_V 0x0
333 #define CS_LOCK_WAITER_WOKEN 0x2
334 #define CS_LOCK_WAITER_INC 0x4
339 #ifdef NTOS_MODE_USER
340 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
341 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
344 // Constant String Macro
346 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
348 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
349 sizeof(__SOURCE_STRING__), \
350 (__SOURCE_STRING__) \
353 #endif /* NTOS_MODE_USER */
355 #ifdef NTOS_MODE_USER
358 // Table and Compare result types
360 typedef enum _TABLE_SEARCH_RESULT
366 } TABLE_SEARCH_RESULT
;
368 typedef enum _RTL_GENERIC_COMPARE_RESULTS
373 } RTL_GENERIC_COMPARE_RESULTS
;
375 #endif /* NTOS_MODE_USER */
380 typedef enum _RTL_PATH_TYPE
383 RtlPathTypeUncAbsolute
,
384 RtlPathTypeDriveAbsolute
,
385 RtlPathTypeDriveRelative
,
388 RtlPathTypeLocalDevice
,
389 RtlPathTypeRootLocalDevice
,
392 #ifndef NTOS_MODE_USER
395 // Heap Information Class
397 typedef enum _HEAP_INFORMATION_CLASS
399 HeapCompatibilityInformation
,
400 HeapEnableTerminationOnCorruption
401 } HEAP_INFORMATION_CLASS
;
404 // Callback function for RTL Timers or Registered Waits
407 (NTAPI
*WAITORTIMERCALLBACKFUNC
)(
409 BOOLEAN fTimerOrWaitFired
413 // Handler during Vectored RTL Exceptions
416 (NTAPI
*PVECTORED_EXCEPTION_HANDLER
)(
417 PEXCEPTION_POINTERS ExceptionPointers
421 // Worker Thread Callback for Rtl
424 (NTAPI
*WORKERCALLBACKFUNC
)(
428 #else /* !NTOS_MODE_USER */
431 // Handler during regular RTL Exceptions
433 typedef EXCEPTION_DISPOSITION
434 (NTAPI
*PEXCEPTION_ROUTINE
)(
435 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
436 IN PVOID EstablisherFrame
,
437 IN OUT
struct _CONTEXT
*ContextRecord
,
438 IN OUT PVOID DispatcherContext
442 // RTL Library Allocation/Free Routines
445 (NTAPI
*PRTL_ALLOCATE_STRING_ROUTINE
)(
450 (NTAPI
*PRTL_REALLOCATE_STRING_ROUTINE
)(
451 SIZE_T NumberOfBytes
,
457 (NTAPI
*PRTL_FREE_STRING_ROUTINE
)(
461 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine
;
462 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine
;
463 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine
;
465 #endif /* NTOS_MODE_USER */
468 // Callback for RTL Heap Enumeration
471 (NTAPI
*PHEAP_ENUMERATION_ROUTINE
)(
477 // Thread and Process Start Routines for RtlCreateUserThread/Process
479 typedef ULONG (NTAPI
*PTHREAD_START_ROUTINE
)(
484 (NTAPI
*PRTL_BASE_PROCESS_START_ROUTINE
)(
485 PTHREAD_START_ROUTINE StartAddress
,
490 // Declare empty structure definitions so that they may be referenced by
491 // routines before they are defined
493 struct _RTL_AVL_TABLE
;
494 struct _RTL_GENERIC_TABLE
;
498 // Routines and callbacks for the RTL AVL/Generic Table package
500 #ifdef NTOS_MODE_USER
502 (NTAPI RTL_AVL_MATCH_FUNCTION
)(
503 struct _RTL_AVL_TABLE
*Table
,
507 typedef RTL_AVL_MATCH_FUNCTION
*PRTL_AVL_MATCH_FUNCTION
;
509 typedef RTL_GENERIC_COMPARE_RESULTS
510 (NTAPI RTL_AVL_COMPARE_ROUTINE
) (
511 struct _RTL_AVL_TABLE
*Table
,
515 typedef RTL_AVL_COMPARE_ROUTINE
*PRTL_AVL_COMPARE_ROUTINE
;
517 typedef RTL_GENERIC_COMPARE_RESULTS
518 (NTAPI RTL_GENERIC_COMPARE_ROUTINE
) (
519 struct _RTL_GENERIC_TABLE
*Table
,
523 typedef RTL_GENERIC_COMPARE_ROUTINE
*PRTL_GENERIC_COMPARE_ROUTINE
;
526 (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE
) (
527 struct _RTL_GENERIC_TABLE
*Table
,
530 typedef RTL_GENERIC_ALLOCATE_ROUTINE
*PRTL_GENERIC_ALLOCATE_ROUTINE
;
533 (NTAPI RTL_AVL_ALLOCATE_ROUTINE
) (
534 struct _RTL_AVL_TABLE
*Table
,
537 typedef RTL_AVL_ALLOCATE_ROUTINE
*PRTL_AVL_ALLOCATE_ROUTINE
;
540 (NTAPI RTL_GENERIC_FREE_ROUTINE
) (
541 struct _RTL_GENERIC_TABLE
*Table
,
544 typedef RTL_GENERIC_FREE_ROUTINE
*PRTL_GENERIC_FREE_ROUTINE
;
547 (NTAPI RTL_AVL_FREE_ROUTINE
) (
548 struct _RTL_AVL_TABLE
*Table
,
551 typedef RTL_AVL_FREE_ROUTINE
*PRTL_AVL_FREE_ROUTINE
;
553 #ifdef RTL_USE_AVL_TABLES
554 #undef RTL_GENERIC_COMPARE_ROUTINE
555 #undef PRTL_GENERIC_COMPARE_ROUTINE
556 #undef RTL_GENERIC_ALLOCATE_ROUTINE
557 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
558 #undef RTL_GENERIC_FREE_ROUTINE
559 #undef PRTL_GENERIC_FREE_ROUTINE
561 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
562 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
563 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
564 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
565 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
566 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
567 #endif /* RTL_USE_AVL_TABLES */
569 #endif /* NTOS_MODE_USER */
572 // RTL Query Registry callback
574 #ifdef NTOS_MODE_USER
576 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
580 IN ULONG ValueLength
,
582 IN PVOID EntryContext
587 // RTL Secure Memory callbacks
589 #ifdef NTOS_MODE_USER
591 (NTAPI
*PRTL_SECURE_MEMORY_CACHE_CALLBACK
)(
598 // RTL Range List callbacks
600 #ifdef NTOS_MODE_USER
602 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
)(
604 struct _RTL_RANGE
*Range
608 // Custom Heap Commit Routine for RtlCreateHeap
611 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
)(
613 IN OUT PVOID
*CommitAddress
,
614 IN OUT PSIZE_T CommitSize
618 // Parameters for RtlCreateHeap
620 typedef struct _RTL_HEAP_PARAMETERS
623 SIZE_T SegmentReserve
;
624 SIZE_T SegmentCommit
;
625 SIZE_T DeCommitFreeBlockThreshold
;
626 SIZE_T DeCommitTotalFreeThreshold
;
627 SIZE_T MaximumAllocationSize
;
628 SIZE_T VirtualMemoryThreshold
;
629 SIZE_T InitialCommit
;
630 SIZE_T InitialReserve
;
631 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
633 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
636 // RTL Bitmap structures
638 typedef struct _RTL_BITMAP
642 } RTL_BITMAP
, *PRTL_BITMAP
;
644 typedef struct _RTL_BITMAP_RUN
648 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
651 // RtlGenerateXxxName context
653 typedef struct _GENERATE_NAME_CONTEXT
656 BOOLEAN CheckSumInserted
;
659 ULONG ExtensionLength
;
660 WCHAR ExtensionBuffer
[4];
661 ULONG LastIndexValue
;
662 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
665 // RTL Splay and Balanced Links structures
667 typedef struct _RTL_SPLAY_LINKS
669 struct _RTL_SPLAY_LINKS
*Parent
;
670 struct _RTL_SPLAY_LINKS
*LeftChild
;
671 struct _RTL_SPLAY_LINKS
*RightChild
;
672 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
674 typedef struct _RTL_BALANCED_LINKS
676 struct _RTL_BALANCED_LINKS
*Parent
;
677 struct _RTL_BALANCED_LINKS
*LeftChild
;
678 struct _RTL_BALANCED_LINKS
*RightChild
;
681 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
684 // RTL Avl/Generic Tables
686 #ifndef RTL_USE_AVL_TABLES
687 typedef struct _RTL_GENERIC_TABLE
689 PRTL_SPLAY_LINKS TableRoot
;
690 LIST_ENTRY InsertOrderList
;
691 PLIST_ENTRY OrderedPointer
;
692 ULONG WhichOrderedElement
;
693 ULONG NumberGenericTableElements
;
694 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
695 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
696 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
698 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
699 #endif /* !RTL_USE_AVL_TABLES */
701 typedef struct _RTL_AVL_TABLE
703 RTL_BALANCED_LINKS BalancedRoot
;
704 PVOID OrderedPointer
;
705 ULONG WhichOrderedElement
;
706 ULONG NumberGenericTableElements
;
708 PRTL_BALANCED_LINKS RestartKey
;
710 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
711 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
712 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
714 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
716 #ifdef RTL_USE_AVL_TABLES
717 #undef RTL_GENERIC_TABLE
718 #undef PRTL_GENERIC_TABLE
720 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
721 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
722 #endif /* RTL_USE_AVL_TABLES */
725 // RTL Compression Buffer
727 typedef struct _COMPRESSED_DATA_INFO
{
728 USHORT CompressionFormatAndEngine
;
729 UCHAR CompressionUnitShift
;
733 USHORT NumberOfChunks
;
734 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
735 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
738 // RtlQueryRegistry Data
740 typedef struct _RTL_QUERY_REGISTRY_TABLE
742 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
749 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
752 // RTL Unicode Table Structures
754 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
758 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
759 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
760 RTL_SPLAY_LINKS Links
;
761 PUNICODE_STRING Prefix
;
762 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
764 typedef struct _UNICODE_PREFIX_TABLE
768 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
769 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
770 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
773 // Time Structure for RTL Time calls
775 typedef struct _TIME_FIELDS
785 } TIME_FIELDS
, *PTIME_FIELDS
;
788 // Activation Context
790 typedef PVOID PACTIVATION_CONTEXT
;
793 // Activation Context Frame
795 typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
797 struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
*Previous
;
798 PACTIVATION_CONTEXT ActivationContext
;
800 } RTL_ACTIVATION_CONTEXT_STACK_FRAME
, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME
;
802 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
806 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
807 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
;
809 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
813 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
818 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
;
820 typedef RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
;
821 typedef PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
;
823 #if (NTDDI_VERSION >= NTDDI_WS03)
824 typedef struct _ACTIVATION_CONTEXT_STACK
826 PRTL_ACTIVATION_CONTEXT_STACK_FRAME ActiveFrame
;
827 LIST_ENTRY FrameListCache
;
829 ULONG NextCookieSequenceNumber
;
831 } ACTIVATION_CONTEXT_STACK
, *PACTIVATION_CONTEXT_STACK
;
833 typedef struct _ACTIVATION_CONTEXT_STACK
836 ULONG NextCookieSequenceNumber
;
838 LIST_ENTRY FrameListCache
;
839 } ACTIVATION_CONTEXT_STACK
, *PACTIVATION_CONTEXT_STACK
;
842 #endif /* NTOS_MODE_USER */
850 ACCESS_MASK AccessMask
;
854 // Information Structures for RTL Debug Functions
856 typedef struct _RTL_PROCESS_MODULE_INFORMATION
863 USHORT LoadOrderIndex
;
864 USHORT InitOrderIndex
;
866 USHORT OffsetToFileName
;
867 CHAR FullPathName
[256];
868 } RTL_PROCESS_MODULE_INFORMATION
, *PRTL_PROCESS_MODULE_INFORMATION
;
870 typedef struct _RTL_PROCESS_MODULES
872 ULONG NumberOfModules
;
873 RTL_PROCESS_MODULE_INFORMATION Modules
[1];
874 } RTL_PROCESS_MODULES
, *PRTL_PROCESS_MODULES
;
876 typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
879 RTL_PROCESS_MODULE_INFORMATION BaseInfo
;
883 } RTL_PROCESS_MODULE_INFORMATION_EX
, *PRTL_PROCESS_MODULE_INFORMATION_EX
;
885 typedef struct _RTL_HEAP_TAG_INFO
887 ULONG NumberOfAllocations
;
889 ULONG BytesAllocated
;
890 } RTL_HEAP_TAG_INFO
, *PRTL_HEAP_TAG_INFO
;
892 typedef struct _RTL_HEAP_USAGE_ENTRY
894 struct _RTL_HEAP_USAGE_ENTRY
*Next
;
895 } RTL_HEAP_USAGE_ENTRY
, *PRTL_HEAP_USAGE_ENTRY
;
897 typedef struct _RTL_HEAP_USAGE
900 ULONG BytesAllocated
;
901 ULONG BytesCommitted
;
903 ULONG BytesReservedMaximum
;
904 PRTL_HEAP_USAGE_ENTRY Entries
;
905 PRTL_HEAP_USAGE_ENTRY AddedEntries
;
906 PRTL_HEAP_USAGE_ENTRY RemovedEntries
;
908 } RTL_HEAP_USAGE
, *PRTL_HEAP_USAGE
;
910 typedef struct _RTL_HEAP_INFORMATION
914 USHORT EntryOverhead
;
915 USHORT CreatorBackTraceIndex
;
916 ULONG BytesAllocated
;
917 ULONG BytesCommitted
;
919 ULONG NumberOfEntries
;
920 ULONG NumberOfPseudoTags
;
921 ULONG PseudoTagGranularity
;
925 } RTL_HEAP_INFORMATION
, *PRTL_HEAP_INFORMATION
;
927 typedef struct _RTL_PROCESS_HEAPS
930 RTL_HEAP_INFORMATION Heaps
[1];
931 } RTL_PROCESS_HEAPS
, *PRTL_PROCESS_HEAPS
;
933 typedef struct _RTL_PROCESS_LOCK_INFORMATION
937 USHORT CreatorBackTraceIndex
;
940 ULONG ContentionCount
;
942 ULONG RecursionCount
;
943 ULONG NumberOfSharedWaiters
;
944 ULONG NumberOfExclusiveWaiters
;
945 } RTL_PROCESS_LOCK_INFORMATION
, *PRTL_PROCESS_LOCK_INFORMATION
;
947 typedef struct _RTL_PROCESS_LOCKS
950 RTL_PROCESS_LOCK_INFORMATION Locks
[1];
951 } RTL_PROCESS_LOCKS
, *PRTL_PROCESS_LOCKS
;
953 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
955 PVOID SymbolicBackTrace
;
960 } RTL_PROCESS_BACKTRACE_INFORMATION
, *PRTL_PROCESS_BACKTRACE_INFORMATION
;
962 typedef struct _RTL_PROCESS_BACKTRACES
964 ULONG CommittedMemory
;
965 ULONG ReservedMemory
;
966 ULONG NumberOfBackTraceLookups
;
967 ULONG NumberOfBackTraces
;
968 RTL_PROCESS_BACKTRACE_INFORMATION BackTraces
[1];
969 } RTL_PROCESS_BACKTRACES
, *PRTL_PROCESS_BACKTRACES
;
971 typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
977 // Option array continues below
979 } RTL_PROCESS_VERIFIER_OPTIONS
, *PRTL_PROCESS_VERIFIER_OPTIONS
;
981 typedef struct _RTL_DEBUG_INFORMATION
983 HANDLE SectionHandleClient
;
984 PVOID ViewBaseClient
;
985 PVOID ViewBaseTarget
;
987 HANDLE EventPairClient
;
988 PVOID EventPairTarget
;
989 HANDLE TargetProcessId
;
990 HANDLE TargetThreadHandle
;
997 PRTL_PROCESS_MODULES Modules
;
998 PRTL_PROCESS_MODULE_INFORMATION_EX ModulesEx
;
1000 PRTL_PROCESS_BACKTRACES BackTraces
;
1001 PRTL_PROCESS_HEAPS Heaps
;
1002 PRTL_PROCESS_LOCKS Locks
;
1003 HANDLE SpecificHeap
;
1004 HANDLE TargetProcessHandle
;
1005 RTL_PROCESS_VERIFIER_OPTIONS VerifierOptions
;
1007 HANDLE CriticalSectionHandle
;
1008 HANDLE CriticalSectionOwnerThread
;
1010 } RTL_DEBUG_INFORMATION
, *PRTL_DEBUG_INFORMATION
;
1013 // Unload Event Trace Structure for RtlGetUnloadEventTrace
1015 typedef struct _RTL_UNLOAD_EVENT_TRACE
1020 ULONG TimeDateStamp
;
1022 WCHAR ImageName
[32];
1023 } RTL_UNLOAD_EVENT_TRACE
, *PRTL_UNLOAD_EVENT_TRACE
;
1026 // RTL Handle Structures
1028 typedef struct _RTL_HANDLE_TABLE_ENTRY
1033 struct _RTL_HANDLE_TABLE_ENTRY
*NextFree
;
1035 } RTL_HANDLE_TABLE_ENTRY
, *PRTL_HANDLE_TABLE_ENTRY
;
1037 typedef struct _RTL_HANDLE_TABLE
1039 ULONG MaximumNumberOfHandles
;
1040 ULONG SizeOfHandleTableEntry
;
1042 PRTL_HANDLE_TABLE_ENTRY FreeHandles
;
1043 PRTL_HANDLE_TABLE_ENTRY CommittedHandles
;
1044 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles
;
1045 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles
;
1046 } RTL_HANDLE_TABLE
, *PRTL_HANDLE_TABLE
;
1051 typedef struct _EXCEPTION_REGISTRATION_RECORD
1053 struct _EXCEPTION_REGISTRATION_RECORD
*Next
;
1054 PEXCEPTION_ROUTINE Handler
;
1055 } EXCEPTION_REGISTRATION_RECORD
, *PEXCEPTION_REGISTRATION_RECORD
;
1058 // Current Directory Structures
1060 typedef struct _CURDIR
1062 UNICODE_STRING DosPath
;
1066 typedef struct _RTLP_CURDIR_REF
*PRTLP_CURDIR_REF
;
1067 typedef struct _RTL_RELATIVE_NAME_U
1069 UNICODE_STRING RelativeName
;
1070 HANDLE ContainingDirectory
;
1071 PRTLP_CURDIR_REF CurDirRef
;
1072 } RTL_RELATIVE_NAME_U
, *PRTL_RELATIVE_NAME_U
;
1074 typedef struct _RTL_DRIVE_LETTER_CURDIR
1079 UNICODE_STRING DosPath
;
1080 } RTL_DRIVE_LETTER_CURDIR
, *PRTL_DRIVE_LETTER_CURDIR
;
1082 typedef struct _RTL_PERTHREAD_CURDIR
1084 PRTL_DRIVE_LETTER_CURDIR CurrentDirectories
;
1085 PUNICODE_STRING ImageName
;
1087 } RTL_PERTHREAD_CURDIR
, *PRTL_PERTHREAD_CURDIR
;
1090 // Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
1092 typedef struct _RTL_ACQUIRE_STATE
1095 HANDLE OldImpersonationToken
;
1096 PTOKEN_PRIVILEGES OldPrivileges
;
1097 PTOKEN_PRIVILEGES NewPrivileges
;
1099 UCHAR OldPrivBuffer
[1024];
1100 } RTL_ACQUIRE_STATE
, *PRTL_ACQUIRE_STATE
;
1102 #ifndef NTOS_MODE_USER
1105 // RTL Critical Section Structures
1107 typedef struct _RTL_CRITICAL_SECTION_DEBUG
1110 USHORT CreatorBackTraceIndex
;
1111 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
1112 LIST_ENTRY ProcessLocksList
;
1114 ULONG ContentionCount
;
1116 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
1118 typedef struct _RTL_CRITICAL_SECTION
1120 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
1122 LONG RecursionCount
;
1123 HANDLE OwningThread
;
1124 HANDLE LockSemaphore
;
1125 ULONG_PTR SpinCount
;
1126 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
1128 #endif /* !NTOS_MODE_USER */
1131 // RTL Private Heap Structures
1133 typedef struct _HEAP_LOCK
1137 RTL_CRITICAL_SECTION CriticalSection
;
1138 #ifndef NTOS_MODE_USER
1141 UCHAR Padding
[0x68]; /* Max ERESOURCE size for x64 build. Needed because RTL is built only once */
1143 } HEAP_LOCK
, *PHEAP_LOCK
;
1146 // RTL Range List Structures
1148 typedef struct _RTL_RANGE_LIST
1150 LIST_ENTRY ListHead
;
1154 } RTL_RANGE_LIST
, *PRTL_RANGE_LIST
;
1156 typedef struct _RTL_RANGE
1164 } RTL_RANGE
, *PRTL_RANGE
;
1166 typedef struct _RANGE_LIST_ITERATOR
1168 PLIST_ENTRY RangeListHead
;
1169 PLIST_ENTRY MergedHead
;
1172 } RTL_RANGE_LIST_ITERATOR
, *PRTL_RANGE_LIST_ITERATOR
;
1177 typedef struct _RTL_RESOURCE
1179 RTL_CRITICAL_SECTION Lock
;
1180 HANDLE SharedSemaphore
;
1181 ULONG SharedWaiters
;
1182 HANDLE ExclusiveSemaphore
;
1183 ULONG ExclusiveWaiters
;
1185 HANDLE OwningThread
;
1188 } RTL_RESOURCE
, *PRTL_RESOURCE
;
1191 // Structures for RtlCreateUserProcess
1193 typedef struct _RTL_USER_PROCESS_PARAMETERS
1195 ULONG MaximumLength
;
1199 HANDLE ConsoleHandle
;
1201 HANDLE StandardInput
;
1202 HANDLE StandardOutput
;
1203 HANDLE StandardError
;
1204 CURDIR CurrentDirectory
;
1205 UNICODE_STRING DllPath
;
1206 UNICODE_STRING ImagePathName
;
1207 UNICODE_STRING CommandLine
;
1215 ULONG FillAttribute
;
1217 ULONG ShowWindowFlags
;
1218 UNICODE_STRING WindowTitle
;
1219 UNICODE_STRING DesktopInfo
;
1220 UNICODE_STRING ShellInfo
;
1221 UNICODE_STRING RuntimeData
;
1222 RTL_DRIVE_LETTER_CURDIR CurrentDirectories
[32];
1223 } RTL_USER_PROCESS_PARAMETERS
, *PRTL_USER_PROCESS_PARAMETERS
;
1225 typedef struct _RTL_USER_PROCESS_INFORMATION
1228 HANDLE ProcessHandle
;
1229 HANDLE ThreadHandle
;
1231 SECTION_IMAGE_INFORMATION ImageInformation
;
1232 } RTL_USER_PROCESS_INFORMATION
, *PRTL_USER_PROCESS_INFORMATION
;
1235 // RTL Atom Table Structures
1237 typedef struct _RTL_ATOM_TABLE_ENTRY
1239 struct _RTL_ATOM_TABLE_ENTRY
*HashLink
;
1242 USHORT ReferenceCount
;
1246 } RTL_ATOM_TABLE_ENTRY
, *PRTL_ATOM_TABLE_ENTRY
;
1248 typedef struct _RTL_ATOM_TABLE
1253 #ifdef NTOS_MODE_USER
1254 RTL_CRITICAL_SECTION CriticalSection
;
1256 FAST_MUTEX FastMutex
;
1261 #ifdef NTOS_MODE_USER
1262 RTL_HANDLE_TABLE RtlHandleTable
;
1264 PHANDLE_TABLE ExHandleTable
;
1267 ULONG NumberOfBuckets
;
1268 PRTL_ATOM_TABLE_ENTRY Buckets
[1];
1269 } RTL_ATOM_TABLE
, *PRTL_ATOM_TABLE
;
1273 // System Time and Timezone Structures
1275 typedef struct _SYSTEMTIME
1284 USHORT wMilliseconds
;
1285 } SYSTEMTIME
, *PSYSTEMTIME
, *LPSYSTEMTIME
;
1287 typedef struct _TIME_ZONE_INFORMATION
1290 WCHAR StandardName
[32];
1291 SYSTEMTIME StandardDate
;
1293 WCHAR DaylightName
[32];
1294 SYSTEMTIME DaylightDate
;
1296 } TIME_ZONE_INFORMATION
, *PTIME_ZONE_INFORMATION
, *LPTIME_ZONE_INFORMATION
;
1297 #endif /* !_WINBASE_ */
1300 // Native version of Timezone Structure
1302 typedef LPTIME_ZONE_INFORMATION PRTL_TIME_ZONE_INFORMATION
;
1307 typedef struct _RTL_PATCH_HEADER
1309 LIST_ENTRY PatchList
;
1310 PVOID PatchImageBase
;
1311 struct _RTL_PATCH_HEADER
*NextPath
;
1314 struct _HOTPATCH_HEADER
*HotpatchHeader
;
1315 UNICODE_STRING TargetDllName
;
1316 PVOID TargetDllBase
;
1317 PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry
;
1318 PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry
;
1319 struct _SYSTEM_HOTPATCH_CODE_INFORMATION
*CodeInfo
;
1320 } RTL_PATCH_HEADER
, *PRTL_PATCH_HEADER
;
1323 // Header for NLS Files
1325 typedef struct _NLS_FILE_HEADER
1329 USHORT MaximumCharacterSize
;
1331 USHORT UniDefaultChar
;
1332 USHORT TransDefaultChar
;
1333 USHORT TransUniDefaultChar
;
1334 UCHAR LeadByte
[MAXIMUM_LEADBYTES
];
1335 } NLS_FILE_HEADER
, *PNLS_FILE_HEADER
;
1340 typedef struct _RTL_STACK_TRACE_ENTRY
1342 struct _RTL_STACK_TRACE_ENTRY
*HashChain
;
1346 PVOID BackTrace
[32];
1347 } RTL_STACK_TRACE_ENTRY
, *PRTL_STACK_TRACE_ENTRY
;
1349 typedef struct _STACK_TRACE_DATABASE
1351 RTL_CRITICAL_SECTION CriticalSection
;
1352 } STACK_TRACE_DATABASE
, *PSTACK_TRACE_DATABASE
;
1354 typedef struct _RTL_TRACE_BLOCK
1362 struct _RTL_TRACE_BLOCK
*Next
;
1364 } RTL_TRACE_BLOCK
, *PRTL_TRACE_BLOCK
;
1366 #ifndef NTOS_MODE_USER
1369 // Message Resource Entry, Block and Data
1371 typedef struct _MESSAGE_RESOURCE_ENTRY
1375 UCHAR Text
[ANYSIZE_ARRAY
];
1376 } MESSAGE_RESOURCE_ENTRY
, *PMESSAGE_RESOURCE_ENTRY
;
1378 typedef struct _MESSAGE_RESOURCE_BLOCK
1382 ULONG OffsetToEntries
;
1383 } MESSAGE_RESOURCE_BLOCK
, *PMESSAGE_RESOURCE_BLOCK
;
1385 typedef struct _MESSAGE_RESOURCE_DATA
1387 ULONG NumberOfBlocks
;
1388 MESSAGE_RESOURCE_BLOCK Blocks
[ANYSIZE_ARRAY
];
1389 } MESSAGE_RESOURCE_DATA
, *PMESSAGE_RESOURCE_DATA
;
1391 #endif /* !NTOS_MODE_USER */
1392 #endif /* !_RTLTYPES_H */