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_RELEASE_ON_DEACTIVATION 0x01
78 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_NO_DEACTIVATE 0x02
79 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_ON_FREE_LIST 0x04
80 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_HEAP_ALLOCATED 0x08
81 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_NOT_REALLY_ACTIVATED 0x10
82 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_ACTIVATED 0x20
83 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_DEACTIVATED 0x40
86 // Activation Context Frame Flags (from Checked NTDLL)
88 #define RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_FORMAT_WHISTLER 0x01
91 // RtlActivateActivationContextEx Flags (from Checked NTDLL)
93 #define RTL_ACTIVATE_ACTIVATION_CONTEXT_EX_FLAG_RELEASE_ON_STACK_DEALLOCATION 0x01
96 // RtlDeactivateActivationContext Flags (based on Win32 flag and name of above)
98 #define RTL_DEACTIVATE_ACTIVATION_CONTEXT_FLAG_FORCE_EARLY_DEACTIVATION 0x01
101 // RtlQueryActivationContext Flags (based on Win32 flag and name of above)
103 #define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_USE_ACTIVE_ACTIVATION_CONTEXT 0x01
104 #define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_IS_HMODULE 0x02
105 #define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_IS_ADDRESS 0x04
106 #define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_NO_ADDREF 0x80000000
111 #if !defined(NTOS_MODE_USER) && !defined(_NTIFS_)
112 #define HEAP_NO_SERIALIZE 0x00000001
113 #define HEAP_GROWABLE 0x00000002
114 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
115 #define HEAP_ZERO_MEMORY 0x00000008
116 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
117 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
118 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
119 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
120 #define HEAP_CREATE_ALIGN_16 0x00010000
121 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
122 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
126 // User-Defined Heap Flags and Classes
128 #define HEAP_SETTABLE_USER_VALUE 0x00000100
129 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
130 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
131 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
132 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
133 #define HEAP_CLASS_0 0x00000000
134 #define HEAP_CLASS_1 0x00001000
135 #define HEAP_CLASS_2 0x00002000
136 #define HEAP_CLASS_3 0x00003000
137 #define HEAP_CLASS_4 0x00004000
138 #define HEAP_CLASS_5 0x00005000
139 #define HEAP_CLASS_6 0x00006000
140 #define HEAP_CLASS_7 0x00007000
141 #define HEAP_CLASS_8 0x00008000
142 #define HEAP_CLASS_MASK 0x0000F000
145 // Internal HEAP Structure Flags
147 #define HEAP_FLAG_PAGE_ALLOCS 0x01000000
148 #define HEAP_PROTECTION_ENABLED 0x02000000
149 #define HEAP_BREAK_WHEN_OUT_OF_VM 0x04000000
150 #define HEAP_NO_ALIGNMENT 0x08000000
151 #define HEAP_CAPTURE_STACK_BACKTRACES 0x08000000
152 #define HEAP_SKIP_VALIDATION_CHECKS 0x10000000
153 #define HEAP_VALIDATE_ALL_ENABLED 0x20000000
154 #define HEAP_VALIDATE_PARAMETERS_ENABLED 0x40000000
155 #define HEAP_LOCK_USER_ALLOCATED 0x80000000
158 // Heap Validation Flags
160 #define HEAP_CREATE_VALID_MASK \
161 (HEAP_NO_SERIALIZE | \
163 HEAP_GENERATE_EXCEPTIONS | \
165 HEAP_REALLOC_IN_PLACE_ONLY | \
166 HEAP_TAIL_CHECKING_ENABLED | \
167 HEAP_FREE_CHECKING_ENABLED | \
168 HEAP_DISABLE_COALESCE_ON_FREE | \
170 HEAP_CREATE_ALIGN_16 | \
171 HEAP_CREATE_ENABLE_TRACING | \
172 HEAP_CREATE_ENABLE_EXECUTE)
174 C_ASSERT(HEAP_CREATE_VALID_MASK
== 0x0007F0FF);
178 // Native image architecture
181 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_I386
182 #elif defined(_M_ARM)
183 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_ARM
184 #elif defined(_M_AMD64)
185 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_AMD64
187 #error Define these please!
193 #define RTL_REGISTRY_ABSOLUTE 0
194 #define RTL_REGISTRY_SERVICES 1
195 #define RTL_REGISTRY_CONTROL 2
196 #define RTL_REGISTRY_WINDOWS_NT 3
197 #define RTL_REGISTRY_DEVICEMAP 4
198 #define RTL_REGISTRY_USER 5
199 #define RTL_REGISTRY_MAXIMUM 6
200 #define RTL_REGISTRY_HANDLE 0x40000000
201 #define RTL_REGISTRY_OPTIONAL 0x80000000
202 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
203 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
204 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
205 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
206 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
207 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
208 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
213 #define VER_MINORVERSION 0x0000001
214 #define VER_MAJORVERSION 0x0000002
215 #define VER_BUILDNUMBER 0x0000004
216 #define VER_PLATFORMID 0x0000008
217 #define VER_SERVICEPACKMINOR 0x0000010
218 #define VER_SERVICEPACKMAJOR 0x0000020
219 #define VER_SUITENAME 0x0000040
220 #define VER_PRODUCT_TYPE 0x0000080
221 #define VER_PLATFORM_WIN32s 0
222 #define VER_PLATFORM_WIN32_WINDOWS 1
223 #define VER_PLATFORM_WIN32_NT 2
225 #define VER_GREATER 2
226 #define VER_GREATER_EQUAL 3
228 #define VER_LESS_EQUAL 5
231 #define VER_CONDITION_MASK 7
232 #define VER_NUM_BITS_PER_CONDITION_MASK 3
237 #define TIME_ZONE_ID_UNKNOWN 0
238 #define TIME_ZONE_ID_STANDARD 1
239 #define TIME_ZONE_ID_DAYLIGHT 2
242 // Maximum Path Length
247 // RTL Lock Type (Critical Section or Resource)
249 #define RTL_CRITSECT_TYPE 0
250 #define RTL_RESOURCE_TYPE 1
253 // RtlAcquirePrivileges Flags
255 #define RTL_ACQUIRE_PRIVILEGE_IMPERSONATE 1
256 #define RTL_ACQUIRE_PRIVILEGE_PROCESS 2
258 #ifdef NTOS_MODE_USER
261 // String Hash Algorithms
263 #define HASH_STRING_ALGORITHM_DEFAULT 0
264 #define HASH_STRING_ALGORITHM_X65599 1
265 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
268 // RtlDuplicateString Flags
270 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
271 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
274 // RtlFindCharInUnicodeString Flags
276 #define RTL_FIND_CHAR_IN_UNICODE_STRING_START_AT_END 1
277 #define RTL_FIND_CHAR_IN_UNICODE_STRING_COMPLEMENT_CHAR_SET 2
278 #define RTL_FIND_CHAR_IN_UNICODE_STRING_CASE_INSENSITIVE 4
281 // RtlImageNtHeaderEx Flags
283 #define RTL_IMAGE_NT_HEADER_EX_FLAG_NO_RANGE_CHECK 0x00000001
286 // RtlDosApplyFileIsolationRedirection_Ustr Flags
288 #define RTL_DOS_APPLY_FILE_REDIRECTION_USTR_FLAG_RESPECT_DOT_LOCAL 0x01
293 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
294 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
295 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
298 // Activation Contexts
300 #define INVALID_ACTIVATION_CONTEXT (PVOID)0xFFFFFFFF
305 #if defined(__cplusplus)
306 #define RTL_CONST_CAST(type) const_cast<type>
308 #define RTL_CONST_CAST(type) (type)
312 // Constant String Macro
314 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
316 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
317 sizeof(__SOURCE_STRING__), \
318 (__SOURCE_STRING__) \
322 // Constant Object Attributes Macro
324 #define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a) \
326 sizeof(OBJECT_ATTRIBUTES), \
328 RTL_CONST_CAST(PUNICODE_STRING)(n), \
334 #define RTL_INIT_OBJECT_ATTRIBUTES(n, a) \
335 RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
337 #else /* NTOS_MODE_USER */
339 // Message Resource Flag
341 #define MESSAGE_RESOURCE_UNICODE 0x0001
343 #endif /* !NTOS_MODE_USER */
344 #define MAXIMUM_LEADBYTES 12
349 #define RTL_DEBUG_QUERY_MODULES 0x01
350 #define RTL_DEBUG_QUERY_BACKTRACES 0x02
351 #define RTL_DEBUG_QUERY_HEAPS 0x04
352 #define RTL_DEBUG_QUERY_HEAP_TAGS 0x08
353 #define RTL_DEBUG_QUERY_HEAP_BLOCKS 0x10
354 #define RTL_DEBUG_QUERY_LOCKS 0x20
359 #define RTL_HANDLE_VALID 0x1
364 #define RTL_ATOM_IS_PINNED 0x1
367 // Critical section lock bits
369 #define CS_LOCK_BIT 0x1
370 #define CS_LOCK_BIT_V 0x0
371 #define CS_LOCK_WAITER_WOKEN 0x2
372 #define CS_LOCK_WAITER_INC 0x4
377 #ifdef NTOS_MODE_USER
378 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
379 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
382 // Constant String Macro
384 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
386 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
387 sizeof(__SOURCE_STRING__), \
388 (__SOURCE_STRING__) \
391 #endif /* NTOS_MODE_USER */
393 #ifdef NTOS_MODE_USER
396 // Boot Status Data Field Types
398 typedef enum _RTL_BSD_ITEM_TYPE
400 RtlBsdItemVersionNumber
,
401 RtlBsdItemProductType
,
402 RtlBsdItemAabEnabled
,
403 RtlBsdItemAabTimeout
,
405 RtlBsdItemBootShutdown
,
407 } RTL_BSD_ITEM_TYPE
, *PRTL_BSD_ITEM_TYPE
;
410 // Table and Compare result types
412 typedef enum _TABLE_SEARCH_RESULT
418 } TABLE_SEARCH_RESULT
;
420 typedef enum _RTL_GENERIC_COMPARE_RESULTS
425 } RTL_GENERIC_COMPARE_RESULTS
;
427 #endif /* NTOS_MODE_USER */
432 typedef enum _RTL_PATH_TYPE
435 RtlPathTypeUncAbsolute
,
436 RtlPathTypeDriveAbsolute
,
437 RtlPathTypeDriveRelative
,
440 RtlPathTypeLocalDevice
,
441 RtlPathTypeRootLocalDevice
,
444 #ifndef NTOS_MODE_USER
447 // Heap Information Class
449 typedef enum _HEAP_INFORMATION_CLASS
451 HeapCompatibilityInformation
,
452 HeapEnableTerminationOnCorruption
453 } HEAP_INFORMATION_CLASS
;
456 // Callback function for RTL Timers or Registered Waits
459 (NTAPI
*WAITORTIMERCALLBACKFUNC
)(
461 BOOLEAN fTimerOrWaitFired
465 // Handler during Vectored RTL Exceptions
468 (NTAPI
*PVECTORED_EXCEPTION_HANDLER
)(
469 PEXCEPTION_POINTERS ExceptionPointers
473 // Worker Thread Callback for Rtl
476 (NTAPI
*WORKERCALLBACKFUNC
)(
480 #else /* !NTOS_MODE_USER */
483 // RTL Library Allocation/Free Routines
486 (NTAPI
*PRTL_ALLOCATE_STRING_ROUTINE
)(
491 (NTAPI
*PRTL_REALLOCATE_STRING_ROUTINE
)(
492 SIZE_T NumberOfBytes
,
498 (NTAPI
*PRTL_FREE_STRING_ROUTINE
)(
502 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine
;
503 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine
;
504 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine
;
506 #endif /* NTOS_MODE_USER */
509 // Unhandled Exception Filter
512 (NTAPI
*RTLP_UNHANDLED_EXCEPTION_FILTER
)(
513 _In_
struct _EXCEPTION_POINTERS
*ExceptionInfo
515 typedef RTLP_UNHANDLED_EXCEPTION_FILTER
*PRTLP_UNHANDLED_EXCEPTION_FILTER
;
518 // Callback for RTL Heap Enumeration
521 (NTAPI
*PHEAP_ENUMERATION_ROUTINE
)(
522 _In_ PVOID HeapHandle
,
527 // Thread and Process Start Routines for RtlCreateUserThread/Process
529 typedef ULONG (NTAPI
*PTHREAD_START_ROUTINE
)(
534 (NTAPI
*PRTL_BASE_PROCESS_START_ROUTINE
)(
535 PTHREAD_START_ROUTINE StartAddress
,
540 // Worker Start/Exit Function
543 (NTAPI
*PRTL_START_POOL_THREAD
)(
544 _In_ PTHREAD_START_ROUTINE Function
,
545 _In_ PVOID Parameter
,
546 _Out_ PHANDLE ThreadHandle
550 (NTAPI
*PRTL_EXIT_POOL_THREAD
)(
551 _In_ NTSTATUS ExitStatus
555 // Declare empty structure definitions so that they may be referenced by
556 // routines before they are defined
558 struct _RTL_AVL_TABLE
;
559 struct _RTL_GENERIC_TABLE
;
563 // Routines and callbacks for the RTL AVL/Generic Table package
565 #ifdef NTOS_MODE_USER
567 (NTAPI RTL_AVL_MATCH_FUNCTION
)(
568 struct _RTL_AVL_TABLE
*Table
,
572 typedef RTL_AVL_MATCH_FUNCTION
*PRTL_AVL_MATCH_FUNCTION
;
574 typedef RTL_GENERIC_COMPARE_RESULTS
575 (NTAPI RTL_AVL_COMPARE_ROUTINE
) (
576 struct _RTL_AVL_TABLE
*Table
,
580 typedef RTL_AVL_COMPARE_ROUTINE
*PRTL_AVL_COMPARE_ROUTINE
;
582 typedef RTL_GENERIC_COMPARE_RESULTS
583 (NTAPI RTL_GENERIC_COMPARE_ROUTINE
) (
584 struct _RTL_GENERIC_TABLE
*Table
,
588 typedef RTL_GENERIC_COMPARE_ROUTINE
*PRTL_GENERIC_COMPARE_ROUTINE
;
591 (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE
) (
592 struct _RTL_GENERIC_TABLE
*Table
,
595 typedef RTL_GENERIC_ALLOCATE_ROUTINE
*PRTL_GENERIC_ALLOCATE_ROUTINE
;
598 (NTAPI RTL_AVL_ALLOCATE_ROUTINE
) (
599 struct _RTL_AVL_TABLE
*Table
,
602 typedef RTL_AVL_ALLOCATE_ROUTINE
*PRTL_AVL_ALLOCATE_ROUTINE
;
605 (NTAPI RTL_GENERIC_FREE_ROUTINE
) (
606 struct _RTL_GENERIC_TABLE
*Table
,
609 typedef RTL_GENERIC_FREE_ROUTINE
*PRTL_GENERIC_FREE_ROUTINE
;
612 (NTAPI RTL_AVL_FREE_ROUTINE
) (
613 struct _RTL_AVL_TABLE
*Table
,
616 typedef RTL_AVL_FREE_ROUTINE
*PRTL_AVL_FREE_ROUTINE
;
618 #ifdef RTL_USE_AVL_TABLES
619 #undef RTL_GENERIC_COMPARE_ROUTINE
620 #undef PRTL_GENERIC_COMPARE_ROUTINE
621 #undef RTL_GENERIC_ALLOCATE_ROUTINE
622 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
623 #undef RTL_GENERIC_FREE_ROUTINE
624 #undef PRTL_GENERIC_FREE_ROUTINE
626 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
627 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
628 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
629 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
630 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
631 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
632 #endif /* RTL_USE_AVL_TABLES */
634 #endif /* NTOS_MODE_USER */
637 // RTL Query Registry callback
639 #ifdef NTOS_MODE_USER
641 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
642 _In_ PWSTR ValueName
,
643 _In_ ULONG ValueType
,
644 _In_ PVOID ValueData
,
645 _In_ ULONG ValueLength
,
647 _In_ PVOID EntryContext
652 // RTL Secure Memory callbacks
654 #ifdef NTOS_MODE_USER
656 (NTAPI
*PRTL_SECURE_MEMORY_CACHE_CALLBACK
)(
663 // RTL Range List callbacks
665 #ifdef NTOS_MODE_USER
667 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
)(
669 struct _RTL_RANGE
*Range
673 // Custom Heap Commit Routine for RtlCreateHeap
676 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
)(
678 _Inout_ PVOID
*CommitAddress
,
679 _Inout_ PSIZE_T CommitSize
683 // Parameters for RtlCreateHeap
685 typedef struct _RTL_HEAP_PARAMETERS
688 SIZE_T SegmentReserve
;
689 SIZE_T SegmentCommit
;
690 SIZE_T DeCommitFreeBlockThreshold
;
691 SIZE_T DeCommitTotalFreeThreshold
;
692 SIZE_T MaximumAllocationSize
;
693 SIZE_T VirtualMemoryThreshold
;
694 SIZE_T InitialCommit
;
695 SIZE_T InitialReserve
;
696 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
698 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
701 // RTL Bitmap structures
703 typedef struct _RTL_BITMAP
707 } RTL_BITMAP
, *PRTL_BITMAP
;
709 typedef struct _RTL_BITMAP_RUN
713 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
716 // RtlGenerateXxxName context
718 typedef struct _GENERATE_NAME_CONTEXT
721 BOOLEAN CheckSumInserted
;
724 ULONG ExtensionLength
;
725 WCHAR ExtensionBuffer
[4];
726 ULONG LastIndexValue
;
727 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
730 // RTL Splay and Balanced Links structures
732 typedef struct _RTL_SPLAY_LINKS
734 struct _RTL_SPLAY_LINKS
*Parent
;
735 struct _RTL_SPLAY_LINKS
*LeftChild
;
736 struct _RTL_SPLAY_LINKS
*RightChild
;
737 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
739 typedef struct _RTL_BALANCED_LINKS
741 struct _RTL_BALANCED_LINKS
*Parent
;
742 struct _RTL_BALANCED_LINKS
*LeftChild
;
743 struct _RTL_BALANCED_LINKS
*RightChild
;
746 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
749 // RTL Avl/Generic Tables
751 #ifndef RTL_USE_AVL_TABLES
752 typedef struct _RTL_GENERIC_TABLE
754 PRTL_SPLAY_LINKS TableRoot
;
755 LIST_ENTRY InsertOrderList
;
756 PLIST_ENTRY OrderedPointer
;
757 ULONG WhichOrderedElement
;
758 ULONG NumberGenericTableElements
;
759 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
760 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
761 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
763 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
764 #endif /* !RTL_USE_AVL_TABLES */
766 typedef struct _RTL_AVL_TABLE
768 RTL_BALANCED_LINKS BalancedRoot
;
769 PVOID OrderedPointer
;
770 ULONG WhichOrderedElement
;
771 ULONG NumberGenericTableElements
;
773 PRTL_BALANCED_LINKS RestartKey
;
775 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
776 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
777 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
779 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
781 #ifdef RTL_USE_AVL_TABLES
782 #undef RTL_GENERIC_TABLE
783 #undef PRTL_GENERIC_TABLE
785 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
786 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
787 #endif /* RTL_USE_AVL_TABLES */
790 // RTL Compression Buffer
792 typedef struct _COMPRESSED_DATA_INFO
{
793 USHORT CompressionFormatAndEngine
;
794 UCHAR CompressionUnitShift
;
798 USHORT NumberOfChunks
;
799 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
800 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
803 // RtlQueryRegistry Data
805 typedef struct _RTL_QUERY_REGISTRY_TABLE
807 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
814 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
817 // RTL Unicode Table Structures
819 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
823 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
824 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
825 RTL_SPLAY_LINKS Links
;
826 PUNICODE_STRING Prefix
;
827 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
829 typedef struct _UNICODE_PREFIX_TABLE
833 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
834 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
835 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
837 #ifdef NTOS_MODE_USER
839 // Pfx* routines' table structures
841 typedef struct _PREFIX_TABLE_ENTRY
845 struct _PREFIX_TABLE_ENTRY
*NextPrefixTree
;
846 RTL_SPLAY_LINKS Links
;
848 } PREFIX_TABLE_ENTRY
, *PPREFIX_TABLE_ENTRY
;
850 typedef struct _PREFIX_TABLE
854 PPREFIX_TABLE_ENTRY NextPrefixTree
;
855 } PREFIX_TABLE
, *PPREFIX_TABLE
;
859 // Time Structure for RTL Time calls
861 typedef struct _TIME_FIELDS
871 } TIME_FIELDS
, *PTIME_FIELDS
;
874 // Activation Context Frame
876 typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
878 struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
*Previous
;
879 PACTIVATION_CONTEXT ActivationContext
;
881 } RTL_ACTIVATION_CONTEXT_STACK_FRAME
, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME
;
883 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
887 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
888 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
;
890 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
894 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
899 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
;
901 typedef RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
;
902 typedef PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
;
904 typedef struct _RTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
906 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
908 PVOID ActivationStackBackTrace
[8];
909 } RTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
, *PRTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
;
911 #if (NTDDI_VERSION >= NTDDI_WS03)
912 typedef struct _ACTIVATION_CONTEXT_STACK
914 PRTL_ACTIVATION_CONTEXT_STACK_FRAME ActiveFrame
;
915 LIST_ENTRY FrameListCache
;
917 ULONG NextCookieSequenceNumber
;
919 } ACTIVATION_CONTEXT_STACK
, *PACTIVATION_CONTEXT_STACK
;
921 typedef struct _ACTIVATION_CONTEXT_STACK
924 ULONG NextCookieSequenceNumber
;
926 LIST_ENTRY FrameListCache
;
927 } ACTIVATION_CONTEXT_STACK
, *PACTIVATION_CONTEXT_STACK
;
930 typedef struct _ACTIVATION_CONTEXT_DATA
936 ULONG DefaultTocOffset
;
937 ULONG ExtendedTocOffset
;
938 ULONG AssemblyRosterOffset
;
940 } ACTIVATION_CONTEXT_DATA
, *PACTIVATION_CONTEXT_DATA
;
942 typedef struct _ACTIVATION_CONTEXT_STACK_FRAMELIST
948 ULONG NotFramesInUse
;
949 RTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME Frames
[32];
950 } ACTIVATION_CONTEXT_STACK_FRAMELIST
, *PACTIVATION_CONTEXT_STACK_FRAMELIST
;
952 #endif /* NTOS_MODE_USER */
960 ACCESS_MASK AccessMask
;
964 // Information Structures for RTL Debug Functions
966 typedef struct _RTL_PROCESS_MODULE_INFORMATION
973 USHORT LoadOrderIndex
;
974 USHORT InitOrderIndex
;
976 USHORT OffsetToFileName
;
977 CHAR FullPathName
[256];
978 } RTL_PROCESS_MODULE_INFORMATION
, *PRTL_PROCESS_MODULE_INFORMATION
;
980 typedef struct _RTL_PROCESS_MODULES
982 ULONG NumberOfModules
;
983 RTL_PROCESS_MODULE_INFORMATION Modules
[1];
984 } RTL_PROCESS_MODULES
, *PRTL_PROCESS_MODULES
;
986 typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
989 RTL_PROCESS_MODULE_INFORMATION BaseInfo
;
993 } RTL_PROCESS_MODULE_INFORMATION_EX
, *PRTL_PROCESS_MODULE_INFORMATION_EX
;
995 typedef struct _RTL_HEAP_TAG_INFO
997 ULONG NumberOfAllocations
;
999 SIZE_T BytesAllocated
;
1000 } RTL_HEAP_TAG_INFO
, *PRTL_HEAP_TAG_INFO
;
1002 typedef struct _RTL_HEAP_USAGE_ENTRY
1004 struct _RTL_HEAP_USAGE_ENTRY
*Next
;
1007 USHORT AllocatorBackTraceIndex
;
1009 } RTL_HEAP_USAGE_ENTRY
, *PRTL_HEAP_USAGE_ENTRY
;
1011 typedef struct _RTL_HEAP_USAGE
1014 SIZE_T BytesAllocated
;
1015 SIZE_T BytesCommitted
;
1016 SIZE_T BytesReserved
;
1017 SIZE_T BytesReservedMaximum
;
1018 PRTL_HEAP_USAGE_ENTRY Entries
;
1019 PRTL_HEAP_USAGE_ENTRY AddedEntries
;
1020 PRTL_HEAP_USAGE_ENTRY RemovedEntries
;
1021 ULONG_PTR Reserved
[8];
1022 } RTL_HEAP_USAGE
, *PRTL_HEAP_USAGE
;
1024 typedef struct _RTL_HEAP_WALK_ENTRY
1028 UCHAR OverheadBytes
;
1037 USHORT AllocatorBackTraceIndex
;
1042 ULONG_PTR CommittedSize
;
1043 ULONG_PTR UnCommittedSize
;
1048 } RTL_HEAP_WALK_ENTRY
, *PRTL_HEAP_WALK_ENTRY
;
1050 typedef struct _RTL_HEAP_ENTRY
1054 USHORT AllocatorBackTraceIndex
;
1064 SIZE_T CommittedSize
;
1068 } RTL_HEAP_ENTRY
, *PRTL_HEAP_ENTRY
;
1070 typedef struct _RTL_HEAP_TAG
1072 ULONG NumberOfAllocations
;
1073 ULONG NumberOfFrees
;
1074 SIZE_T BytesAllocated
;
1076 USHORT CreatorBackTraceIndex
;
1078 } RTL_HEAP_TAG
, *PRTL_HEAP_TAG
;
1080 typedef struct _RTL_HEAP_INFORMATION
1084 USHORT EntryOverhead
;
1085 USHORT CreatorBackTraceIndex
;
1086 SIZE_T BytesAllocated
;
1087 SIZE_T BytesCommitted
;
1089 ULONG NumberOfEntries
;
1090 ULONG NumberOfPseudoTags
;
1091 ULONG PseudoTagGranularity
;
1094 PRTL_HEAP_ENTRY Entries
;
1095 } RTL_HEAP_INFORMATION
, *PRTL_HEAP_INFORMATION
;
1097 typedef struct _RTL_PROCESS_HEAPS
1099 ULONG NumberOfHeaps
;
1100 RTL_HEAP_INFORMATION Heaps
[1];
1101 } RTL_PROCESS_HEAPS
, *PRTL_PROCESS_HEAPS
;
1103 typedef struct _RTL_PROCESS_LOCK_INFORMATION
1107 USHORT CreatorBackTraceIndex
;
1108 ULONG OwnerThreadId
;
1110 ULONG ContentionCount
;
1112 ULONG RecursionCount
;
1113 ULONG NumberOfSharedWaiters
;
1114 ULONG NumberOfExclusiveWaiters
;
1115 } RTL_PROCESS_LOCK_INFORMATION
, *PRTL_PROCESS_LOCK_INFORMATION
;
1117 typedef struct _RTL_PROCESS_LOCKS
1119 ULONG NumberOfLocks
;
1120 RTL_PROCESS_LOCK_INFORMATION Locks
[1];
1121 } RTL_PROCESS_LOCKS
, *PRTL_PROCESS_LOCKS
;
1123 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
1125 PVOID SymbolicBackTrace
;
1129 PVOID BackTrace
[16];
1130 } RTL_PROCESS_BACKTRACE_INFORMATION
, *PRTL_PROCESS_BACKTRACE_INFORMATION
;
1132 typedef struct _RTL_PROCESS_BACKTRACES
1134 ULONG CommittedMemory
;
1135 ULONG ReservedMemory
;
1136 ULONG NumberOfBackTraceLookups
;
1137 ULONG NumberOfBackTraces
;
1138 RTL_PROCESS_BACKTRACE_INFORMATION BackTraces
[1];
1139 } RTL_PROCESS_BACKTRACES
, *PRTL_PROCESS_BACKTRACES
;
1141 typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
1145 UCHAR OptionData
[1];
1147 // Option array continues below
1149 } RTL_PROCESS_VERIFIER_OPTIONS
, *PRTL_PROCESS_VERIFIER_OPTIONS
;
1151 typedef struct _RTL_DEBUG_INFORMATION
1153 HANDLE SectionHandleClient
;
1154 PVOID ViewBaseClient
;
1155 PVOID ViewBaseTarget
;
1156 ULONG ViewBaseDelta
;
1157 HANDLE EventPairClient
;
1158 PVOID EventPairTarget
;
1159 HANDLE TargetProcessId
;
1160 HANDLE TargetThreadHandle
;
1167 PRTL_PROCESS_MODULES Modules
;
1168 PRTL_PROCESS_MODULE_INFORMATION_EX ModulesEx
;
1170 PRTL_PROCESS_BACKTRACES BackTraces
;
1171 PRTL_PROCESS_HEAPS Heaps
;
1172 PRTL_PROCESS_LOCKS Locks
;
1173 HANDLE SpecificHeap
;
1174 HANDLE TargetProcessHandle
;
1175 RTL_PROCESS_VERIFIER_OPTIONS VerifierOptions
;
1177 HANDLE CriticalSectionHandle
;
1178 HANDLE CriticalSectionOwnerThread
;
1180 } RTL_DEBUG_INFORMATION
, *PRTL_DEBUG_INFORMATION
;
1183 // Unload Event Trace Structure for RtlGetUnloadEventTrace
1185 typedef struct _RTL_UNLOAD_EVENT_TRACE
1190 ULONG TimeDateStamp
;
1192 WCHAR ImageName
[32];
1193 } RTL_UNLOAD_EVENT_TRACE
, *PRTL_UNLOAD_EVENT_TRACE
;
1196 // RTL Handle Structures
1198 typedef struct _RTL_HANDLE_TABLE_ENTRY
1203 struct _RTL_HANDLE_TABLE_ENTRY
*NextFree
;
1205 } RTL_HANDLE_TABLE_ENTRY
, *PRTL_HANDLE_TABLE_ENTRY
;
1207 typedef struct _RTL_HANDLE_TABLE
1209 ULONG MaximumNumberOfHandles
;
1210 ULONG SizeOfHandleTableEntry
;
1212 PRTL_HANDLE_TABLE_ENTRY FreeHandles
;
1213 PRTL_HANDLE_TABLE_ENTRY CommittedHandles
;
1214 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles
;
1215 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles
;
1216 } RTL_HANDLE_TABLE
, *PRTL_HANDLE_TABLE
;
1218 #ifdef NTOS_MODE_USER
1222 typedef struct _EXCEPTION_REGISTRATION_RECORD
1224 struct _EXCEPTION_REGISTRATION_RECORD
*Next
;
1225 PEXCEPTION_ROUTINE Handler
;
1226 } EXCEPTION_REGISTRATION_RECORD
, *PEXCEPTION_REGISTRATION_RECORD
;
1227 #endif /* NTOS_MODE_USER */
1230 // Current Directory Structures
1232 typedef struct _CURDIR
1234 UNICODE_STRING DosPath
;
1238 typedef struct _RTLP_CURDIR_REF
1242 } RTLP_CURDIR_REF
, *PRTLP_CURDIR_REF
;
1244 typedef struct _RTL_RELATIVE_NAME_U
1246 UNICODE_STRING RelativeName
;
1247 HANDLE ContainingDirectory
;
1248 PRTLP_CURDIR_REF CurDirRef
;
1249 } RTL_RELATIVE_NAME_U
, *PRTL_RELATIVE_NAME_U
;
1251 typedef struct _RTL_DRIVE_LETTER_CURDIR
1256 UNICODE_STRING DosPath
;
1257 } RTL_DRIVE_LETTER_CURDIR
, *PRTL_DRIVE_LETTER_CURDIR
;
1259 typedef struct _RTL_PERTHREAD_CURDIR
1261 PRTL_DRIVE_LETTER_CURDIR CurrentDirectories
;
1262 PUNICODE_STRING ImageName
;
1264 } RTL_PERTHREAD_CURDIR
, *PRTL_PERTHREAD_CURDIR
;
1267 // Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
1269 typedef struct _RTL_ACQUIRE_STATE
1272 HANDLE OldImpersonationToken
;
1273 PTOKEN_PRIVILEGES OldPrivileges
;
1274 PTOKEN_PRIVILEGES NewPrivileges
;
1276 UCHAR OldPrivBuffer
[1024];
1277 } RTL_ACQUIRE_STATE
, *PRTL_ACQUIRE_STATE
;
1279 #ifndef NTOS_MODE_USER
1282 // RTL Critical Section Structures
1284 typedef struct _RTL_CRITICAL_SECTION_DEBUG
1287 USHORT CreatorBackTraceIndex
;
1288 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
1289 LIST_ENTRY ProcessLocksList
;
1291 ULONG ContentionCount
;
1293 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
1295 typedef struct _RTL_CRITICAL_SECTION
1297 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
1299 LONG RecursionCount
;
1300 HANDLE OwningThread
;
1301 HANDLE LockSemaphore
;
1302 ULONG_PTR SpinCount
;
1303 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
1305 #endif /* !NTOS_MODE_USER */
1308 // RTL Private Heap Structures
1310 typedef struct _HEAP_LOCK
1314 RTL_CRITICAL_SECTION CriticalSection
;
1315 #ifndef NTOS_MODE_USER
1318 UCHAR Padding
[0x68]; /* Max ERESOURCE size for x64 build. Needed because RTL is built only once */
1320 } HEAP_LOCK
, *PHEAP_LOCK
;
1323 // RTL Range List Structures
1325 typedef struct _RTL_RANGE_LIST
1327 LIST_ENTRY ListHead
;
1331 } RTL_RANGE_LIST
, *PRTL_RANGE_LIST
;
1333 typedef struct _RTL_RANGE
1341 } RTL_RANGE
, *PRTL_RANGE
;
1343 typedef struct _RANGE_LIST_ITERATOR
1345 PLIST_ENTRY RangeListHead
;
1346 PLIST_ENTRY MergedHead
;
1349 } RTL_RANGE_LIST_ITERATOR
, *PRTL_RANGE_LIST_ITERATOR
;
1354 #define RTL_RESOURCE_FLAG_LONG_TERM ((ULONG)0x00000001)
1356 typedef struct _RTL_RESOURCE
1358 RTL_CRITICAL_SECTION Lock
;
1359 HANDLE SharedSemaphore
;
1360 ULONG SharedWaiters
;
1361 HANDLE ExclusiveSemaphore
;
1362 ULONG ExclusiveWaiters
;
1364 HANDLE OwningThread
;
1367 } RTL_RESOURCE
, *PRTL_RESOURCE
;
1370 // Structures for RtlCreateUserProcess
1372 typedef struct _RTL_USER_PROCESS_PARAMETERS
1374 ULONG MaximumLength
;
1378 HANDLE ConsoleHandle
;
1380 HANDLE StandardInput
;
1381 HANDLE StandardOutput
;
1382 HANDLE StandardError
;
1383 CURDIR CurrentDirectory
;
1384 UNICODE_STRING DllPath
;
1385 UNICODE_STRING ImagePathName
;
1386 UNICODE_STRING CommandLine
;
1394 ULONG FillAttribute
;
1396 ULONG ShowWindowFlags
;
1397 UNICODE_STRING WindowTitle
;
1398 UNICODE_STRING DesktopInfo
;
1399 UNICODE_STRING ShellInfo
;
1400 UNICODE_STRING RuntimeData
;
1401 RTL_DRIVE_LETTER_CURDIR CurrentDirectories
[RTL_MAX_DRIVE_LETTERS
];
1402 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1403 SIZE_T EnvironmentSize
;
1405 #if (NTDDI_VERSION >= NTDDI_WIN7)
1406 SIZE_T EnvironmentVersion
;
1408 } RTL_USER_PROCESS_PARAMETERS
, *PRTL_USER_PROCESS_PARAMETERS
;
1410 typedef struct _RTL_USER_PROCESS_INFORMATION
1413 HANDLE ProcessHandle
;
1414 HANDLE ThreadHandle
;
1416 SECTION_IMAGE_INFORMATION ImageInformation
;
1417 } RTL_USER_PROCESS_INFORMATION
, *PRTL_USER_PROCESS_INFORMATION
;
1419 #if (NTDDI_VERSION >= NTDDI_WIN7)
1421 typedef enum _RTL_UMS_SCHEDULER_REASON
1423 UmsSchedulerStartup
= 0,
1424 UmsSchedulerThreadBlocked
= 1,
1425 UmsSchedulerThreadYield
= 2,
1426 } RTL_UMS_SCHEDULER_REASON
, *PRTL_UMS_SCHEDULER_REASON
;
1428 enum _RTL_UMSCTX_FLAGS
1430 UMSCTX_SCHEDULED_THREAD_BIT
= 0,
1431 #if (NTDDI_VERSION < NTDDI_WIN8)
1432 UMSCTX_HAS_QUANTUM_REQ_BIT
,
1433 UMSCTX_HAS_AFFINITY_REQ_BIT
,
1434 UMSCTX_HAS_PRIORITY_REQ_BIT
,
1436 UMSCTX_SUSPENDED_BIT
,
1437 UMSCTX_VOLATILE_CONTEXT_BIT
,
1438 UMSCTX_TERMINATED_BIT
,
1439 UMSCTX_DEBUG_ACTIVE_BIT
,
1440 UMSCTX_RUNNING_ON_SELF_THREAD_BIT
,
1441 UMSCTX_DENY_RUNNING_ON_SELF_THREAD_BIT
1443 } RTL_UMSCTX_FLAGS
, *PRTL_UMSCTX_FLAGS
;
1445 #define UMSCTX_SCHEDULED_THREAD_MASK (1 << UMSCTX_SCHEDULED_THREAD_BIT)
1446 #define UMSCTX_SUSPENDED_MASK (1 << UMSCTX_SUSPENDED_BIT)
1447 #define UMSCTX_VOLATILE_CONTEXT_MASK (1 << UMSCTX_VOLATILE_CONTEXT_BIT)
1448 #define UMSCTX_TERMINATED_MASK (1 << UMSCTX_TERMINATED_BIT)
1449 #define UMSCTX_DEBUG_ACTIVE_MASK (1 << UMSCTX_DEBUG_ACTIVE_BIT)
1450 #define UMSCTX_RUNNING_ON_SELF_THREAD_MASK (1 << UMSCTX_RUNNING_ON_SELF_THREAD_BIT)
1451 #define UMSCTX_DENY_RUNNING_ON_SELF_THREAD_MASK (1 << UMSCTX_DENY_RUNNING_ON_SELF_THREAD_BIT)
1456 typedef struct DECLSPEC_ALIGN(16) _RTL_UMS_CONTEXT
1458 SINGLE_LIST_ENTRY Link
;
1466 ULONG ScheduledThread
: 1;
1467 #if (NTDDI_VERSION < NTDDI_WIN8)
1468 ULONG HasQuantumReq
: 1;
1469 ULONG HasAffinityReq
: 1;
1470 ULONG HasPriorityReq
: 1;
1472 ULONG Suspended
: 1;
1473 ULONG VolatileContext
: 1;
1474 ULONG Terminated
: 1;
1475 ULONG DebugActive
: 1;
1476 ULONG RunningOnSelfThread
: 1;
1477 ULONG DenyRunningOnSelfThread
: 1;
1478 #if (NTDDI_VERSION < NTDDI_WIN8)
1479 ULONG ReservedFlags
: 22;
1488 #if (NTDDI_VERSION >= NTDDI_WIN8)
1489 ULONG64 KernelUpdateLock
: 2;
1491 ULONG64 KernelUpdateLock
: 1;
1492 ULONG64 Reserved
: 1;
1494 ULONG64 PrimaryClientID
: 62;
1496 ULONG64 ContextLock
;
1498 #if (NTDDI_VERSION < NTDDI_WIN8)
1499 ULONG64 QuantumValue
;
1500 GROUP_AFFINITY AffinityMask
;
1503 struct _RTL_UMS_CONTEXT
* PrimaryUmsContext
;
1505 ULONG KernelYieldCount
;
1506 ULONG MixedYieldCount
;
1508 } RTL_UMS_CONTEXT
, *PRTL_UMS_CONTEXT
;
1509 #endif // #if (NTDDI_VERSION >= NTDDI_WIN7)
1512 // RTL Atom Table Structures
1514 typedef struct _RTL_ATOM_TABLE_ENTRY
1516 struct _RTL_ATOM_TABLE_ENTRY
*HashLink
;
1519 USHORT ReferenceCount
;
1523 } RTL_ATOM_TABLE_ENTRY
, *PRTL_ATOM_TABLE_ENTRY
;
1525 typedef struct _RTL_ATOM_TABLE
1530 #ifdef NTOS_MODE_USER
1531 RTL_CRITICAL_SECTION CriticalSection
;
1533 FAST_MUTEX FastMutex
;
1538 #ifdef NTOS_MODE_USER
1539 RTL_HANDLE_TABLE RtlHandleTable
;
1541 PHANDLE_TABLE ExHandleTable
;
1544 ULONG NumberOfBuckets
;
1545 PRTL_ATOM_TABLE_ENTRY Buckets
[1];
1546 } RTL_ATOM_TABLE
, *PRTL_ATOM_TABLE
;
1550 // System Time and Timezone Structures
1552 typedef struct _SYSTEMTIME
1561 USHORT wMilliseconds
;
1562 } SYSTEMTIME
, *PSYSTEMTIME
, *LPSYSTEMTIME
;
1564 typedef struct _TIME_ZONE_INFORMATION
1567 WCHAR StandardName
[32];
1568 SYSTEMTIME StandardDate
;
1570 WCHAR DaylightName
[32];
1571 SYSTEMTIME DaylightDate
;
1573 } TIME_ZONE_INFORMATION
, *PTIME_ZONE_INFORMATION
, *LPTIME_ZONE_INFORMATION
;
1574 #endif /* !_WINBASE_ */
1577 // Native version of Timezone Structure
1579 typedef LPTIME_ZONE_INFORMATION PRTL_TIME_ZONE_INFORMATION
;
1584 typedef struct _RTL_PATCH_HEADER
1586 LIST_ENTRY PatchList
;
1587 PVOID PatchImageBase
;
1588 struct _RTL_PATCH_HEADER
*NextPath
;
1591 struct _HOTPATCH_HEADER
*HotpatchHeader
;
1592 UNICODE_STRING TargetDllName
;
1593 PVOID TargetDllBase
;
1594 PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry
;
1595 PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry
;
1596 struct _SYSTEM_HOTPATCH_CODE_INFORMATION
*CodeInfo
;
1597 } RTL_PATCH_HEADER
, *PRTL_PATCH_HEADER
;
1600 // Header for NLS Files
1602 typedef struct _NLS_FILE_HEADER
1606 USHORT MaximumCharacterSize
;
1608 USHORT UniDefaultChar
;
1609 USHORT TransDefaultChar
;
1610 USHORT TransUniDefaultChar
;
1611 UCHAR LeadByte
[MAXIMUM_LEADBYTES
];
1612 } NLS_FILE_HEADER
, *PNLS_FILE_HEADER
;
1617 typedef struct _RTL_STACK_TRACE_ENTRY
1619 struct _RTL_STACK_TRACE_ENTRY
*HashChain
;
1623 PVOID BackTrace
[32];
1624 } RTL_STACK_TRACE_ENTRY
, *PRTL_STACK_TRACE_ENTRY
;
1626 typedef struct _STACK_TRACE_DATABASE
1628 RTL_CRITICAL_SECTION CriticalSection
;
1629 } STACK_TRACE_DATABASE
, *PSTACK_TRACE_DATABASE
;
1635 typedef ULONG (NTAPI
*RTL_TRACE_HASH_FUNCTION
) (ULONG Count
, PVOID
*Trace
);
1637 typedef struct _RTL_TRACE_BLOCK
1645 struct _RTL_TRACE_BLOCK
*Next
;
1647 } RTL_TRACE_BLOCK
, *PRTL_TRACE_BLOCK
;
1649 typedef struct _RTL_TRACE_DATABASE
1654 struct _RTL_TRACE_SEGMENT
*SegmentList
;
1658 #ifdef NTOS_MODE_USER
1659 RTL_CRITICAL_SECTION Lock
;
1663 KSPIN_LOCK SpinLock
;
1664 FAST_MUTEX FastMutex
;
1668 struct _RTL_TRACE_BLOCK
**Buckets
;
1669 RTL_TRACE_HASH_FUNCTION HashFunction
;
1672 ULONG HashCounter
[16];
1673 } RTL_TRACE_DATABASE
, *PRTL_TRACE_DATABASE
;
1675 typedef struct _RTL_TRACE_SEGMENT
1678 struct _RTL_TRACE_DATABASE
*Database
;
1679 struct _RTL_TRACE_SEGMENT
*NextSegment
;
1684 } RTL_TRACE_SEGMENT
, *PRTL_TRACE_SEGMENT
;
1686 typedef struct _RTL_TRACE_ENUMERATE
1688 struct _RTL_TRACE_DATABASE
*Database
;
1690 struct _RTL_TRACE_BLOCK
*Block
;
1691 } RTL_TRACE_ENUMERATE
, * PRTL_TRACE_ENUMERATE
;
1694 // Auto-Managed Rtl* String Buffer
1696 typedef struct _RTL_BUFFER
1699 PUCHAR StaticBuffer
;
1702 SIZE_T ReservedForAllocatedSize
;
1703 PVOID ReservedForIMalloc
;
1704 } RTL_BUFFER
, *PRTL_BUFFER
;
1706 typedef struct _RTL_UNICODE_STRING_BUFFER
1708 UNICODE_STRING String
;
1709 RTL_BUFFER ByteBuffer
;
1710 WCHAR MinimumStaticBufferForTerminalNul
;
1711 } RTL_UNICODE_STRING_BUFFER
, *PRTL_UNICODE_STRING_BUFFER
;
1713 #ifndef NTOS_MODE_USER
1716 // Message Resource Entry, Block and Data
1718 typedef struct _MESSAGE_RESOURCE_ENTRY
1722 UCHAR Text
[ANYSIZE_ARRAY
];
1723 } MESSAGE_RESOURCE_ENTRY
, *PMESSAGE_RESOURCE_ENTRY
;
1725 typedef struct _MESSAGE_RESOURCE_BLOCK
1729 ULONG OffsetToEntries
;
1730 } MESSAGE_RESOURCE_BLOCK
, *PMESSAGE_RESOURCE_BLOCK
;
1732 typedef struct _MESSAGE_RESOURCE_DATA
1734 ULONG NumberOfBlocks
;
1735 MESSAGE_RESOURCE_BLOCK Blocks
[ANYSIZE_ARRAY
];
1736 } MESSAGE_RESOURCE_DATA
, *PMESSAGE_RESOURCE_DATA
;
1738 #endif /* !NTOS_MODE_USER */
1740 #ifdef NTOS_MODE_USER
1747 #define CONST_VTBL const
1757 typedef struct _RTL_MEMORY_STREAM RTL_MEMORY_STREAM
, *PRTL_MEMORY_STREAM
;
1760 (NTAPI
*PRTL_MEMORY_STREAM_FINAL_RELEASE_ROUTINE
)(
1761 _In_ PRTL_MEMORY_STREAM Stream
1764 struct _RTL_MEMORY_STREAM
1766 CONST_VTBL
struct IStreamVtbl
*Vtbl
;
1772 PRTL_MEMORY_STREAM_FINAL_RELEASE_ROUTINE FinalRelease
;
1773 HANDLE ProcessHandle
;
1776 #endif /* NTOS_MODE_USER */
1782 #endif /* !_RTLTYPES_H */