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
34 // Maximum Atom Length
36 #define RTL_MAXIMUM_ATOM_LENGTH 255
39 // Process Parameters Flags
41 #define RTL_USER_PROCESS_PARAMETERS_NORMALIZED 0x01
42 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_USER 0x02
43 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_KERNEL 0x04
44 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_SERVER 0x08
45 #define RTL_USER_PROCESS_PARAMETERS_UNKNOWN 0x10
46 #define RTL_USER_PROCESS_PARAMETERS_RESERVE_1MB 0x20
47 #define RTL_USER_PROCESS_PARAMETERS_RESERVE_16MB 0x40
48 #define RTL_USER_PROCESS_PARAMETERS_CASE_SENSITIVE 0x80
49 #define RTL_USER_PROCESS_PARAMETERS_DISABLE_HEAP_CHECKS 0x100
50 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_1 0x200
51 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_2 0x400
52 #define RTL_USER_PROCESS_PARAMETERS_PRIVATE_DLL_PATH 0x1000
53 #define RTL_USER_PROCESS_PARAMETERS_LOCAL_DLL_PATH 0x2000
54 #define RTL_USER_PROCESS_PARAMETERS_IMAGE_KEY_MISSING 0x4000
55 #define RTL_USER_PROCESS_PARAMETERS_NX 0x20000
57 #define RTL_MAX_DRIVE_LETTERS 32
58 #define RTL_DRIVE_LETTER_VALID (USHORT)0x0001
61 // End of Exception List
63 #define EXCEPTION_CHAIN_END ((PEXCEPTION_REGISTRATION_RECORD)-1)
66 // Range and Range List Flags
68 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
69 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
71 #define RTL_RANGE_SHARED 0x01
72 #define RTL_RANGE_CONFLICT 0x02
75 // Flags in RTL_ACTIVATION_CONTEXT_STACK_FRAME (from Checked NTDLL)
77 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_NO_DEACTIVATE 0x02
78 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_ON_FREE_LIST 0x04
79 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_HEAP_ALLOCATED 0x08
80 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_NOT_REALLY_ACTIVATED 0x10
81 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_ACTIVATED 0x20
82 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_DEACTIVATED 0x40
85 // Activation Context Frame Flags (from Checked NTDLL)
87 #define RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_FORMAT_WHISTLER 0x01
90 // RtlActivateActivationContextEx Flags (from Checked NTDLL)
92 #define RTL_ACTIVATE_ACTIVATION_CONTEXT_EX_FLAG_RELEASE_ON_STACK_DEALLOCATION 0x01
95 // RtlDeactivateActivationContext Flags (based on Win32 flag and name of above)
97 #define RTL_DEACTIVATE_ACTIVATION_CONTEXT_FLAG_FORCE_EARLY_DEACTIVATION 0x01
100 // RtlQueryActivationContext Flags (based on Win32 flag and name of above)
102 #define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_USE_ACTIVE_ACTIVATION_CONTEXT 0x01
103 #define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_IS_HMODULE 0x02
104 #define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_IS_ADDRESS 0x04
105 #define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_NO_ADDREF 0x80000000
110 #if !defined(NTOS_MODE_USER) && !defined(_NTIFS_)
111 #define HEAP_NO_SERIALIZE 0x00000001
112 #define HEAP_GROWABLE 0x00000002
113 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
114 #define HEAP_ZERO_MEMORY 0x00000008
115 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
116 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
117 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
118 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
119 #define HEAP_CREATE_ALIGN_16 0x00010000
120 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
121 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
125 // User-Defined Heap Flags and Classes
127 #define HEAP_SETTABLE_USER_VALUE 0x00000100
128 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
129 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
130 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
131 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
132 #define HEAP_CLASS_0 0x00000000
133 #define HEAP_CLASS_1 0x00001000
134 #define HEAP_CLASS_2 0x00002000
135 #define HEAP_CLASS_3 0x00003000
136 #define HEAP_CLASS_4 0x00004000
137 #define HEAP_CLASS_5 0x00005000
138 #define HEAP_CLASS_6 0x00006000
139 #define HEAP_CLASS_7 0x00007000
140 #define HEAP_CLASS_8 0x00008000
141 #define HEAP_CLASS_MASK 0x0000F000
144 // Internal HEAP Structure Flags
146 #define HEAP_FLAG_PAGE_ALLOCS 0x01000000
147 #define HEAP_PROTECTION_ENABLED 0x02000000
148 #define HEAP_BREAK_WHEN_OUT_OF_VM 0x04000000
149 #define HEAP_NO_ALIGNMENT 0x08000000
150 #define HEAP_CAPTURE_STACK_BACKTRACES 0x08000000
151 #define HEAP_SKIP_VALIDATION_CHECKS 0x10000000
152 #define HEAP_VALIDATE_ALL_ENABLED 0x20000000
153 #define HEAP_VALIDATE_PARAMETERS_ENABLED 0x40000000
154 #define HEAP_LOCK_USER_ALLOCATED 0x80000000
157 // Heap Validation Flags
159 #define HEAP_CREATE_VALID_MASK \
160 (HEAP_NO_SERIALIZE | \
162 HEAP_GENERATE_EXCEPTIONS | \
164 HEAP_REALLOC_IN_PLACE_ONLY | \
165 HEAP_TAIL_CHECKING_ENABLED | \
166 HEAP_FREE_CHECKING_ENABLED | \
167 HEAP_DISABLE_COALESCE_ON_FREE | \
169 HEAP_CREATE_ALIGN_16 | \
170 HEAP_CREATE_ENABLE_TRACING | \
171 HEAP_CREATE_ENABLE_EXECUTE)
173 C_ASSERT(HEAP_CREATE_VALID_MASK
== 0x0007F0FF);
177 // Native image architecture
180 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_I386
181 #elif defined(_M_ARM)
182 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_ARM
183 #elif defined(_M_AMD64)
184 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_AMD64
186 #error Define these please!
192 #define RTL_REGISTRY_ABSOLUTE 0
193 #define RTL_REGISTRY_SERVICES 1
194 #define RTL_REGISTRY_CONTROL 2
195 #define RTL_REGISTRY_WINDOWS_NT 3
196 #define RTL_REGISTRY_DEVICEMAP 4
197 #define RTL_REGISTRY_USER 5
198 #define RTL_REGISTRY_MAXIMUM 6
199 #define RTL_REGISTRY_HANDLE 0x40000000
200 #define RTL_REGISTRY_OPTIONAL 0x80000000
201 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
202 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
203 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
204 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
205 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
206 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
207 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
212 #define VER_MINORVERSION 0x0000001
213 #define VER_MAJORVERSION 0x0000002
214 #define VER_BUILDNUMBER 0x0000004
215 #define VER_PLATFORMID 0x0000008
216 #define VER_SERVICEPACKMINOR 0x0000010
217 #define VER_SERVICEPACKMAJOR 0x0000020
218 #define VER_SUITENAME 0x0000040
219 #define VER_PRODUCT_TYPE 0x0000080
220 #define VER_PLATFORM_WIN32s 0
221 #define VER_PLATFORM_WIN32_WINDOWS 1
222 #define VER_PLATFORM_WIN32_NT 2
224 #define VER_GREATER 2
225 #define VER_GREATER_EQUAL 3
227 #define VER_LESS_EQUAL 5
230 #define VER_CONDITION_MASK 7
231 #define VER_NUM_BITS_PER_CONDITION_MASK 3
236 #define TIME_ZONE_ID_UNKNOWN 0
237 #define TIME_ZONE_ID_STANDARD 1
238 #define TIME_ZONE_ID_DAYLIGHT 2
241 // Maximum Path Length
246 // RTL Lock Type (Critical Section or Resource)
248 #define RTL_CRITSECT_TYPE 0
249 #define RTL_RESOURCE_TYPE 1
252 // RtlAcquirePrivileges Flags
254 #define RTL_ACQUIRE_PRIVILEGE_IMPERSONATE 1
255 #define RTL_ACQUIRE_PRIVILEGE_PROCESS 2
257 #ifdef NTOS_MODE_USER
260 // String Hash Algorithms
262 #define HASH_STRING_ALGORITHM_DEFAULT 0
263 #define HASH_STRING_ALGORITHM_X65599 1
264 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
267 // RtlDuplicateString Flags
269 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
270 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
273 // RtlFindCharInUnicodeString Flags
275 #define RTL_FIND_CHAR_IN_UNICODE_STRING_START_AT_END 1
276 #define RTL_FIND_CHAR_IN_UNICODE_STRING_COMPLEMENT_CHAR_SET 2
277 #define RTL_FIND_CHAR_IN_UNICODE_STRING_CASE_INSENSITIVE 4
280 // RtlImageNtHeaderEx Flags
282 #define RTL_IMAGE_NT_HEADER_EX_FLAG_NO_RANGE_CHECK 0x00000001
285 // RtlDosApplyFileIsolationRedirection_Ustr Flags
287 #define RTL_DOS_APPLY_FILE_REDIRECTION_USTR_FLAG_RESPECT_DOT_LOCAL 0x01
292 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
293 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
294 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
297 // Activation Contexts
299 #define INVALID_ACTIVATION_CONTEXT (PVOID)0xFFFFFFFF
304 #if defined(__cplusplus)
305 #define RTL_CONST_CAST(type) const_cast<type>
307 #define RTL_CONST_CAST(type) (type)
311 // Constant String Macro
313 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
315 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
316 sizeof(__SOURCE_STRING__), \
317 (__SOURCE_STRING__) \
321 // Constant Object Attributes Macro
323 #define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a) \
325 sizeof(OBJECT_ATTRIBUTES), \
327 RTL_CONST_CAST(PUNICODE_STRING)(n), \
333 #define RTL_INIT_OBJECT_ATTRIBUTES(n, a) \
334 RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
336 #else /* NTOS_MODE_USER */
338 // Message Resource Flag
340 #define MESSAGE_RESOURCE_UNICODE 0x0001
342 #endif /* !NTOS_MODE_USER */
343 #define MAXIMUM_LEADBYTES 12
348 #define RTL_DEBUG_QUERY_MODULES 0x01
349 #define RTL_DEBUG_QUERY_BACKTRACES 0x02
350 #define RTL_DEBUG_QUERY_HEAPS 0x04
351 #define RTL_DEBUG_QUERY_HEAP_TAGS 0x08
352 #define RTL_DEBUG_QUERY_HEAP_BLOCKS 0x10
353 #define RTL_DEBUG_QUERY_LOCKS 0x20
358 #define RTL_HANDLE_VALID 0x1
363 #define RTL_ATOM_IS_PINNED 0x1
366 // Critical section lock bits
368 #define CS_LOCK_BIT 0x1
369 #define CS_LOCK_BIT_V 0x0
370 #define CS_LOCK_WAITER_WOKEN 0x2
371 #define CS_LOCK_WAITER_INC 0x4
376 #ifdef NTOS_MODE_USER
377 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
378 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
381 // Constant String Macro
383 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
385 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
386 sizeof(__SOURCE_STRING__), \
387 (__SOURCE_STRING__) \
390 #endif /* NTOS_MODE_USER */
392 #ifdef NTOS_MODE_USER
395 // Boot Status Data Field Types
397 typedef enum _RTL_BSD_ITEM_TYPE
399 RtlBsdItemVersionNumber
,
400 RtlBsdItemProductType
,
401 RtlBsdItemAabEnabled
,
402 RtlBsdItemAabTimeout
,
404 RtlBsdItemBootShutdown
,
406 } RTL_BSD_ITEM_TYPE
, *PRTL_BSD_ITEM_TYPE
;
409 // Table and Compare result types
411 typedef enum _TABLE_SEARCH_RESULT
417 } TABLE_SEARCH_RESULT
;
419 typedef enum _RTL_GENERIC_COMPARE_RESULTS
424 } RTL_GENERIC_COMPARE_RESULTS
;
426 #endif /* NTOS_MODE_USER */
431 typedef enum _RTL_PATH_TYPE
434 RtlPathTypeUncAbsolute
,
435 RtlPathTypeDriveAbsolute
,
436 RtlPathTypeDriveRelative
,
439 RtlPathTypeLocalDevice
,
440 RtlPathTypeRootLocalDevice
,
443 #ifndef NTOS_MODE_USER
446 // Heap Information Class
448 typedef enum _HEAP_INFORMATION_CLASS
450 HeapCompatibilityInformation
,
451 HeapEnableTerminationOnCorruption
452 } HEAP_INFORMATION_CLASS
;
455 // Callback function for RTL Timers or Registered Waits
458 (NTAPI
*WAITORTIMERCALLBACKFUNC
)(
460 BOOLEAN fTimerOrWaitFired
464 // Handler during Vectored RTL Exceptions
467 (NTAPI
*PVECTORED_EXCEPTION_HANDLER
)(
468 PEXCEPTION_POINTERS ExceptionPointers
472 // Worker Thread Callback for Rtl
475 (NTAPI
*WORKERCALLBACKFUNC
)(
479 #else /* !NTOS_MODE_USER */
482 // RTL Library Allocation/Free Routines
485 (NTAPI
*PRTL_ALLOCATE_STRING_ROUTINE
)(
490 (NTAPI
*PRTL_REALLOCATE_STRING_ROUTINE
)(
491 SIZE_T NumberOfBytes
,
497 (NTAPI
*PRTL_FREE_STRING_ROUTINE
)(
501 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine
;
502 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine
;
503 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine
;
505 #endif /* NTOS_MODE_USER */
508 // Unhandled Exception Filter
511 (NTAPI
*RTLP_UNHANDLED_EXCEPTION_FILTER
)(
512 _In_
struct _EXCEPTION_POINTERS
*ExceptionInfo
514 typedef RTLP_UNHANDLED_EXCEPTION_FILTER
*PRTLP_UNHANDLED_EXCEPTION_FILTER
;
517 // Callback for RTL Heap Enumeration
520 (NTAPI
*PHEAP_ENUMERATION_ROUTINE
)(
521 _In_ PVOID HeapHandle
,
526 // Thread and Process Start Routines for RtlCreateUserThread/Process
528 typedef ULONG (NTAPI
*PTHREAD_START_ROUTINE
)(
533 (NTAPI
*PRTL_BASE_PROCESS_START_ROUTINE
)(
534 PTHREAD_START_ROUTINE StartAddress
,
539 // Worker Start/Exit Function
542 (NTAPI
*PRTL_START_POOL_THREAD
)(
543 _In_ PTHREAD_START_ROUTINE Function
,
544 _In_ PVOID Parameter
,
545 _Out_ PHANDLE ThreadHandle
549 (NTAPI
*PRTL_EXIT_POOL_THREAD
)(
550 _In_ NTSTATUS ExitStatus
554 // Declare empty structure definitions so that they may be referenced by
555 // routines before they are defined
557 struct _RTL_AVL_TABLE
;
558 struct _RTL_GENERIC_TABLE
;
562 // Routines and callbacks for the RTL AVL/Generic Table package
564 #ifdef NTOS_MODE_USER
566 (NTAPI RTL_AVL_MATCH_FUNCTION
)(
567 struct _RTL_AVL_TABLE
*Table
,
571 typedef RTL_AVL_MATCH_FUNCTION
*PRTL_AVL_MATCH_FUNCTION
;
573 typedef RTL_GENERIC_COMPARE_RESULTS
574 (NTAPI RTL_AVL_COMPARE_ROUTINE
) (
575 struct _RTL_AVL_TABLE
*Table
,
579 typedef RTL_AVL_COMPARE_ROUTINE
*PRTL_AVL_COMPARE_ROUTINE
;
581 typedef RTL_GENERIC_COMPARE_RESULTS
582 (NTAPI RTL_GENERIC_COMPARE_ROUTINE
) (
583 struct _RTL_GENERIC_TABLE
*Table
,
587 typedef RTL_GENERIC_COMPARE_ROUTINE
*PRTL_GENERIC_COMPARE_ROUTINE
;
590 (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE
) (
591 struct _RTL_GENERIC_TABLE
*Table
,
594 typedef RTL_GENERIC_ALLOCATE_ROUTINE
*PRTL_GENERIC_ALLOCATE_ROUTINE
;
597 (NTAPI RTL_AVL_ALLOCATE_ROUTINE
) (
598 struct _RTL_AVL_TABLE
*Table
,
601 typedef RTL_AVL_ALLOCATE_ROUTINE
*PRTL_AVL_ALLOCATE_ROUTINE
;
604 (NTAPI RTL_GENERIC_FREE_ROUTINE
) (
605 struct _RTL_GENERIC_TABLE
*Table
,
608 typedef RTL_GENERIC_FREE_ROUTINE
*PRTL_GENERIC_FREE_ROUTINE
;
611 (NTAPI RTL_AVL_FREE_ROUTINE
) (
612 struct _RTL_AVL_TABLE
*Table
,
615 typedef RTL_AVL_FREE_ROUTINE
*PRTL_AVL_FREE_ROUTINE
;
617 #ifdef RTL_USE_AVL_TABLES
618 #undef RTL_GENERIC_COMPARE_ROUTINE
619 #undef PRTL_GENERIC_COMPARE_ROUTINE
620 #undef RTL_GENERIC_ALLOCATE_ROUTINE
621 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
622 #undef RTL_GENERIC_FREE_ROUTINE
623 #undef PRTL_GENERIC_FREE_ROUTINE
625 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
626 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
627 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
628 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
629 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
630 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
631 #endif /* RTL_USE_AVL_TABLES */
633 #endif /* NTOS_MODE_USER */
636 // RTL Query Registry callback
638 #ifdef NTOS_MODE_USER
640 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
641 _In_ PWSTR ValueName
,
642 _In_ ULONG ValueType
,
643 _In_ PVOID ValueData
,
644 _In_ ULONG ValueLength
,
646 _In_ PVOID EntryContext
651 // RTL Secure Memory callbacks
653 #ifdef NTOS_MODE_USER
655 (NTAPI
*PRTL_SECURE_MEMORY_CACHE_CALLBACK
)(
662 // RTL Range List callbacks
664 #ifdef NTOS_MODE_USER
666 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
)(
668 struct _RTL_RANGE
*Range
672 // Custom Heap Commit Routine for RtlCreateHeap
675 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
)(
677 _Inout_ PVOID
*CommitAddress
,
678 _Inout_ PSIZE_T CommitSize
682 // Parameters for RtlCreateHeap
684 typedef struct _RTL_HEAP_PARAMETERS
687 SIZE_T SegmentReserve
;
688 SIZE_T SegmentCommit
;
689 SIZE_T DeCommitFreeBlockThreshold
;
690 SIZE_T DeCommitTotalFreeThreshold
;
691 SIZE_T MaximumAllocationSize
;
692 SIZE_T VirtualMemoryThreshold
;
693 SIZE_T InitialCommit
;
694 SIZE_T InitialReserve
;
695 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
697 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
700 // RTL Bitmap structures
702 typedef struct _RTL_BITMAP
706 } RTL_BITMAP
, *PRTL_BITMAP
;
708 typedef struct _RTL_BITMAP_RUN
712 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
715 // RtlGenerateXxxName context
717 typedef struct _GENERATE_NAME_CONTEXT
720 BOOLEAN CheckSumInserted
;
723 ULONG ExtensionLength
;
724 WCHAR ExtensionBuffer
[4];
725 ULONG LastIndexValue
;
726 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
729 // RTL Splay and Balanced Links structures
731 typedef struct _RTL_SPLAY_LINKS
733 struct _RTL_SPLAY_LINKS
*Parent
;
734 struct _RTL_SPLAY_LINKS
*LeftChild
;
735 struct _RTL_SPLAY_LINKS
*RightChild
;
736 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
738 typedef struct _RTL_BALANCED_LINKS
740 struct _RTL_BALANCED_LINKS
*Parent
;
741 struct _RTL_BALANCED_LINKS
*LeftChild
;
742 struct _RTL_BALANCED_LINKS
*RightChild
;
745 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
748 // RTL Avl/Generic Tables
750 #ifndef RTL_USE_AVL_TABLES
751 typedef struct _RTL_GENERIC_TABLE
753 PRTL_SPLAY_LINKS TableRoot
;
754 LIST_ENTRY InsertOrderList
;
755 PLIST_ENTRY OrderedPointer
;
756 ULONG WhichOrderedElement
;
757 ULONG NumberGenericTableElements
;
758 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
759 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
760 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
762 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
763 #endif /* !RTL_USE_AVL_TABLES */
765 typedef struct _RTL_AVL_TABLE
767 RTL_BALANCED_LINKS BalancedRoot
;
768 PVOID OrderedPointer
;
769 ULONG WhichOrderedElement
;
770 ULONG NumberGenericTableElements
;
772 PRTL_BALANCED_LINKS RestartKey
;
774 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
775 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
776 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
778 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
780 #ifdef RTL_USE_AVL_TABLES
781 #undef RTL_GENERIC_TABLE
782 #undef PRTL_GENERIC_TABLE
784 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
785 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
786 #endif /* RTL_USE_AVL_TABLES */
789 // RTL Compression Buffer
791 typedef struct _COMPRESSED_DATA_INFO
{
792 USHORT CompressionFormatAndEngine
;
793 UCHAR CompressionUnitShift
;
797 USHORT NumberOfChunks
;
798 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
799 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
802 // RtlQueryRegistry Data
804 typedef struct _RTL_QUERY_REGISTRY_TABLE
806 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
813 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
816 // RTL Unicode Table Structures
818 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
822 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
823 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
824 RTL_SPLAY_LINKS Links
;
825 PUNICODE_STRING Prefix
;
826 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
828 typedef struct _UNICODE_PREFIX_TABLE
832 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
833 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
834 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
837 // Time Structure for RTL Time calls
839 typedef struct _TIME_FIELDS
849 } TIME_FIELDS
, *PTIME_FIELDS
;
852 // Activation Context
854 typedef PVOID PACTIVATION_CONTEXT
;
857 // Activation Context Frame
859 typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
861 struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
*Previous
;
862 PACTIVATION_CONTEXT ActivationContext
;
864 } RTL_ACTIVATION_CONTEXT_STACK_FRAME
, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME
;
866 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
870 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
871 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
;
873 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
877 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
882 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
;
884 typedef RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
;
885 typedef PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
;
887 #if (NTDDI_VERSION >= NTDDI_WS03)
888 typedef struct _ACTIVATION_CONTEXT_STACK
890 PRTL_ACTIVATION_CONTEXT_STACK_FRAME ActiveFrame
;
891 LIST_ENTRY FrameListCache
;
893 ULONG NextCookieSequenceNumber
;
895 } ACTIVATION_CONTEXT_STACK
, *PACTIVATION_CONTEXT_STACK
;
897 typedef struct _ACTIVATION_CONTEXT_STACK
900 ULONG NextCookieSequenceNumber
;
902 LIST_ENTRY FrameListCache
;
903 } ACTIVATION_CONTEXT_STACK
, *PACTIVATION_CONTEXT_STACK
;
906 typedef struct _ACTIVATION_CONTEXT_DATA
912 ULONG DefaultTocOffset
;
913 ULONG ExtendedTocOffset
;
914 ULONG AssemblyRosterOffset
;
916 } ACTIVATION_CONTEXT_DATA
, *PACTIVATION_CONTEXT_DATA
;
918 #endif /* NTOS_MODE_USER */
926 ACCESS_MASK AccessMask
;
930 // Information Structures for RTL Debug Functions
932 typedef struct _RTL_PROCESS_MODULE_INFORMATION
939 USHORT LoadOrderIndex
;
940 USHORT InitOrderIndex
;
942 USHORT OffsetToFileName
;
943 CHAR FullPathName
[256];
944 } RTL_PROCESS_MODULE_INFORMATION
, *PRTL_PROCESS_MODULE_INFORMATION
;
946 typedef struct _RTL_PROCESS_MODULES
948 ULONG NumberOfModules
;
949 RTL_PROCESS_MODULE_INFORMATION Modules
[1];
950 } RTL_PROCESS_MODULES
, *PRTL_PROCESS_MODULES
;
952 typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
955 RTL_PROCESS_MODULE_INFORMATION BaseInfo
;
959 } RTL_PROCESS_MODULE_INFORMATION_EX
, *PRTL_PROCESS_MODULE_INFORMATION_EX
;
961 typedef struct _RTL_HEAP_TAG_INFO
963 ULONG NumberOfAllocations
;
965 SIZE_T BytesAllocated
;
966 } RTL_HEAP_TAG_INFO
, *PRTL_HEAP_TAG_INFO
;
968 typedef struct _RTL_HEAP_USAGE_ENTRY
970 struct _RTL_HEAP_USAGE_ENTRY
*Next
;
973 USHORT AllocatorBackTraceIndex
;
975 } RTL_HEAP_USAGE_ENTRY
, *PRTL_HEAP_USAGE_ENTRY
;
977 typedef struct _RTL_HEAP_USAGE
980 SIZE_T BytesAllocated
;
981 SIZE_T BytesCommitted
;
982 SIZE_T BytesReserved
;
983 SIZE_T BytesReservedMaximum
;
984 PRTL_HEAP_USAGE_ENTRY Entries
;
985 PRTL_HEAP_USAGE_ENTRY AddedEntries
;
986 PRTL_HEAP_USAGE_ENTRY RemovedEntries
;
987 ULONG_PTR Reserved
[8];
988 } RTL_HEAP_USAGE
, *PRTL_HEAP_USAGE
;
990 typedef struct _RTL_HEAP_WALK_ENTRY
1003 USHORT AllocatorBackTraceIndex
;
1008 ULONG_PTR CommittedSize
;
1009 ULONG_PTR UnCommittedSize
;
1014 } RTL_HEAP_WALK_ENTRY
, *PRTL_HEAP_WALK_ENTRY
;
1016 typedef struct _RTL_HEAP_ENTRY
1020 USHORT AllocatorBackTraceIndex
;
1030 SIZE_T CommittedSize
;
1034 } RTL_HEAP_ENTRY
, *PRTL_HEAP_ENTRY
;
1036 typedef struct _RTL_HEAP_TAG
1038 ULONG NumberOfAllocations
;
1039 ULONG NumberOfFrees
;
1040 SIZE_T BytesAllocated
;
1042 USHORT CreatorBackTraceIndex
;
1044 } RTL_HEAP_TAG
, *PRTL_HEAP_TAG
;
1046 typedef struct _RTL_HEAP_INFORMATION
1050 USHORT EntryOverhead
;
1051 USHORT CreatorBackTraceIndex
;
1052 SIZE_T BytesAllocated
;
1053 SIZE_T BytesCommitted
;
1055 ULONG NumberOfEntries
;
1056 ULONG NumberOfPseudoTags
;
1057 ULONG PseudoTagGranularity
;
1060 PRTL_HEAP_ENTRY Entries
;
1061 } RTL_HEAP_INFORMATION
, *PRTL_HEAP_INFORMATION
;
1063 typedef struct _RTL_PROCESS_HEAPS
1065 ULONG NumberOfHeaps
;
1066 RTL_HEAP_INFORMATION Heaps
[1];
1067 } RTL_PROCESS_HEAPS
, *PRTL_PROCESS_HEAPS
;
1069 typedef struct _RTL_PROCESS_LOCK_INFORMATION
1073 USHORT CreatorBackTraceIndex
;
1074 ULONG OwnerThreadId
;
1076 ULONG ContentionCount
;
1078 ULONG RecursionCount
;
1079 ULONG NumberOfSharedWaiters
;
1080 ULONG NumberOfExclusiveWaiters
;
1081 } RTL_PROCESS_LOCK_INFORMATION
, *PRTL_PROCESS_LOCK_INFORMATION
;
1083 typedef struct _RTL_PROCESS_LOCKS
1085 ULONG NumberOfLocks
;
1086 RTL_PROCESS_LOCK_INFORMATION Locks
[1];
1087 } RTL_PROCESS_LOCKS
, *PRTL_PROCESS_LOCKS
;
1089 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
1091 PVOID SymbolicBackTrace
;
1095 PVOID BackTrace
[16];
1096 } RTL_PROCESS_BACKTRACE_INFORMATION
, *PRTL_PROCESS_BACKTRACE_INFORMATION
;
1098 typedef struct _RTL_PROCESS_BACKTRACES
1100 ULONG CommittedMemory
;
1101 ULONG ReservedMemory
;
1102 ULONG NumberOfBackTraceLookups
;
1103 ULONG NumberOfBackTraces
;
1104 RTL_PROCESS_BACKTRACE_INFORMATION BackTraces
[1];
1105 } RTL_PROCESS_BACKTRACES
, *PRTL_PROCESS_BACKTRACES
;
1107 typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
1111 UCHAR OptionData
[1];
1113 // Option array continues below
1115 } RTL_PROCESS_VERIFIER_OPTIONS
, *PRTL_PROCESS_VERIFIER_OPTIONS
;
1117 typedef struct _RTL_DEBUG_INFORMATION
1119 HANDLE SectionHandleClient
;
1120 PVOID ViewBaseClient
;
1121 PVOID ViewBaseTarget
;
1122 ULONG ViewBaseDelta
;
1123 HANDLE EventPairClient
;
1124 PVOID EventPairTarget
;
1125 HANDLE TargetProcessId
;
1126 HANDLE TargetThreadHandle
;
1133 PRTL_PROCESS_MODULES Modules
;
1134 PRTL_PROCESS_MODULE_INFORMATION_EX ModulesEx
;
1136 PRTL_PROCESS_BACKTRACES BackTraces
;
1137 PRTL_PROCESS_HEAPS Heaps
;
1138 PRTL_PROCESS_LOCKS Locks
;
1139 HANDLE SpecificHeap
;
1140 HANDLE TargetProcessHandle
;
1141 RTL_PROCESS_VERIFIER_OPTIONS VerifierOptions
;
1143 HANDLE CriticalSectionHandle
;
1144 HANDLE CriticalSectionOwnerThread
;
1146 } RTL_DEBUG_INFORMATION
, *PRTL_DEBUG_INFORMATION
;
1149 // Unload Event Trace Structure for RtlGetUnloadEventTrace
1151 typedef struct _RTL_UNLOAD_EVENT_TRACE
1156 ULONG TimeDateStamp
;
1158 WCHAR ImageName
[32];
1159 } RTL_UNLOAD_EVENT_TRACE
, *PRTL_UNLOAD_EVENT_TRACE
;
1162 // RTL Handle Structures
1164 typedef struct _RTL_HANDLE_TABLE_ENTRY
1169 struct _RTL_HANDLE_TABLE_ENTRY
*NextFree
;
1171 } RTL_HANDLE_TABLE_ENTRY
, *PRTL_HANDLE_TABLE_ENTRY
;
1173 typedef struct _RTL_HANDLE_TABLE
1175 ULONG MaximumNumberOfHandles
;
1176 ULONG SizeOfHandleTableEntry
;
1178 PRTL_HANDLE_TABLE_ENTRY FreeHandles
;
1179 PRTL_HANDLE_TABLE_ENTRY CommittedHandles
;
1180 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles
;
1181 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles
;
1182 } RTL_HANDLE_TABLE
, *PRTL_HANDLE_TABLE
;
1187 typedef struct _EXCEPTION_REGISTRATION_RECORD
1189 struct _EXCEPTION_REGISTRATION_RECORD
*Next
;
1190 PEXCEPTION_ROUTINE Handler
;
1191 } EXCEPTION_REGISTRATION_RECORD
, *PEXCEPTION_REGISTRATION_RECORD
;
1194 // Current Directory Structures
1196 typedef struct _CURDIR
1198 UNICODE_STRING DosPath
;
1202 typedef struct _RTLP_CURDIR_REF
1206 } RTLP_CURDIR_REF
, *PRTLP_CURDIR_REF
;
1208 typedef struct _RTL_RELATIVE_NAME_U
1210 UNICODE_STRING RelativeName
;
1211 HANDLE ContainingDirectory
;
1212 PRTLP_CURDIR_REF CurDirRef
;
1213 } RTL_RELATIVE_NAME_U
, *PRTL_RELATIVE_NAME_U
;
1215 typedef struct _RTL_DRIVE_LETTER_CURDIR
1220 UNICODE_STRING DosPath
;
1221 } RTL_DRIVE_LETTER_CURDIR
, *PRTL_DRIVE_LETTER_CURDIR
;
1223 typedef struct _RTL_PERTHREAD_CURDIR
1225 PRTL_DRIVE_LETTER_CURDIR CurrentDirectories
;
1226 PUNICODE_STRING ImageName
;
1228 } RTL_PERTHREAD_CURDIR
, *PRTL_PERTHREAD_CURDIR
;
1231 // Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
1233 typedef struct _RTL_ACQUIRE_STATE
1236 HANDLE OldImpersonationToken
;
1237 PTOKEN_PRIVILEGES OldPrivileges
;
1238 PTOKEN_PRIVILEGES NewPrivileges
;
1240 UCHAR OldPrivBuffer
[1024];
1241 } RTL_ACQUIRE_STATE
, *PRTL_ACQUIRE_STATE
;
1243 #ifndef NTOS_MODE_USER
1246 // RTL Critical Section Structures
1248 typedef struct _RTL_CRITICAL_SECTION_DEBUG
1251 USHORT CreatorBackTraceIndex
;
1252 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
1253 LIST_ENTRY ProcessLocksList
;
1255 ULONG ContentionCount
;
1257 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
1259 typedef struct _RTL_CRITICAL_SECTION
1261 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
1263 LONG RecursionCount
;
1264 HANDLE OwningThread
;
1265 HANDLE LockSemaphore
;
1266 ULONG_PTR SpinCount
;
1267 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
1269 #endif /* !NTOS_MODE_USER */
1272 // RTL Private Heap Structures
1274 typedef struct _HEAP_LOCK
1278 RTL_CRITICAL_SECTION CriticalSection
;
1279 #ifndef NTOS_MODE_USER
1282 UCHAR Padding
[0x68]; /* Max ERESOURCE size for x64 build. Needed because RTL is built only once */
1284 } HEAP_LOCK
, *PHEAP_LOCK
;
1287 // RTL Range List Structures
1289 typedef struct _RTL_RANGE_LIST
1291 LIST_ENTRY ListHead
;
1295 } RTL_RANGE_LIST
, *PRTL_RANGE_LIST
;
1297 typedef struct _RTL_RANGE
1305 } RTL_RANGE
, *PRTL_RANGE
;
1307 typedef struct _RANGE_LIST_ITERATOR
1309 PLIST_ENTRY RangeListHead
;
1310 PLIST_ENTRY MergedHead
;
1313 } RTL_RANGE_LIST_ITERATOR
, *PRTL_RANGE_LIST_ITERATOR
;
1318 #define RTL_RESOURCE_FLAG_LONG_TERM ((ULONG)0x00000001)
1320 typedef struct _RTL_RESOURCE
1322 RTL_CRITICAL_SECTION Lock
;
1323 HANDLE SharedSemaphore
;
1324 ULONG SharedWaiters
;
1325 HANDLE ExclusiveSemaphore
;
1326 ULONG ExclusiveWaiters
;
1328 HANDLE OwningThread
;
1331 } RTL_RESOURCE
, *PRTL_RESOURCE
;
1334 // Structures for RtlCreateUserProcess
1336 typedef struct _RTL_USER_PROCESS_PARAMETERS
1338 ULONG MaximumLength
;
1342 HANDLE ConsoleHandle
;
1344 HANDLE StandardInput
;
1345 HANDLE StandardOutput
;
1346 HANDLE StandardError
;
1347 CURDIR CurrentDirectory
;
1348 UNICODE_STRING DllPath
;
1349 UNICODE_STRING ImagePathName
;
1350 UNICODE_STRING CommandLine
;
1358 ULONG FillAttribute
;
1360 ULONG ShowWindowFlags
;
1361 UNICODE_STRING WindowTitle
;
1362 UNICODE_STRING DesktopInfo
;
1363 UNICODE_STRING ShellInfo
;
1364 UNICODE_STRING RuntimeData
;
1365 RTL_DRIVE_LETTER_CURDIR CurrentDirectories
[RTL_MAX_DRIVE_LETTERS
];
1366 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1367 SIZE_T EnvironmentSize
;
1369 #if (NTDDI_VERSION >= NTDDI_WIN7)
1370 SIZE_T EnvironmentVersion
;
1372 } RTL_USER_PROCESS_PARAMETERS
, *PRTL_USER_PROCESS_PARAMETERS
;
1374 typedef struct _RTL_USER_PROCESS_INFORMATION
1377 HANDLE ProcessHandle
;
1378 HANDLE ThreadHandle
;
1380 SECTION_IMAGE_INFORMATION ImageInformation
;
1381 } RTL_USER_PROCESS_INFORMATION
, *PRTL_USER_PROCESS_INFORMATION
;
1384 // RTL Atom Table Structures
1386 typedef struct _RTL_ATOM_TABLE_ENTRY
1388 struct _RTL_ATOM_TABLE_ENTRY
*HashLink
;
1391 USHORT ReferenceCount
;
1395 } RTL_ATOM_TABLE_ENTRY
, *PRTL_ATOM_TABLE_ENTRY
;
1397 typedef struct _RTL_ATOM_TABLE
1402 #ifdef NTOS_MODE_USER
1403 RTL_CRITICAL_SECTION CriticalSection
;
1405 FAST_MUTEX FastMutex
;
1410 #ifdef NTOS_MODE_USER
1411 RTL_HANDLE_TABLE RtlHandleTable
;
1413 PHANDLE_TABLE ExHandleTable
;
1416 ULONG NumberOfBuckets
;
1417 PRTL_ATOM_TABLE_ENTRY Buckets
[1];
1418 } RTL_ATOM_TABLE
, *PRTL_ATOM_TABLE
;
1422 // System Time and Timezone Structures
1424 typedef struct _SYSTEMTIME
1433 USHORT wMilliseconds
;
1434 } SYSTEMTIME
, *PSYSTEMTIME
, *LPSYSTEMTIME
;
1436 typedef struct _TIME_ZONE_INFORMATION
1439 WCHAR StandardName
[32];
1440 SYSTEMTIME StandardDate
;
1442 WCHAR DaylightName
[32];
1443 SYSTEMTIME DaylightDate
;
1445 } TIME_ZONE_INFORMATION
, *PTIME_ZONE_INFORMATION
, *LPTIME_ZONE_INFORMATION
;
1446 #endif /* !_WINBASE_ */
1449 // Native version of Timezone Structure
1451 typedef LPTIME_ZONE_INFORMATION PRTL_TIME_ZONE_INFORMATION
;
1456 typedef struct _RTL_PATCH_HEADER
1458 LIST_ENTRY PatchList
;
1459 PVOID PatchImageBase
;
1460 struct _RTL_PATCH_HEADER
*NextPath
;
1463 struct _HOTPATCH_HEADER
*HotpatchHeader
;
1464 UNICODE_STRING TargetDllName
;
1465 PVOID TargetDllBase
;
1466 PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry
;
1467 PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry
;
1468 struct _SYSTEM_HOTPATCH_CODE_INFORMATION
*CodeInfo
;
1469 } RTL_PATCH_HEADER
, *PRTL_PATCH_HEADER
;
1472 // Header for NLS Files
1474 typedef struct _NLS_FILE_HEADER
1478 USHORT MaximumCharacterSize
;
1480 USHORT UniDefaultChar
;
1481 USHORT TransDefaultChar
;
1482 USHORT TransUniDefaultChar
;
1483 UCHAR LeadByte
[MAXIMUM_LEADBYTES
];
1484 } NLS_FILE_HEADER
, *PNLS_FILE_HEADER
;
1489 typedef struct _RTL_STACK_TRACE_ENTRY
1491 struct _RTL_STACK_TRACE_ENTRY
*HashChain
;
1495 PVOID BackTrace
[32];
1496 } RTL_STACK_TRACE_ENTRY
, *PRTL_STACK_TRACE_ENTRY
;
1498 typedef struct _STACK_TRACE_DATABASE
1500 RTL_CRITICAL_SECTION CriticalSection
;
1501 } STACK_TRACE_DATABASE
, *PSTACK_TRACE_DATABASE
;
1503 typedef struct _RTL_TRACE_BLOCK
1511 struct _RTL_TRACE_BLOCK
*Next
;
1513 } RTL_TRACE_BLOCK
, *PRTL_TRACE_BLOCK
;
1516 // Auto-Managed Rtl* String Buffer
1518 typedef struct _RTL_BUFFER
1521 PUCHAR StaticBuffer
;
1524 SIZE_T ReservedForAllocatedSize
;
1525 PVOID ReservedForIMalloc
;
1526 } RTL_BUFFER
, *PRTL_BUFFER
;
1528 typedef struct _RTL_UNICODE_STRING_BUFFER
1530 UNICODE_STRING String
;
1531 RTL_BUFFER ByteBuffer
;
1532 WCHAR MinimumStaticBufferForTerminalNul
;
1533 } RTL_UNICODE_STRING_BUFFER
, *PRTL_UNICODE_STRING_BUFFER
;
1535 #ifndef NTOS_MODE_USER
1538 // Message Resource Entry, Block and Data
1540 typedef struct _MESSAGE_RESOURCE_ENTRY
1544 UCHAR Text
[ANYSIZE_ARRAY
];
1545 } MESSAGE_RESOURCE_ENTRY
, *PMESSAGE_RESOURCE_ENTRY
;
1547 typedef struct _MESSAGE_RESOURCE_BLOCK
1551 ULONG OffsetToEntries
;
1552 } MESSAGE_RESOURCE_BLOCK
, *PMESSAGE_RESOURCE_BLOCK
;
1554 typedef struct _MESSAGE_RESOURCE_DATA
1556 ULONG NumberOfBlocks
;
1557 MESSAGE_RESOURCE_BLOCK Blocks
[ANYSIZE_ARRAY
];
1558 } MESSAGE_RESOURCE_DATA
, *PMESSAGE_RESOURCE_DATA
;
1560 #endif /* !NTOS_MODE_USER */
1566 #endif /* !_RTLTYPES_H */