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
;
851 // Pfx* routines' table structures
853 typedef struct _PREFIX_TABLE_ENTRY
857 struct _PREFIX_TABLE_ENTRY
*NextPrefixTree
;
858 RTL_SPLAY_LINKS Links
;
860 } PREFIX_TABLE_ENTRY
, *PPREFIX_TABLE_ENTRY
;
862 typedef struct _PREFIX_TABLE
866 PPREFIX_TABLE_ENTRY NextPrefixTree
;
867 } PREFIX_TABLE
, *PPREFIX_TABLE
;
870 // Time Structure for RTL Time calls
872 typedef struct _TIME_FIELDS
882 } TIME_FIELDS
, *PTIME_FIELDS
;
885 // Activation Context Frame
887 typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
889 struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
*Previous
;
890 PACTIVATION_CONTEXT ActivationContext
;
892 } RTL_ACTIVATION_CONTEXT_STACK_FRAME
, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME
;
894 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
898 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
899 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
;
901 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
905 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
910 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
;
912 typedef RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
;
913 typedef PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
;
915 typedef struct _RTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
917 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
919 PVOID ActivationStackBackTrace
[8];
920 } RTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
, *PRTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
;
922 typedef struct _ACTIVATION_CONTEXT_DATA
928 ULONG DefaultTocOffset
;
929 ULONG ExtendedTocOffset
;
930 ULONG AssemblyRosterOffset
;
932 } ACTIVATION_CONTEXT_DATA
, *PACTIVATION_CONTEXT_DATA
;
934 typedef struct _ACTIVATION_CONTEXT_STACK_FRAMELIST
940 ULONG NotFramesInUse
;
941 RTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME Frames
[32];
942 } ACTIVATION_CONTEXT_STACK_FRAMELIST
, *PACTIVATION_CONTEXT_STACK_FRAMELIST
;
944 #endif /* NTOS_MODE_USER */
946 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
947 typedef struct _ACTIVATION_CONTEXT_STACK
949 struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
*ActiveFrame
;
950 LIST_ENTRY FrameListCache
;
952 ULONG NextCookieSequenceNumber
;
954 } ACTIVATION_CONTEXT_STACK
, *PACTIVATION_CONTEXT_STACK
;
956 typedef struct _ACTIVATION_CONTEXT_STACK
959 ULONG NextCookieSequenceNumber
;
960 struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
*ActiveFrame
;
961 LIST_ENTRY FrameListCache
;
962 } ACTIVATION_CONTEXT_STACK
, *PACTIVATION_CONTEXT_STACK
;
971 ACCESS_MASK AccessMask
;
975 // Information Structures for RTL Debug Functions
977 typedef struct _RTL_PROCESS_MODULE_INFORMATION
984 USHORT LoadOrderIndex
;
985 USHORT InitOrderIndex
;
987 USHORT OffsetToFileName
;
988 CHAR FullPathName
[256];
989 } RTL_PROCESS_MODULE_INFORMATION
, *PRTL_PROCESS_MODULE_INFORMATION
;
991 typedef struct _RTL_PROCESS_MODULES
993 ULONG NumberOfModules
;
994 RTL_PROCESS_MODULE_INFORMATION Modules
[1];
995 } RTL_PROCESS_MODULES
, *PRTL_PROCESS_MODULES
;
997 typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
1000 RTL_PROCESS_MODULE_INFORMATION BaseInfo
;
1001 ULONG ImageCheckSum
;
1002 ULONG TimeDateStamp
;
1004 } RTL_PROCESS_MODULE_INFORMATION_EX
, *PRTL_PROCESS_MODULE_INFORMATION_EX
;
1006 typedef struct _RTL_HEAP_TAG_INFO
1008 ULONG NumberOfAllocations
;
1009 ULONG NumberOfFrees
;
1010 SIZE_T BytesAllocated
;
1011 } RTL_HEAP_TAG_INFO
, *PRTL_HEAP_TAG_INFO
;
1013 typedef struct _RTL_HEAP_USAGE_ENTRY
1015 struct _RTL_HEAP_USAGE_ENTRY
*Next
;
1018 USHORT AllocatorBackTraceIndex
;
1020 } RTL_HEAP_USAGE_ENTRY
, *PRTL_HEAP_USAGE_ENTRY
;
1022 typedef struct _RTL_HEAP_USAGE
1025 SIZE_T BytesAllocated
;
1026 SIZE_T BytesCommitted
;
1027 SIZE_T BytesReserved
;
1028 SIZE_T BytesReservedMaximum
;
1029 PRTL_HEAP_USAGE_ENTRY Entries
;
1030 PRTL_HEAP_USAGE_ENTRY AddedEntries
;
1031 PRTL_HEAP_USAGE_ENTRY RemovedEntries
;
1032 ULONG_PTR Reserved
[8];
1033 } RTL_HEAP_USAGE
, *PRTL_HEAP_USAGE
;
1035 typedef struct _RTL_HEAP_WALK_ENTRY
1039 UCHAR OverheadBytes
;
1048 USHORT AllocatorBackTraceIndex
;
1053 ULONG_PTR CommittedSize
;
1054 ULONG_PTR UnCommittedSize
;
1059 } RTL_HEAP_WALK_ENTRY
, *PRTL_HEAP_WALK_ENTRY
;
1061 typedef struct _RTL_HEAP_ENTRY
1065 USHORT AllocatorBackTraceIndex
;
1075 SIZE_T CommittedSize
;
1079 } RTL_HEAP_ENTRY
, *PRTL_HEAP_ENTRY
;
1081 typedef struct _RTL_HEAP_TAG
1083 ULONG NumberOfAllocations
;
1084 ULONG NumberOfFrees
;
1085 SIZE_T BytesAllocated
;
1087 USHORT CreatorBackTraceIndex
;
1089 } RTL_HEAP_TAG
, *PRTL_HEAP_TAG
;
1091 typedef struct _RTL_HEAP_INFORMATION
1095 USHORT EntryOverhead
;
1096 USHORT CreatorBackTraceIndex
;
1097 SIZE_T BytesAllocated
;
1098 SIZE_T BytesCommitted
;
1100 ULONG NumberOfEntries
;
1101 ULONG NumberOfPseudoTags
;
1102 ULONG PseudoTagGranularity
;
1105 PRTL_HEAP_ENTRY Entries
;
1106 } RTL_HEAP_INFORMATION
, *PRTL_HEAP_INFORMATION
;
1108 typedef struct _RTL_PROCESS_HEAPS
1110 ULONG NumberOfHeaps
;
1111 RTL_HEAP_INFORMATION Heaps
[1];
1112 } RTL_PROCESS_HEAPS
, *PRTL_PROCESS_HEAPS
;
1114 typedef struct _RTL_PROCESS_LOCK_INFORMATION
1118 USHORT CreatorBackTraceIndex
;
1119 ULONG OwnerThreadId
;
1121 ULONG ContentionCount
;
1123 ULONG RecursionCount
;
1124 ULONG NumberOfSharedWaiters
;
1125 ULONG NumberOfExclusiveWaiters
;
1126 } RTL_PROCESS_LOCK_INFORMATION
, *PRTL_PROCESS_LOCK_INFORMATION
;
1128 typedef struct _RTL_PROCESS_LOCKS
1130 ULONG NumberOfLocks
;
1131 RTL_PROCESS_LOCK_INFORMATION Locks
[1];
1132 } RTL_PROCESS_LOCKS
, *PRTL_PROCESS_LOCKS
;
1134 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
1136 PVOID SymbolicBackTrace
;
1140 PVOID BackTrace
[16];
1141 } RTL_PROCESS_BACKTRACE_INFORMATION
, *PRTL_PROCESS_BACKTRACE_INFORMATION
;
1143 typedef struct _RTL_PROCESS_BACKTRACES
1145 ULONG CommittedMemory
;
1146 ULONG ReservedMemory
;
1147 ULONG NumberOfBackTraceLookups
;
1148 ULONG NumberOfBackTraces
;
1149 RTL_PROCESS_BACKTRACE_INFORMATION BackTraces
[1];
1150 } RTL_PROCESS_BACKTRACES
, *PRTL_PROCESS_BACKTRACES
;
1152 typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
1156 UCHAR OptionData
[1];
1158 // Option array continues below
1160 } RTL_PROCESS_VERIFIER_OPTIONS
, *PRTL_PROCESS_VERIFIER_OPTIONS
;
1162 typedef struct _RTL_DEBUG_INFORMATION
1164 HANDLE SectionHandleClient
;
1165 PVOID ViewBaseClient
;
1166 PVOID ViewBaseTarget
;
1167 ULONG ViewBaseDelta
;
1168 HANDLE EventPairClient
;
1169 PVOID EventPairTarget
;
1170 HANDLE TargetProcessId
;
1171 HANDLE TargetThreadHandle
;
1178 PRTL_PROCESS_MODULES Modules
;
1179 PRTL_PROCESS_MODULE_INFORMATION_EX ModulesEx
;
1181 PRTL_PROCESS_BACKTRACES BackTraces
;
1182 PRTL_PROCESS_HEAPS Heaps
;
1183 PRTL_PROCESS_LOCKS Locks
;
1184 HANDLE SpecificHeap
;
1185 HANDLE TargetProcessHandle
;
1186 RTL_PROCESS_VERIFIER_OPTIONS VerifierOptions
;
1188 HANDLE CriticalSectionHandle
;
1189 HANDLE CriticalSectionOwnerThread
;
1191 } RTL_DEBUG_INFORMATION
, *PRTL_DEBUG_INFORMATION
;
1194 // Unload Event Trace Structure for RtlGetUnloadEventTrace
1196 typedef struct _RTL_UNLOAD_EVENT_TRACE
1201 ULONG TimeDateStamp
;
1203 WCHAR ImageName
[32];
1204 } RTL_UNLOAD_EVENT_TRACE
, *PRTL_UNLOAD_EVENT_TRACE
;
1207 // RTL Handle Structures
1209 typedef struct _RTL_HANDLE_TABLE_ENTRY
1214 struct _RTL_HANDLE_TABLE_ENTRY
*NextFree
;
1216 } RTL_HANDLE_TABLE_ENTRY
, *PRTL_HANDLE_TABLE_ENTRY
;
1218 typedef struct _RTL_HANDLE_TABLE
1220 ULONG MaximumNumberOfHandles
;
1221 ULONG SizeOfHandleTableEntry
;
1223 PRTL_HANDLE_TABLE_ENTRY FreeHandles
;
1224 PRTL_HANDLE_TABLE_ENTRY CommittedHandles
;
1225 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles
;
1226 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles
;
1227 } RTL_HANDLE_TABLE
, *PRTL_HANDLE_TABLE
;
1229 #ifdef NTOS_MODE_USER
1233 typedef struct _EXCEPTION_REGISTRATION_RECORD
1235 struct _EXCEPTION_REGISTRATION_RECORD
*Next
;
1236 PEXCEPTION_ROUTINE Handler
;
1237 } EXCEPTION_REGISTRATION_RECORD
, *PEXCEPTION_REGISTRATION_RECORD
;
1238 #endif /* NTOS_MODE_USER */
1241 // Current Directory Structures
1243 typedef struct _CURDIR
1245 UNICODE_STRING DosPath
;
1249 typedef struct _RTLP_CURDIR_REF
1253 } RTLP_CURDIR_REF
, *PRTLP_CURDIR_REF
;
1255 typedef struct _RTL_RELATIVE_NAME_U
1257 UNICODE_STRING RelativeName
;
1258 HANDLE ContainingDirectory
;
1259 PRTLP_CURDIR_REF CurDirRef
;
1260 } RTL_RELATIVE_NAME_U
, *PRTL_RELATIVE_NAME_U
;
1262 typedef struct _RTL_DRIVE_LETTER_CURDIR
1267 UNICODE_STRING DosPath
;
1268 } RTL_DRIVE_LETTER_CURDIR
, *PRTL_DRIVE_LETTER_CURDIR
;
1270 typedef struct _RTL_PERTHREAD_CURDIR
1272 PRTL_DRIVE_LETTER_CURDIR CurrentDirectories
;
1273 PUNICODE_STRING ImageName
;
1275 } RTL_PERTHREAD_CURDIR
, *PRTL_PERTHREAD_CURDIR
;
1278 // Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
1280 typedef struct _RTL_ACQUIRE_STATE
1283 HANDLE OldImpersonationToken
;
1284 PTOKEN_PRIVILEGES OldPrivileges
;
1285 PTOKEN_PRIVILEGES NewPrivileges
;
1287 UCHAR OldPrivBuffer
[1024];
1288 } RTL_ACQUIRE_STATE
, *PRTL_ACQUIRE_STATE
;
1290 #ifndef NTOS_MODE_USER
1293 // RTL Critical Section Structures
1295 typedef struct _RTL_CRITICAL_SECTION_DEBUG
1298 USHORT CreatorBackTraceIndex
;
1299 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
1300 LIST_ENTRY ProcessLocksList
;
1302 ULONG ContentionCount
;
1304 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
1306 typedef struct _RTL_CRITICAL_SECTION
1308 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
1310 LONG RecursionCount
;
1311 HANDLE OwningThread
;
1312 HANDLE LockSemaphore
;
1313 ULONG_PTR SpinCount
;
1314 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
1316 #endif /* !NTOS_MODE_USER */
1319 // RTL Private Heap Structures
1321 typedef struct _HEAP_LOCK
1325 RTL_CRITICAL_SECTION CriticalSection
;
1326 #ifndef NTOS_MODE_USER
1329 UCHAR Padding
[0x68]; /* Max ERESOURCE size for x64 build. Needed because RTL is built only once */
1331 } HEAP_LOCK
, *PHEAP_LOCK
;
1334 // RTL Range List Structures
1336 typedef struct _RTL_RANGE_LIST
1338 LIST_ENTRY ListHead
;
1342 } RTL_RANGE_LIST
, *PRTL_RANGE_LIST
;
1344 typedef struct _RTL_RANGE
1352 } RTL_RANGE
, *PRTL_RANGE
;
1354 typedef struct _RANGE_LIST_ITERATOR
1356 PLIST_ENTRY RangeListHead
;
1357 PLIST_ENTRY MergedHead
;
1360 } RTL_RANGE_LIST_ITERATOR
, *PRTL_RANGE_LIST_ITERATOR
;
1365 #define RTL_RESOURCE_FLAG_LONG_TERM ((ULONG)0x00000001)
1367 typedef struct _RTL_RESOURCE
1369 RTL_CRITICAL_SECTION Lock
;
1370 HANDLE SharedSemaphore
;
1371 ULONG SharedWaiters
;
1372 HANDLE ExclusiveSemaphore
;
1373 ULONG ExclusiveWaiters
;
1375 HANDLE OwningThread
;
1378 } RTL_RESOURCE
, *PRTL_RESOURCE
;
1381 // Structures for RtlCreateUserProcess
1383 typedef struct _RTL_USER_PROCESS_PARAMETERS
1385 ULONG MaximumLength
;
1389 HANDLE ConsoleHandle
;
1391 HANDLE StandardInput
;
1392 HANDLE StandardOutput
;
1393 HANDLE StandardError
;
1394 CURDIR CurrentDirectory
;
1395 UNICODE_STRING DllPath
;
1396 UNICODE_STRING ImagePathName
;
1397 UNICODE_STRING CommandLine
;
1405 ULONG FillAttribute
;
1407 ULONG ShowWindowFlags
;
1408 UNICODE_STRING WindowTitle
;
1409 UNICODE_STRING DesktopInfo
;
1410 UNICODE_STRING ShellInfo
;
1411 UNICODE_STRING RuntimeData
;
1412 RTL_DRIVE_LETTER_CURDIR CurrentDirectories
[RTL_MAX_DRIVE_LETTERS
];
1413 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
1414 SIZE_T EnvironmentSize
;
1416 #if (NTDDI_VERSION >= NTDDI_WIN7)
1417 SIZE_T EnvironmentVersion
;
1419 } RTL_USER_PROCESS_PARAMETERS
, *PRTL_USER_PROCESS_PARAMETERS
;
1421 typedef struct _RTL_USER_PROCESS_INFORMATION
1424 HANDLE ProcessHandle
;
1425 HANDLE ThreadHandle
;
1427 SECTION_IMAGE_INFORMATION ImageInformation
;
1428 } RTL_USER_PROCESS_INFORMATION
, *PRTL_USER_PROCESS_INFORMATION
;
1430 #if (NTDDI_VERSION >= NTDDI_WIN7)
1432 typedef enum _RTL_UMS_SCHEDULER_REASON
1434 UmsSchedulerStartup
= 0,
1435 UmsSchedulerThreadBlocked
= 1,
1436 UmsSchedulerThreadYield
= 2,
1437 } RTL_UMS_SCHEDULER_REASON
, *PRTL_UMS_SCHEDULER_REASON
;
1439 typedef enum _RTL_UMSCTX_FLAGS
1441 UMSCTX_SCHEDULED_THREAD_BIT
= 0,
1442 #if (NTDDI_VERSION < NTDDI_WIN8)
1443 UMSCTX_HAS_QUANTUM_REQ_BIT
,
1444 UMSCTX_HAS_AFFINITY_REQ_BIT
,
1445 UMSCTX_HAS_PRIORITY_REQ_BIT
,
1447 UMSCTX_SUSPENDED_BIT
,
1448 UMSCTX_VOLATILE_CONTEXT_BIT
,
1449 UMSCTX_TERMINATED_BIT
,
1450 UMSCTX_DEBUG_ACTIVE_BIT
,
1451 UMSCTX_RUNNING_ON_SELF_THREAD_BIT
,
1452 UMSCTX_DENY_RUNNING_ON_SELF_THREAD_BIT
1454 } RTL_UMSCTX_FLAGS
, *PRTL_UMSCTX_FLAGS
;
1456 #define UMSCTX_SCHEDULED_THREAD_MASK (1 << UMSCTX_SCHEDULED_THREAD_BIT)
1457 #define UMSCTX_SUSPENDED_MASK (1 << UMSCTX_SUSPENDED_BIT)
1458 #define UMSCTX_VOLATILE_CONTEXT_MASK (1 << UMSCTX_VOLATILE_CONTEXT_BIT)
1459 #define UMSCTX_TERMINATED_MASK (1 << UMSCTX_TERMINATED_BIT)
1460 #define UMSCTX_DEBUG_ACTIVE_MASK (1 << UMSCTX_DEBUG_ACTIVE_BIT)
1461 #define UMSCTX_RUNNING_ON_SELF_THREAD_MASK (1 << UMSCTX_RUNNING_ON_SELF_THREAD_BIT)
1462 #define UMSCTX_DENY_RUNNING_ON_SELF_THREAD_MASK (1 << UMSCTX_DENY_RUNNING_ON_SELF_THREAD_BIT)
1467 typedef struct DECLSPEC_ALIGN(16) _RTL_UMS_CONTEXT
1469 SINGLE_LIST_ENTRY Link
;
1477 ULONG ScheduledThread
: 1;
1478 #if (NTDDI_VERSION < NTDDI_WIN8)
1479 ULONG HasQuantumReq
: 1;
1480 ULONG HasAffinityReq
: 1;
1481 ULONG HasPriorityReq
: 1;
1483 ULONG Suspended
: 1;
1484 ULONG VolatileContext
: 1;
1485 ULONG Terminated
: 1;
1486 ULONG DebugActive
: 1;
1487 ULONG RunningOnSelfThread
: 1;
1488 ULONG DenyRunningOnSelfThread
: 1;
1489 #if (NTDDI_VERSION < NTDDI_WIN8)
1490 ULONG ReservedFlags
: 22;
1499 #if (NTDDI_VERSION >= NTDDI_WIN8)
1500 ULONG64 KernelUpdateLock
: 2;
1502 ULONG64 KernelUpdateLock
: 1;
1503 ULONG64 Reserved
: 1;
1505 ULONG64 PrimaryClientID
: 62;
1507 ULONG64 ContextLock
;
1509 #if (NTDDI_VERSION < NTDDI_WIN8)
1510 ULONG64 QuantumValue
;
1511 GROUP_AFFINITY AffinityMask
;
1514 struct _RTL_UMS_CONTEXT
* PrimaryUmsContext
;
1516 ULONG KernelYieldCount
;
1517 ULONG MixedYieldCount
;
1519 } RTL_UMS_CONTEXT
, *PRTL_UMS_CONTEXT
;
1520 #endif // #if (NTDDI_VERSION >= NTDDI_WIN7)
1523 // RTL Atom Table Structures
1525 typedef struct _RTL_ATOM_TABLE_ENTRY
1527 struct _RTL_ATOM_TABLE_ENTRY
*HashLink
;
1530 USHORT ReferenceCount
;
1534 } RTL_ATOM_TABLE_ENTRY
, *PRTL_ATOM_TABLE_ENTRY
;
1536 typedef struct _RTL_ATOM_TABLE
1541 #ifdef NTOS_MODE_USER
1542 RTL_CRITICAL_SECTION CriticalSection
;
1544 FAST_MUTEX FastMutex
;
1549 #ifdef NTOS_MODE_USER
1550 RTL_HANDLE_TABLE RtlHandleTable
;
1552 PHANDLE_TABLE ExHandleTable
;
1555 ULONG NumberOfBuckets
;
1556 PRTL_ATOM_TABLE_ENTRY Buckets
[1];
1557 } RTL_ATOM_TABLE
, *PRTL_ATOM_TABLE
;
1561 // System Time and Timezone Structures
1563 typedef struct _SYSTEMTIME
1572 USHORT wMilliseconds
;
1573 } SYSTEMTIME
, *PSYSTEMTIME
, *LPSYSTEMTIME
;
1575 typedef struct _TIME_ZONE_INFORMATION
1578 WCHAR StandardName
[32];
1579 SYSTEMTIME StandardDate
;
1581 WCHAR DaylightName
[32];
1582 SYSTEMTIME DaylightDate
;
1584 } TIME_ZONE_INFORMATION
, *PTIME_ZONE_INFORMATION
, *LPTIME_ZONE_INFORMATION
;
1585 #endif /* !_WINBASE_ */
1588 // Native version of Timezone Structure
1590 typedef LPTIME_ZONE_INFORMATION PRTL_TIME_ZONE_INFORMATION
;
1595 typedef struct _RTL_PATCH_HEADER
1597 LIST_ENTRY PatchList
;
1598 PVOID PatchImageBase
;
1599 struct _RTL_PATCH_HEADER
*NextPath
;
1602 struct _HOTPATCH_HEADER
*HotpatchHeader
;
1603 UNICODE_STRING TargetDllName
;
1604 PVOID TargetDllBase
;
1605 PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry
;
1606 PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry
;
1607 struct _SYSTEM_HOTPATCH_CODE_INFORMATION
*CodeInfo
;
1608 } RTL_PATCH_HEADER
, *PRTL_PATCH_HEADER
;
1611 // Header for NLS Files
1613 typedef struct _NLS_FILE_HEADER
1617 USHORT MaximumCharacterSize
;
1619 USHORT UniDefaultChar
;
1620 USHORT TransDefaultChar
;
1621 USHORT TransUniDefaultChar
;
1622 UCHAR LeadByte
[MAXIMUM_LEADBYTES
];
1623 } NLS_FILE_HEADER
, *PNLS_FILE_HEADER
;
1628 typedef struct _RTL_STACK_TRACE_ENTRY
1630 struct _RTL_STACK_TRACE_ENTRY
*HashChain
;
1634 PVOID BackTrace
[32];
1635 } RTL_STACK_TRACE_ENTRY
, *PRTL_STACK_TRACE_ENTRY
;
1637 typedef struct _STACK_TRACE_DATABASE
1639 RTL_CRITICAL_SECTION CriticalSection
;
1640 } STACK_TRACE_DATABASE
, *PSTACK_TRACE_DATABASE
;
1646 typedef ULONG (NTAPI
*RTL_TRACE_HASH_FUNCTION
) (ULONG Count
, PVOID
*Trace
);
1648 typedef struct _RTL_TRACE_BLOCK
1656 struct _RTL_TRACE_BLOCK
*Next
;
1658 } RTL_TRACE_BLOCK
, *PRTL_TRACE_BLOCK
;
1660 typedef struct _RTL_TRACE_DATABASE
1665 struct _RTL_TRACE_SEGMENT
*SegmentList
;
1669 #ifdef NTOS_MODE_USER
1670 RTL_CRITICAL_SECTION Lock
;
1674 KSPIN_LOCK SpinLock
;
1675 FAST_MUTEX FastMutex
;
1679 struct _RTL_TRACE_BLOCK
**Buckets
;
1680 RTL_TRACE_HASH_FUNCTION HashFunction
;
1683 ULONG HashCounter
[16];
1684 } RTL_TRACE_DATABASE
, *PRTL_TRACE_DATABASE
;
1686 typedef struct _RTL_TRACE_SEGMENT
1689 struct _RTL_TRACE_DATABASE
*Database
;
1690 struct _RTL_TRACE_SEGMENT
*NextSegment
;
1695 } RTL_TRACE_SEGMENT
, *PRTL_TRACE_SEGMENT
;
1697 typedef struct _RTL_TRACE_ENUMERATE
1699 struct _RTL_TRACE_DATABASE
*Database
;
1701 struct _RTL_TRACE_BLOCK
*Block
;
1702 } RTL_TRACE_ENUMERATE
, * PRTL_TRACE_ENUMERATE
;
1705 // Auto-Managed Rtl* String Buffer
1707 typedef struct _RTL_BUFFER
1710 PUCHAR StaticBuffer
;
1713 SIZE_T ReservedForAllocatedSize
;
1714 PVOID ReservedForIMalloc
;
1715 } RTL_BUFFER
, *PRTL_BUFFER
;
1717 typedef struct _RTL_UNICODE_STRING_BUFFER
1719 UNICODE_STRING String
;
1720 RTL_BUFFER ByteBuffer
;
1721 WCHAR MinimumStaticBufferForTerminalNul
;
1722 } RTL_UNICODE_STRING_BUFFER
, *PRTL_UNICODE_STRING_BUFFER
;
1724 #ifndef NTOS_MODE_USER
1727 // Message Resource Entry, Block and Data
1729 typedef struct _MESSAGE_RESOURCE_ENTRY
1733 UCHAR Text
[ANYSIZE_ARRAY
];
1734 } MESSAGE_RESOURCE_ENTRY
, *PMESSAGE_RESOURCE_ENTRY
;
1736 typedef struct _MESSAGE_RESOURCE_BLOCK
1740 ULONG OffsetToEntries
;
1741 } MESSAGE_RESOURCE_BLOCK
, *PMESSAGE_RESOURCE_BLOCK
;
1743 typedef struct _MESSAGE_RESOURCE_DATA
1745 ULONG NumberOfBlocks
;
1746 MESSAGE_RESOURCE_BLOCK Blocks
[ANYSIZE_ARRAY
];
1747 } MESSAGE_RESOURCE_DATA
, *PMESSAGE_RESOURCE_DATA
;
1749 #endif /* !NTOS_MODE_USER */
1751 #ifdef NTOS_MODE_USER
1758 #define CONST_VTBL const
1768 typedef struct _RTL_MEMORY_STREAM RTL_MEMORY_STREAM
, *PRTL_MEMORY_STREAM
;
1771 (NTAPI
*PRTL_MEMORY_STREAM_FINAL_RELEASE_ROUTINE
)(
1772 _In_ PRTL_MEMORY_STREAM Stream
1775 struct _RTL_MEMORY_STREAM
1777 CONST_VTBL
struct IStreamVtbl
*Vtbl
;
1783 PRTL_MEMORY_STREAM_FINAL_RELEASE_ROUTINE FinalRelease
;
1784 HANDLE ProcessHandle
;
1787 #endif /* NTOS_MODE_USER */
1793 #endif /* !_RTLTYPES_H */