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 // Thread Error Mode Flags
68 /* Also defined in psdk/winbase.h */
69 #define SEM_FAILCRITICALERRORS 0x0001
70 #define SEM_NOGPFAULTERRORBOX 0x0002
71 #define SEM_NOALIGNMENTFAULTEXCEPT 0x0004
72 #define SEM_NOOPENFILEERRORBOX 0x8000
74 #define RTL_SEM_FAILCRITICALERRORS (SEM_FAILCRITICALERRORS << 4)
75 #define RTL_SEM_NOGPFAULTERRORBOX (SEM_NOGPFAULTERRORBOX << 4)
76 #define RTL_SEM_NOALIGNMENTFAULTEXCEPT (SEM_NOALIGNMENTFAULTEXCEPT << 4)
79 // Range and Range List Flags
81 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
82 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
84 #define RTL_RANGE_SHARED 0x01
85 #define RTL_RANGE_CONFLICT 0x02
88 // Flags in RTL_ACTIVATION_CONTEXT_STACK_FRAME (from Checked NTDLL)
90 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_RELEASE_ON_DEACTIVATION 0x01
91 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_NO_DEACTIVATE 0x02
92 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_ON_FREE_LIST 0x04
93 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_HEAP_ALLOCATED 0x08
94 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_NOT_REALLY_ACTIVATED 0x10
95 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_ACTIVATED 0x20
96 #define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_DEACTIVATED 0x40
99 // Activation Context Frame Flags (from Checked NTDLL)
101 #define RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_FORMAT_WHISTLER 0x01
104 // RtlActivateActivationContextEx Flags (from Checked NTDLL)
106 #define RTL_ACTIVATE_ACTIVATION_CONTEXT_EX_FLAG_RELEASE_ON_STACK_DEALLOCATION 0x01
109 // RtlDeactivateActivationContext Flags (based on Win32 flag and name of above)
111 #define RTL_DEACTIVATE_ACTIVATION_CONTEXT_FLAG_FORCE_EARLY_DEACTIVATION 0x01
114 // RtlQueryActivationContext Flags (based on Win32 flag and name of above)
116 #define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_USE_ACTIVE_ACTIVATION_CONTEXT 0x01
117 #define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_IS_HMODULE 0x02
118 #define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_IS_ADDRESS 0x04
119 #define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_NO_ADDREF 0x80000000
124 #if !defined(NTOS_MODE_USER) && !defined(_NTIFS_)
125 #define HEAP_NO_SERIALIZE 0x00000001
126 #define HEAP_GROWABLE 0x00000002
127 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
128 #define HEAP_ZERO_MEMORY 0x00000008
129 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
130 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
131 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
132 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
133 #define HEAP_CREATE_ALIGN_16 0x00010000
134 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
135 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
139 // User-Defined Heap Flags and Classes
141 #define HEAP_SETTABLE_USER_VALUE 0x00000100
142 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
143 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
144 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
145 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
146 #define HEAP_CLASS_0 0x00000000
147 #define HEAP_CLASS_1 0x00001000
148 #define HEAP_CLASS_2 0x00002000
149 #define HEAP_CLASS_3 0x00003000
150 #define HEAP_CLASS_4 0x00004000
151 #define HEAP_CLASS_5 0x00005000
152 #define HEAP_CLASS_6 0x00006000
153 #define HEAP_CLASS_7 0x00007000
154 #define HEAP_CLASS_8 0x00008000
155 #define HEAP_CLASS_MASK 0x0000F000
158 // Internal HEAP Structure Flags
160 #define HEAP_FLAG_PAGE_ALLOCS 0x01000000
161 #define HEAP_PROTECTION_ENABLED 0x02000000
162 #define HEAP_BREAK_WHEN_OUT_OF_VM 0x04000000
163 #define HEAP_NO_ALIGNMENT 0x08000000
164 #define HEAP_CAPTURE_STACK_BACKTRACES 0x08000000
165 #define HEAP_SKIP_VALIDATION_CHECKS 0x10000000
166 #define HEAP_VALIDATE_ALL_ENABLED 0x20000000
167 #define HEAP_VALIDATE_PARAMETERS_ENABLED 0x40000000
168 #define HEAP_LOCK_USER_ALLOCATED 0x80000000
171 // Heap Validation Flags
173 #define HEAP_CREATE_VALID_MASK \
174 (HEAP_NO_SERIALIZE | \
176 HEAP_GENERATE_EXCEPTIONS | \
178 HEAP_REALLOC_IN_PLACE_ONLY | \
179 HEAP_TAIL_CHECKING_ENABLED | \
180 HEAP_FREE_CHECKING_ENABLED | \
181 HEAP_DISABLE_COALESCE_ON_FREE | \
183 HEAP_CREATE_ALIGN_16 | \
184 HEAP_CREATE_ENABLE_TRACING | \
185 HEAP_CREATE_ENABLE_EXECUTE)
187 C_ASSERT(HEAP_CREATE_VALID_MASK
== 0x0007F0FF);
191 // Native image architecture
194 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_I386
195 #elif defined(_M_ARM)
196 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_ARM
197 #elif defined(_M_AMD64)
198 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_AMD64
200 #error Define these please!
206 #define RTL_REGISTRY_ABSOLUTE 0
207 #define RTL_REGISTRY_SERVICES 1
208 #define RTL_REGISTRY_CONTROL 2
209 #define RTL_REGISTRY_WINDOWS_NT 3
210 #define RTL_REGISTRY_DEVICEMAP 4
211 #define RTL_REGISTRY_USER 5
212 #define RTL_REGISTRY_MAXIMUM 6
213 #define RTL_REGISTRY_HANDLE 0x40000000
214 #define RTL_REGISTRY_OPTIONAL 0x80000000
215 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
216 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
217 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
218 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
219 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
220 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
221 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
226 #define VER_MINORVERSION 0x0000001
227 #define VER_MAJORVERSION 0x0000002
228 #define VER_BUILDNUMBER 0x0000004
229 #define VER_PLATFORMID 0x0000008
230 #define VER_SERVICEPACKMINOR 0x0000010
231 #define VER_SERVICEPACKMAJOR 0x0000020
232 #define VER_SUITENAME 0x0000040
233 #define VER_PRODUCT_TYPE 0x0000080
234 #define VER_PLATFORM_WIN32s 0
235 #define VER_PLATFORM_WIN32_WINDOWS 1
236 #define VER_PLATFORM_WIN32_NT 2
238 #define VER_GREATER 2
239 #define VER_GREATER_EQUAL 3
241 #define VER_LESS_EQUAL 5
244 #define VER_CONDITION_MASK 7
245 #define VER_NUM_BITS_PER_CONDITION_MASK 3
250 #define TIME_ZONE_ID_UNKNOWN 0
251 #define TIME_ZONE_ID_STANDARD 1
252 #define TIME_ZONE_ID_DAYLIGHT 2
255 // Maximum Path Length
260 // RTL Lock Type (Critical Section or Resource)
262 #define RTL_CRITSECT_TYPE 0
263 #define RTL_RESOURCE_TYPE 1
266 // RtlAcquirePrivileges Flags
268 #define RTL_ACQUIRE_PRIVILEGE_IMPERSONATE 1
269 #define RTL_ACQUIRE_PRIVILEGE_PROCESS 2
271 #ifdef NTOS_MODE_USER
274 // String Hash Algorithms
276 #define HASH_STRING_ALGORITHM_DEFAULT 0
277 #define HASH_STRING_ALGORITHM_X65599 1
278 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
281 // RtlDuplicateString Flags
283 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
284 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
287 // RtlFindCharInUnicodeString Flags
289 #define RTL_FIND_CHAR_IN_UNICODE_STRING_START_AT_END 1
290 #define RTL_FIND_CHAR_IN_UNICODE_STRING_COMPLEMENT_CHAR_SET 2
291 #define RTL_FIND_CHAR_IN_UNICODE_STRING_CASE_INSENSITIVE 4
294 // RtlImageNtHeaderEx Flags
296 #define RTL_IMAGE_NT_HEADER_EX_FLAG_NO_RANGE_CHECK 0x00000001
299 // RtlDosApplyFileIsolationRedirection_Ustr Flags
301 #define RTL_DOS_APPLY_FILE_REDIRECTION_USTR_FLAG_RESPECT_DOT_LOCAL 0x01
306 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
307 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
308 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
311 // Activation Contexts
313 #define INVALID_ACTIVATION_CONTEXT (PVOID)0xFFFFFFFF
318 #if defined(__cplusplus)
319 #define RTL_CONST_CAST(type) const_cast<type>
321 #define RTL_CONST_CAST(type) (type)
325 // Constant String Macro
327 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
329 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
330 sizeof(__SOURCE_STRING__), \
331 (__SOURCE_STRING__) \
335 // Constant Object Attributes Macro
337 #define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a) \
339 sizeof(OBJECT_ATTRIBUTES), \
341 RTL_CONST_CAST(PUNICODE_STRING)(n), \
347 #define RTL_INIT_OBJECT_ATTRIBUTES(n, a) \
348 RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
350 #else /* NTOS_MODE_USER */
352 // Message Resource Flag
354 #define MESSAGE_RESOURCE_UNICODE 0x0001
356 #endif /* !NTOS_MODE_USER */
357 #define MAXIMUM_LEADBYTES 12
362 #define RTL_DEBUG_QUERY_MODULES 0x01
363 #define RTL_DEBUG_QUERY_BACKTRACES 0x02
364 #define RTL_DEBUG_QUERY_HEAPS 0x04
365 #define RTL_DEBUG_QUERY_HEAP_TAGS 0x08
366 #define RTL_DEBUG_QUERY_HEAP_BLOCKS 0x10
367 #define RTL_DEBUG_QUERY_LOCKS 0x20
372 #define RTL_HANDLE_VALID 0x1
377 #define RTL_ATOM_IS_PINNED 0x1
380 // Critical section lock bits
382 #define CS_LOCK_BIT 0x1
383 #define CS_LOCK_BIT_V 0x0
384 #define CS_LOCK_WAITER_WOKEN 0x2
385 #define CS_LOCK_WAITER_INC 0x4
390 #ifdef NTOS_MODE_USER
391 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
392 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
395 // Constant String Macro
397 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
399 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
400 sizeof(__SOURCE_STRING__), \
401 (__SOURCE_STRING__) \
404 #endif /* NTOS_MODE_USER */
406 #ifdef NTOS_MODE_USER
409 // Boot Status Data Field Types
411 typedef enum _RTL_BSD_ITEM_TYPE
413 RtlBsdItemVersionNumber
,
414 RtlBsdItemProductType
,
415 RtlBsdItemAabEnabled
,
416 RtlBsdItemAabTimeout
,
418 RtlBsdItemBootShutdown
,
420 } RTL_BSD_ITEM_TYPE
, *PRTL_BSD_ITEM_TYPE
;
423 // Table and Compare result types
425 typedef enum _TABLE_SEARCH_RESULT
431 } TABLE_SEARCH_RESULT
;
433 typedef enum _RTL_GENERIC_COMPARE_RESULTS
438 } RTL_GENERIC_COMPARE_RESULTS
;
440 #endif /* NTOS_MODE_USER */
445 typedef enum _RTL_PATH_TYPE
448 RtlPathTypeUncAbsolute
,
449 RtlPathTypeDriveAbsolute
,
450 RtlPathTypeDriveRelative
,
453 RtlPathTypeLocalDevice
,
454 RtlPathTypeRootLocalDevice
,
457 #ifndef NTOS_MODE_USER
460 // Heap Information Class
462 typedef enum _HEAP_INFORMATION_CLASS
464 HeapCompatibilityInformation
,
465 HeapEnableTerminationOnCorruption
466 } HEAP_INFORMATION_CLASS
;
469 // Callback function for RTL Timers or Registered Waits
472 (NTAPI
*WAITORTIMERCALLBACKFUNC
)(
474 BOOLEAN fTimerOrWaitFired
478 // Handler during Vectored RTL Exceptions
481 (NTAPI
*PVECTORED_EXCEPTION_HANDLER
)(
482 PEXCEPTION_POINTERS ExceptionPointers
486 // Worker Thread Callback for Rtl
489 (NTAPI
*WORKERCALLBACKFUNC
)(
493 #else /* !NTOS_MODE_USER */
496 // RTL Library Allocation/Free Routines
499 (NTAPI
*PRTL_ALLOCATE_STRING_ROUTINE
)(
504 (NTAPI
*PRTL_REALLOCATE_STRING_ROUTINE
)(
505 SIZE_T NumberOfBytes
,
511 (NTAPI
*PRTL_FREE_STRING_ROUTINE
)(
515 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine
;
516 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine
;
517 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine
;
519 #endif /* NTOS_MODE_USER */
522 // Unhandled Exception Filter
525 (NTAPI
*RTLP_UNHANDLED_EXCEPTION_FILTER
)(
526 _In_
struct _EXCEPTION_POINTERS
*ExceptionInfo
528 typedef RTLP_UNHANDLED_EXCEPTION_FILTER
*PRTLP_UNHANDLED_EXCEPTION_FILTER
;
531 // Callback for RTL Heap Enumeration
534 (NTAPI
*PHEAP_ENUMERATION_ROUTINE
)(
535 _In_ PVOID HeapHandle
,
540 // Thread and Process Start Routines for RtlCreateUserThread/Process
542 typedef ULONG (NTAPI
*PTHREAD_START_ROUTINE
)(
547 (NTAPI
*PRTL_BASE_PROCESS_START_ROUTINE
)(
548 PTHREAD_START_ROUTINE StartAddress
,
553 // Worker Start/Exit Function
556 (NTAPI
*PRTL_START_POOL_THREAD
)(
557 _In_ PTHREAD_START_ROUTINE Function
,
558 _In_ PVOID Parameter
,
559 _Out_ PHANDLE ThreadHandle
563 (NTAPI
*PRTL_EXIT_POOL_THREAD
)(
564 _In_ NTSTATUS ExitStatus
568 // Declare empty structure definitions so that they may be referenced by
569 // routines before they are defined
571 struct _RTL_AVL_TABLE
;
572 struct _RTL_GENERIC_TABLE
;
576 // Routines and callbacks for the RTL AVL/Generic Table package
578 #ifdef NTOS_MODE_USER
580 (NTAPI RTL_AVL_MATCH_FUNCTION
)(
581 struct _RTL_AVL_TABLE
*Table
,
585 typedef RTL_AVL_MATCH_FUNCTION
*PRTL_AVL_MATCH_FUNCTION
;
587 typedef RTL_GENERIC_COMPARE_RESULTS
588 (NTAPI RTL_AVL_COMPARE_ROUTINE
) (
589 struct _RTL_AVL_TABLE
*Table
,
593 typedef RTL_AVL_COMPARE_ROUTINE
*PRTL_AVL_COMPARE_ROUTINE
;
595 typedef RTL_GENERIC_COMPARE_RESULTS
596 (NTAPI RTL_GENERIC_COMPARE_ROUTINE
) (
597 struct _RTL_GENERIC_TABLE
*Table
,
601 typedef RTL_GENERIC_COMPARE_ROUTINE
*PRTL_GENERIC_COMPARE_ROUTINE
;
604 (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE
) (
605 struct _RTL_GENERIC_TABLE
*Table
,
608 typedef RTL_GENERIC_ALLOCATE_ROUTINE
*PRTL_GENERIC_ALLOCATE_ROUTINE
;
611 (NTAPI RTL_AVL_ALLOCATE_ROUTINE
) (
612 struct _RTL_AVL_TABLE
*Table
,
615 typedef RTL_AVL_ALLOCATE_ROUTINE
*PRTL_AVL_ALLOCATE_ROUTINE
;
618 (NTAPI RTL_GENERIC_FREE_ROUTINE
) (
619 struct _RTL_GENERIC_TABLE
*Table
,
622 typedef RTL_GENERIC_FREE_ROUTINE
*PRTL_GENERIC_FREE_ROUTINE
;
625 (NTAPI RTL_AVL_FREE_ROUTINE
) (
626 struct _RTL_AVL_TABLE
*Table
,
629 typedef RTL_AVL_FREE_ROUTINE
*PRTL_AVL_FREE_ROUTINE
;
631 #ifdef RTL_USE_AVL_TABLES
632 #undef RTL_GENERIC_COMPARE_ROUTINE
633 #undef PRTL_GENERIC_COMPARE_ROUTINE
634 #undef RTL_GENERIC_ALLOCATE_ROUTINE
635 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
636 #undef RTL_GENERIC_FREE_ROUTINE
637 #undef PRTL_GENERIC_FREE_ROUTINE
639 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
640 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
641 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
642 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
643 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
644 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
645 #endif /* RTL_USE_AVL_TABLES */
647 #endif /* NTOS_MODE_USER */
650 // RTL Query Registry callback
652 #ifdef NTOS_MODE_USER
654 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
655 _In_ PWSTR ValueName
,
656 _In_ ULONG ValueType
,
657 _In_ PVOID ValueData
,
658 _In_ ULONG ValueLength
,
660 _In_ PVOID EntryContext
665 // RTL Secure Memory callbacks
667 #ifdef NTOS_MODE_USER
669 (NTAPI
*PRTL_SECURE_MEMORY_CACHE_CALLBACK
)(
676 // RTL Range List callbacks
678 #ifdef NTOS_MODE_USER
680 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
)(
682 struct _RTL_RANGE
*Range
686 // Custom Heap Commit Routine for RtlCreateHeap
689 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
)(
691 _Inout_ PVOID
*CommitAddress
,
692 _Inout_ PSIZE_T CommitSize
696 // Parameters for RtlCreateHeap
698 typedef struct _RTL_HEAP_PARAMETERS
701 SIZE_T SegmentReserve
;
702 SIZE_T SegmentCommit
;
703 SIZE_T DeCommitFreeBlockThreshold
;
704 SIZE_T DeCommitTotalFreeThreshold
;
705 SIZE_T MaximumAllocationSize
;
706 SIZE_T VirtualMemoryThreshold
;
707 SIZE_T InitialCommit
;
708 SIZE_T InitialReserve
;
709 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
711 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
714 // RTL Bitmap structures
716 typedef struct _RTL_BITMAP
720 } RTL_BITMAP
, *PRTL_BITMAP
;
722 typedef struct _RTL_BITMAP_RUN
726 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
729 // RtlGenerateXxxName context
731 typedef struct _GENERATE_NAME_CONTEXT
734 BOOLEAN CheckSumInserted
;
737 ULONG ExtensionLength
;
738 WCHAR ExtensionBuffer
[4];
739 ULONG LastIndexValue
;
740 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
743 // RTL Splay and Balanced Links structures
745 typedef struct _RTL_SPLAY_LINKS
747 struct _RTL_SPLAY_LINKS
*Parent
;
748 struct _RTL_SPLAY_LINKS
*LeftChild
;
749 struct _RTL_SPLAY_LINKS
*RightChild
;
750 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
752 typedef struct _RTL_BALANCED_LINKS
754 struct _RTL_BALANCED_LINKS
*Parent
;
755 struct _RTL_BALANCED_LINKS
*LeftChild
;
756 struct _RTL_BALANCED_LINKS
*RightChild
;
759 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
762 // RTL Avl/Generic Tables
764 #ifndef RTL_USE_AVL_TABLES
765 typedef struct _RTL_GENERIC_TABLE
767 PRTL_SPLAY_LINKS TableRoot
;
768 LIST_ENTRY InsertOrderList
;
769 PLIST_ENTRY OrderedPointer
;
770 ULONG WhichOrderedElement
;
771 ULONG NumberGenericTableElements
;
772 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
773 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
774 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
776 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
777 #endif /* !RTL_USE_AVL_TABLES */
779 typedef struct _RTL_AVL_TABLE
781 RTL_BALANCED_LINKS BalancedRoot
;
782 PVOID OrderedPointer
;
783 ULONG WhichOrderedElement
;
784 ULONG NumberGenericTableElements
;
786 PRTL_BALANCED_LINKS RestartKey
;
788 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
789 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
790 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
792 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
794 #ifdef RTL_USE_AVL_TABLES
795 #undef RTL_GENERIC_TABLE
796 #undef PRTL_GENERIC_TABLE
798 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
799 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
800 #endif /* RTL_USE_AVL_TABLES */
803 // RTL Compression Buffer
805 typedef struct _COMPRESSED_DATA_INFO
{
806 USHORT CompressionFormatAndEngine
;
807 UCHAR CompressionUnitShift
;
811 USHORT NumberOfChunks
;
812 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
813 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
816 // RtlQueryRegistry Data
818 typedef struct _RTL_QUERY_REGISTRY_TABLE
820 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
827 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
830 // RTL Unicode Table Structures
832 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
836 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
837 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
838 RTL_SPLAY_LINKS Links
;
839 PUNICODE_STRING Prefix
;
840 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
842 typedef struct _UNICODE_PREFIX_TABLE
846 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
847 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
848 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
850 #ifdef NTOS_MODE_USER
852 // Pfx* routines' table structures
854 typedef struct _PREFIX_TABLE_ENTRY
858 struct _PREFIX_TABLE_ENTRY
*NextPrefixTree
;
859 RTL_SPLAY_LINKS Links
;
861 } PREFIX_TABLE_ENTRY
, *PPREFIX_TABLE_ENTRY
;
863 typedef struct _PREFIX_TABLE
867 PPREFIX_TABLE_ENTRY NextPrefixTree
;
868 } PREFIX_TABLE
, *PPREFIX_TABLE
;
872 // Time Structure for RTL Time calls
874 typedef struct _TIME_FIELDS
884 } TIME_FIELDS
, *PTIME_FIELDS
;
887 // Activation Context Frame
889 typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
891 struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
*Previous
;
892 PACTIVATION_CONTEXT ActivationContext
;
894 } RTL_ACTIVATION_CONTEXT_STACK_FRAME
, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME
;
896 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
900 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
901 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
;
903 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
907 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
912 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
;
914 typedef RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
;
915 typedef PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
;
917 typedef struct _RTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
919 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
921 PVOID ActivationStackBackTrace
[8];
922 } RTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
, *PRTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
;
924 #if (NTDDI_VERSION >= NTDDI_WS03)
925 typedef struct _ACTIVATION_CONTEXT_STACK
927 PRTL_ACTIVATION_CONTEXT_STACK_FRAME ActiveFrame
;
928 LIST_ENTRY FrameListCache
;
930 ULONG NextCookieSequenceNumber
;
932 } ACTIVATION_CONTEXT_STACK
, *PACTIVATION_CONTEXT_STACK
;
934 typedef struct _ACTIVATION_CONTEXT_STACK
937 ULONG NextCookieSequenceNumber
;
939 LIST_ENTRY FrameListCache
;
940 } ACTIVATION_CONTEXT_STACK
, *PACTIVATION_CONTEXT_STACK
;
943 typedef struct _ACTIVATION_CONTEXT_DATA
949 ULONG DefaultTocOffset
;
950 ULONG ExtendedTocOffset
;
951 ULONG AssemblyRosterOffset
;
953 } ACTIVATION_CONTEXT_DATA
, *PACTIVATION_CONTEXT_DATA
;
955 typedef struct _ACTIVATION_CONTEXT_STACK_FRAMELIST
961 ULONG NotFramesInUse
;
962 RTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME Frames
[32];
963 } ACTIVATION_CONTEXT_STACK_FRAMELIST
, *PACTIVATION_CONTEXT_STACK_FRAMELIST
;
965 #endif /* NTOS_MODE_USER */
973 ACCESS_MASK AccessMask
;
977 // Information Structures for RTL Debug Functions
979 typedef struct _RTL_PROCESS_MODULE_INFORMATION
986 USHORT LoadOrderIndex
;
987 USHORT InitOrderIndex
;
989 USHORT OffsetToFileName
;
990 CHAR FullPathName
[256];
991 } RTL_PROCESS_MODULE_INFORMATION
, *PRTL_PROCESS_MODULE_INFORMATION
;
993 typedef struct _RTL_PROCESS_MODULES
995 ULONG NumberOfModules
;
996 RTL_PROCESS_MODULE_INFORMATION Modules
[1];
997 } RTL_PROCESS_MODULES
, *PRTL_PROCESS_MODULES
;
999 typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
1002 RTL_PROCESS_MODULE_INFORMATION BaseInfo
;
1003 ULONG ImageCheckSum
;
1004 ULONG TimeDateStamp
;
1006 } RTL_PROCESS_MODULE_INFORMATION_EX
, *PRTL_PROCESS_MODULE_INFORMATION_EX
;
1008 typedef struct _RTL_HEAP_TAG_INFO
1010 ULONG NumberOfAllocations
;
1011 ULONG NumberOfFrees
;
1012 SIZE_T BytesAllocated
;
1013 } RTL_HEAP_TAG_INFO
, *PRTL_HEAP_TAG_INFO
;
1015 typedef struct _RTL_HEAP_USAGE_ENTRY
1017 struct _RTL_HEAP_USAGE_ENTRY
*Next
;
1020 USHORT AllocatorBackTraceIndex
;
1022 } RTL_HEAP_USAGE_ENTRY
, *PRTL_HEAP_USAGE_ENTRY
;
1024 typedef struct _RTL_HEAP_USAGE
1027 SIZE_T BytesAllocated
;
1028 SIZE_T BytesCommitted
;
1029 SIZE_T BytesReserved
;
1030 SIZE_T BytesReservedMaximum
;
1031 PRTL_HEAP_USAGE_ENTRY Entries
;
1032 PRTL_HEAP_USAGE_ENTRY AddedEntries
;
1033 PRTL_HEAP_USAGE_ENTRY RemovedEntries
;
1034 ULONG_PTR Reserved
[8];
1035 } RTL_HEAP_USAGE
, *PRTL_HEAP_USAGE
;
1037 typedef struct _RTL_HEAP_WALK_ENTRY
1041 UCHAR OverheadBytes
;
1050 USHORT AllocatorBackTraceIndex
;
1055 ULONG_PTR CommittedSize
;
1056 ULONG_PTR UnCommittedSize
;
1061 } RTL_HEAP_WALK_ENTRY
, *PRTL_HEAP_WALK_ENTRY
;
1063 typedef struct _RTL_HEAP_ENTRY
1067 USHORT AllocatorBackTraceIndex
;
1077 SIZE_T CommittedSize
;
1081 } RTL_HEAP_ENTRY
, *PRTL_HEAP_ENTRY
;
1083 typedef struct _RTL_HEAP_TAG
1085 ULONG NumberOfAllocations
;
1086 ULONG NumberOfFrees
;
1087 SIZE_T BytesAllocated
;
1089 USHORT CreatorBackTraceIndex
;
1091 } RTL_HEAP_TAG
, *PRTL_HEAP_TAG
;
1093 typedef struct _RTL_HEAP_INFORMATION
1097 USHORT EntryOverhead
;
1098 USHORT CreatorBackTraceIndex
;
1099 SIZE_T BytesAllocated
;
1100 SIZE_T BytesCommitted
;
1102 ULONG NumberOfEntries
;
1103 ULONG NumberOfPseudoTags
;
1104 ULONG PseudoTagGranularity
;
1107 PRTL_HEAP_ENTRY Entries
;
1108 } RTL_HEAP_INFORMATION
, *PRTL_HEAP_INFORMATION
;
1110 typedef struct _RTL_PROCESS_HEAPS
1112 ULONG NumberOfHeaps
;
1113 RTL_HEAP_INFORMATION Heaps
[1];
1114 } RTL_PROCESS_HEAPS
, *PRTL_PROCESS_HEAPS
;
1116 typedef struct _RTL_PROCESS_LOCK_INFORMATION
1120 USHORT CreatorBackTraceIndex
;
1121 ULONG OwnerThreadId
;
1123 ULONG ContentionCount
;
1125 ULONG RecursionCount
;
1126 ULONG NumberOfSharedWaiters
;
1127 ULONG NumberOfExclusiveWaiters
;
1128 } RTL_PROCESS_LOCK_INFORMATION
, *PRTL_PROCESS_LOCK_INFORMATION
;
1130 typedef struct _RTL_PROCESS_LOCKS
1132 ULONG NumberOfLocks
;
1133 RTL_PROCESS_LOCK_INFORMATION Locks
[1];
1134 } RTL_PROCESS_LOCKS
, *PRTL_PROCESS_LOCKS
;
1136 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
1138 PVOID SymbolicBackTrace
;
1142 PVOID BackTrace
[16];
1143 } RTL_PROCESS_BACKTRACE_INFORMATION
, *PRTL_PROCESS_BACKTRACE_INFORMATION
;
1145 typedef struct _RTL_PROCESS_BACKTRACES
1147 ULONG CommittedMemory
;
1148 ULONG ReservedMemory
;
1149 ULONG NumberOfBackTraceLookups
;
1150 ULONG NumberOfBackTraces
;
1151 RTL_PROCESS_BACKTRACE_INFORMATION BackTraces
[1];
1152 } RTL_PROCESS_BACKTRACES
, *PRTL_PROCESS_BACKTRACES
;
1154 typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
1158 UCHAR OptionData
[1];
1160 // Option array continues below
1162 } RTL_PROCESS_VERIFIER_OPTIONS
, *PRTL_PROCESS_VERIFIER_OPTIONS
;
1164 typedef struct _RTL_DEBUG_INFORMATION
1166 HANDLE SectionHandleClient
;
1167 PVOID ViewBaseClient
;
1168 PVOID ViewBaseTarget
;
1169 ULONG ViewBaseDelta
;
1170 HANDLE EventPairClient
;
1171 PVOID EventPairTarget
;
1172 HANDLE TargetProcessId
;
1173 HANDLE TargetThreadHandle
;
1180 PRTL_PROCESS_MODULES Modules
;
1181 PRTL_PROCESS_MODULE_INFORMATION_EX ModulesEx
;
1183 PRTL_PROCESS_BACKTRACES BackTraces
;
1184 PRTL_PROCESS_HEAPS Heaps
;
1185 PRTL_PROCESS_LOCKS Locks
;
1186 HANDLE SpecificHeap
;
1187 HANDLE TargetProcessHandle
;
1188 RTL_PROCESS_VERIFIER_OPTIONS VerifierOptions
;
1190 HANDLE CriticalSectionHandle
;
1191 HANDLE CriticalSectionOwnerThread
;
1193 } RTL_DEBUG_INFORMATION
, *PRTL_DEBUG_INFORMATION
;
1196 // Unload Event Trace Structure for RtlGetUnloadEventTrace
1198 typedef struct _RTL_UNLOAD_EVENT_TRACE
1203 ULONG TimeDateStamp
;
1205 WCHAR ImageName
[32];
1206 } RTL_UNLOAD_EVENT_TRACE
, *PRTL_UNLOAD_EVENT_TRACE
;
1209 // RTL Handle Structures
1211 typedef struct _RTL_HANDLE_TABLE_ENTRY
1216 struct _RTL_HANDLE_TABLE_ENTRY
*NextFree
;
1218 } RTL_HANDLE_TABLE_ENTRY
, *PRTL_HANDLE_TABLE_ENTRY
;
1220 typedef struct _RTL_HANDLE_TABLE
1222 ULONG MaximumNumberOfHandles
;
1223 ULONG SizeOfHandleTableEntry
;
1225 PRTL_HANDLE_TABLE_ENTRY FreeHandles
;
1226 PRTL_HANDLE_TABLE_ENTRY CommittedHandles
;
1227 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles
;
1228 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles
;
1229 } RTL_HANDLE_TABLE
, *PRTL_HANDLE_TABLE
;
1231 #ifdef NTOS_MODE_USER
1235 typedef struct _EXCEPTION_REGISTRATION_RECORD
1237 struct _EXCEPTION_REGISTRATION_RECORD
*Next
;
1238 PEXCEPTION_ROUTINE Handler
;
1239 } EXCEPTION_REGISTRATION_RECORD
, *PEXCEPTION_REGISTRATION_RECORD
;
1240 #endif /* NTOS_MODE_USER */
1243 // Current Directory Structures
1245 typedef struct _CURDIR
1247 UNICODE_STRING DosPath
;
1251 typedef struct _RTLP_CURDIR_REF
1255 } RTLP_CURDIR_REF
, *PRTLP_CURDIR_REF
;
1257 typedef struct _RTL_RELATIVE_NAME_U
1259 UNICODE_STRING RelativeName
;
1260 HANDLE ContainingDirectory
;
1261 PRTLP_CURDIR_REF CurDirRef
;
1262 } RTL_RELATIVE_NAME_U
, *PRTL_RELATIVE_NAME_U
;
1264 typedef struct _RTL_DRIVE_LETTER_CURDIR
1269 UNICODE_STRING DosPath
;
1270 } RTL_DRIVE_LETTER_CURDIR
, *PRTL_DRIVE_LETTER_CURDIR
;
1272 typedef struct _RTL_PERTHREAD_CURDIR
1274 PRTL_DRIVE_LETTER_CURDIR CurrentDirectories
;
1275 PUNICODE_STRING ImageName
;
1277 } RTL_PERTHREAD_CURDIR
, *PRTL_PERTHREAD_CURDIR
;
1280 // Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
1282 typedef struct _RTL_ACQUIRE_STATE
1285 HANDLE OldImpersonationToken
;
1286 PTOKEN_PRIVILEGES OldPrivileges
;
1287 PTOKEN_PRIVILEGES NewPrivileges
;
1289 UCHAR OldPrivBuffer
[1024];
1290 } RTL_ACQUIRE_STATE
, *PRTL_ACQUIRE_STATE
;
1292 #ifndef NTOS_MODE_USER
1295 // RTL Critical Section Structures
1297 typedef struct _RTL_CRITICAL_SECTION_DEBUG
1300 USHORT CreatorBackTraceIndex
;
1301 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
1302 LIST_ENTRY ProcessLocksList
;
1304 ULONG ContentionCount
;
1306 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
1308 typedef struct _RTL_CRITICAL_SECTION
1310 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
1312 LONG RecursionCount
;
1313 HANDLE OwningThread
;
1314 HANDLE LockSemaphore
;
1315 ULONG_PTR SpinCount
;
1316 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
1318 #endif /* !NTOS_MODE_USER */
1321 // RTL Private Heap Structures
1323 typedef struct _HEAP_LOCK
1327 RTL_CRITICAL_SECTION CriticalSection
;
1328 #ifndef NTOS_MODE_USER
1331 UCHAR Padding
[0x68]; /* Max ERESOURCE size for x64 build. Needed because RTL is built only once */
1333 } HEAP_LOCK
, *PHEAP_LOCK
;
1336 // RTL Range List Structures
1338 typedef struct _RTL_RANGE_LIST
1340 LIST_ENTRY ListHead
;
1344 } RTL_RANGE_LIST
, *PRTL_RANGE_LIST
;
1346 typedef struct _RTL_RANGE
1354 } RTL_RANGE
, *PRTL_RANGE
;
1356 typedef struct _RANGE_LIST_ITERATOR
1358 PLIST_ENTRY RangeListHead
;
1359 PLIST_ENTRY MergedHead
;
1362 } RTL_RANGE_LIST_ITERATOR
, *PRTL_RANGE_LIST_ITERATOR
;
1367 #define RTL_RESOURCE_FLAG_LONG_TERM ((ULONG)0x00000001)
1369 typedef struct _RTL_RESOURCE
1371 RTL_CRITICAL_SECTION Lock
;
1372 HANDLE SharedSemaphore
;
1373 ULONG SharedWaiters
;
1374 HANDLE ExclusiveSemaphore
;
1375 ULONG ExclusiveWaiters
;
1377 HANDLE OwningThread
;
1380 } RTL_RESOURCE
, *PRTL_RESOURCE
;
1383 // Structures for RtlCreateUserProcess
1385 typedef struct _RTL_USER_PROCESS_PARAMETERS
1387 ULONG MaximumLength
;
1391 HANDLE ConsoleHandle
;
1393 HANDLE StandardInput
;
1394 HANDLE StandardOutput
;
1395 HANDLE StandardError
;
1396 CURDIR CurrentDirectory
;
1397 UNICODE_STRING DllPath
;
1398 UNICODE_STRING ImagePathName
;
1399 UNICODE_STRING CommandLine
;
1407 ULONG FillAttribute
;
1409 ULONG ShowWindowFlags
;
1410 UNICODE_STRING WindowTitle
;
1411 UNICODE_STRING DesktopInfo
;
1412 UNICODE_STRING ShellInfo
;
1413 UNICODE_STRING RuntimeData
;
1414 RTL_DRIVE_LETTER_CURDIR CurrentDirectories
[RTL_MAX_DRIVE_LETTERS
];
1415 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1416 SIZE_T EnvironmentSize
;
1418 #if (NTDDI_VERSION >= NTDDI_WIN7)
1419 SIZE_T EnvironmentVersion
;
1421 } RTL_USER_PROCESS_PARAMETERS
, *PRTL_USER_PROCESS_PARAMETERS
;
1423 typedef struct _RTL_USER_PROCESS_INFORMATION
1426 HANDLE ProcessHandle
;
1427 HANDLE ThreadHandle
;
1429 SECTION_IMAGE_INFORMATION ImageInformation
;
1430 } RTL_USER_PROCESS_INFORMATION
, *PRTL_USER_PROCESS_INFORMATION
;
1432 #if (NTDDI_VERSION >= NTDDI_WIN7)
1434 typedef enum _RTL_UMS_SCHEDULER_REASON
1436 UmsSchedulerStartup
= 0,
1437 UmsSchedulerThreadBlocked
= 1,
1438 UmsSchedulerThreadYield
= 2,
1439 } RTL_UMS_SCHEDULER_REASON
, *PRTL_UMS_SCHEDULER_REASON
;
1441 enum _RTL_UMSCTX_FLAGS
1443 UMSCTX_SCHEDULED_THREAD_BIT
= 0,
1444 #if (NTDDI_VERSION < NTDDI_WIN8)
1445 UMSCTX_HAS_QUANTUM_REQ_BIT
,
1446 UMSCTX_HAS_AFFINITY_REQ_BIT
,
1447 UMSCTX_HAS_PRIORITY_REQ_BIT
,
1449 UMSCTX_SUSPENDED_BIT
,
1450 UMSCTX_VOLATILE_CONTEXT_BIT
,
1451 UMSCTX_TERMINATED_BIT
,
1452 UMSCTX_DEBUG_ACTIVE_BIT
,
1453 UMSCTX_RUNNING_ON_SELF_THREAD_BIT
,
1454 UMSCTX_DENY_RUNNING_ON_SELF_THREAD_BIT
1456 } RTL_UMSCTX_FLAGS
, *PRTL_UMSCTX_FLAGS
;
1458 #define UMSCTX_SCHEDULED_THREAD_MASK (1 << UMSCTX_SCHEDULED_THREAD_BIT)
1459 #define UMSCTX_SUSPENDED_MASK (1 << UMSCTX_SUSPENDED_BIT)
1460 #define UMSCTX_VOLATILE_CONTEXT_MASK (1 << UMSCTX_VOLATILE_CONTEXT_BIT)
1461 #define UMSCTX_TERMINATED_MASK (1 << UMSCTX_TERMINATED_BIT)
1462 #define UMSCTX_DEBUG_ACTIVE_MASK (1 << UMSCTX_DEBUG_ACTIVE_BIT)
1463 #define UMSCTX_RUNNING_ON_SELF_THREAD_MASK (1 << UMSCTX_RUNNING_ON_SELF_THREAD_BIT)
1464 #define UMSCTX_DENY_RUNNING_ON_SELF_THREAD_MASK (1 << UMSCTX_DENY_RUNNING_ON_SELF_THREAD_BIT)
1469 typedef struct DECLSPEC_ALIGN(16) _RTL_UMS_CONTEXT
1471 SINGLE_LIST_ENTRY Link
;
1479 ULONG ScheduledThread
: 1;
1480 #if (NTDDI_VERSION < NTDDI_WIN8)
1481 ULONG HasQuantumReq
: 1;
1482 ULONG HasAffinityReq
: 1;
1483 ULONG HasPriorityReq
: 1;
1485 ULONG Suspended
: 1;
1486 ULONG VolatileContext
: 1;
1487 ULONG Terminated
: 1;
1488 ULONG DebugActive
: 1;
1489 ULONG RunningOnSelfThread
: 1;
1490 ULONG DenyRunningOnSelfThread
: 1;
1491 #if (NTDDI_VERSION < NTDDI_WIN8)
1492 ULONG ReservedFlags
: 22;
1501 #if (NTDDI_VERSION >= NTDDI_WIN8)
1502 ULONG64 KernelUpdateLock
: 2;
1504 ULONG64 KernelUpdateLock
: 1;
1505 ULONG64 Reserved
: 1;
1507 ULONG64 PrimaryClientID
: 62;
1509 ULONG64 ContextLock
;
1511 #if (NTDDI_VERSION < NTDDI_WIN8)
1512 ULONG64 QuantumValue
;
1513 GROUP_AFFINITY AffinityMask
;
1516 struct _RTL_UMS_CONTEXT
* PrimaryUmsContext
;
1518 ULONG KernelYieldCount
;
1519 ULONG MixedYieldCount
;
1521 } RTL_UMS_CONTEXT
, *PRTL_UMS_CONTEXT
;
1522 #endif // #if (NTDDI_VERSION >= NTDDI_WIN7)
1525 // RTL Atom Table Structures
1527 typedef struct _RTL_ATOM_TABLE_ENTRY
1529 struct _RTL_ATOM_TABLE_ENTRY
*HashLink
;
1532 USHORT ReferenceCount
;
1536 } RTL_ATOM_TABLE_ENTRY
, *PRTL_ATOM_TABLE_ENTRY
;
1538 typedef struct _RTL_ATOM_TABLE
1543 #ifdef NTOS_MODE_USER
1544 RTL_CRITICAL_SECTION CriticalSection
;
1546 FAST_MUTEX FastMutex
;
1551 #ifdef NTOS_MODE_USER
1552 RTL_HANDLE_TABLE RtlHandleTable
;
1554 PHANDLE_TABLE ExHandleTable
;
1557 ULONG NumberOfBuckets
;
1558 PRTL_ATOM_TABLE_ENTRY Buckets
[1];
1559 } RTL_ATOM_TABLE
, *PRTL_ATOM_TABLE
;
1563 // System Time and Timezone Structures
1565 typedef struct _SYSTEMTIME
1574 USHORT wMilliseconds
;
1575 } SYSTEMTIME
, *PSYSTEMTIME
, *LPSYSTEMTIME
;
1577 typedef struct _TIME_ZONE_INFORMATION
1580 WCHAR StandardName
[32];
1581 SYSTEMTIME StandardDate
;
1583 WCHAR DaylightName
[32];
1584 SYSTEMTIME DaylightDate
;
1586 } TIME_ZONE_INFORMATION
, *PTIME_ZONE_INFORMATION
, *LPTIME_ZONE_INFORMATION
;
1587 #endif /* !_WINBASE_ */
1590 // Native version of Timezone Structure
1592 typedef LPTIME_ZONE_INFORMATION PRTL_TIME_ZONE_INFORMATION
;
1597 typedef struct _RTL_PATCH_HEADER
1599 LIST_ENTRY PatchList
;
1600 PVOID PatchImageBase
;
1601 struct _RTL_PATCH_HEADER
*NextPath
;
1604 struct _HOTPATCH_HEADER
*HotpatchHeader
;
1605 UNICODE_STRING TargetDllName
;
1606 PVOID TargetDllBase
;
1607 PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry
;
1608 PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry
;
1609 struct _SYSTEM_HOTPATCH_CODE_INFORMATION
*CodeInfo
;
1610 } RTL_PATCH_HEADER
, *PRTL_PATCH_HEADER
;
1613 // Header for NLS Files
1615 typedef struct _NLS_FILE_HEADER
1619 USHORT MaximumCharacterSize
;
1621 USHORT UniDefaultChar
;
1622 USHORT TransDefaultChar
;
1623 USHORT TransUniDefaultChar
;
1624 UCHAR LeadByte
[MAXIMUM_LEADBYTES
];
1625 } NLS_FILE_HEADER
, *PNLS_FILE_HEADER
;
1630 typedef struct _RTL_STACK_TRACE_ENTRY
1632 struct _RTL_STACK_TRACE_ENTRY
*HashChain
;
1636 PVOID BackTrace
[32];
1637 } RTL_STACK_TRACE_ENTRY
, *PRTL_STACK_TRACE_ENTRY
;
1639 typedef struct _STACK_TRACE_DATABASE
1641 RTL_CRITICAL_SECTION CriticalSection
;
1642 } STACK_TRACE_DATABASE
, *PSTACK_TRACE_DATABASE
;
1648 typedef ULONG (NTAPI
*RTL_TRACE_HASH_FUNCTION
) (ULONG Count
, PVOID
*Trace
);
1650 typedef struct _RTL_TRACE_BLOCK
1658 struct _RTL_TRACE_BLOCK
*Next
;
1660 } RTL_TRACE_BLOCK
, *PRTL_TRACE_BLOCK
;
1662 typedef struct _RTL_TRACE_DATABASE
1667 struct _RTL_TRACE_SEGMENT
*SegmentList
;
1671 #ifdef NTOS_MODE_USER
1672 RTL_CRITICAL_SECTION Lock
;
1676 KSPIN_LOCK SpinLock
;
1677 FAST_MUTEX FastMutex
;
1681 struct _RTL_TRACE_BLOCK
**Buckets
;
1682 RTL_TRACE_HASH_FUNCTION HashFunction
;
1685 ULONG HashCounter
[16];
1686 } RTL_TRACE_DATABASE
, *PRTL_TRACE_DATABASE
;
1688 typedef struct _RTL_TRACE_SEGMENT
1691 struct _RTL_TRACE_DATABASE
*Database
;
1692 struct _RTL_TRACE_SEGMENT
*NextSegment
;
1697 } RTL_TRACE_SEGMENT
, *PRTL_TRACE_SEGMENT
;
1699 typedef struct _RTL_TRACE_ENUMERATE
1701 struct _RTL_TRACE_DATABASE
*Database
;
1703 struct _RTL_TRACE_BLOCK
*Block
;
1704 } RTL_TRACE_ENUMERATE
, * PRTL_TRACE_ENUMERATE
;
1707 // Auto-Managed Rtl* String Buffer
1709 typedef struct _RTL_BUFFER
1712 PUCHAR StaticBuffer
;
1715 SIZE_T ReservedForAllocatedSize
;
1716 PVOID ReservedForIMalloc
;
1717 } RTL_BUFFER
, *PRTL_BUFFER
;
1719 typedef struct _RTL_UNICODE_STRING_BUFFER
1721 UNICODE_STRING String
;
1722 RTL_BUFFER ByteBuffer
;
1723 WCHAR MinimumStaticBufferForTerminalNul
;
1724 } RTL_UNICODE_STRING_BUFFER
, *PRTL_UNICODE_STRING_BUFFER
;
1726 #ifndef NTOS_MODE_USER
1729 // Message Resource Entry, Block and Data
1731 typedef struct _MESSAGE_RESOURCE_ENTRY
1735 UCHAR Text
[ANYSIZE_ARRAY
];
1736 } MESSAGE_RESOURCE_ENTRY
, *PMESSAGE_RESOURCE_ENTRY
;
1738 typedef struct _MESSAGE_RESOURCE_BLOCK
1742 ULONG OffsetToEntries
;
1743 } MESSAGE_RESOURCE_BLOCK
, *PMESSAGE_RESOURCE_BLOCK
;
1745 typedef struct _MESSAGE_RESOURCE_DATA
1747 ULONG NumberOfBlocks
;
1748 MESSAGE_RESOURCE_BLOCK Blocks
[ANYSIZE_ARRAY
];
1749 } MESSAGE_RESOURCE_DATA
, *PMESSAGE_RESOURCE_DATA
;
1751 #endif /* !NTOS_MODE_USER */
1753 #ifdef NTOS_MODE_USER
1760 #define CONST_VTBL const
1770 typedef struct _RTL_MEMORY_STREAM RTL_MEMORY_STREAM
, *PRTL_MEMORY_STREAM
;
1773 (NTAPI
*PRTL_MEMORY_STREAM_FINAL_RELEASE_ROUTINE
)(
1774 _In_ PRTL_MEMORY_STREAM Stream
1777 struct _RTL_MEMORY_STREAM
1779 CONST_VTBL
struct IStreamVtbl
*Vtbl
;
1785 PRTL_MEMORY_STREAM_FINAL_RELEASE_ROUTINE FinalRelease
;
1786 HANDLE ProcessHandle
;
1789 #endif /* NTOS_MODE_USER */
1795 #endif /* !_RTLTYPES_H */