3 Copyright (c) Alex Ionescu. All rights reserved.
11 Type definitions for the Run-Time Library
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
30 // Maximum Atom Length
32 #define RTL_MAXIMUM_ATOM_LENGTH 255
35 // Process Parameters Flags
37 #define RTL_USER_PROCESS_PARAMETERS_NORMALIZED 0x01
38 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_USER 0x02
39 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_SERVER 0x04
40 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_KERNEL 0x08
41 #define RTL_USER_PROCESS_PARAMETERS_UNKNOWN 0x10
42 #define RTL_USER_PROCESS_PARAMETERS_RESERVE_1MB 0x20
43 #define RTL_USER_PROCESS_PARAMETERS_DISABLE_HEAP_CHECKS 0x100
44 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_1 0x200
45 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_2 0x400
46 #define RTL_USER_PROCESS_PARAMETERS_PRIVATE_DLL_PATH 0x1000
47 #define RTL_USER_PROCESS_PARAMETERS_LOCAL_DLL_PATH 0x2000
48 #define RTL_USER_PROCESS_PARAMETERS_NX 0x20000
53 #define EXCEPTION_CHAIN_END ((PEXCEPTION_REGISTRATION_RECORD)-1)
54 #define EXCEPTION_UNWINDING 0x02
55 #define EXCEPTION_EXIT_UNWIND 0x04
56 #define EXCEPTION_STACK_INVALID 0x08
57 #define EXCEPTION_UNWIND (EXCEPTION_UNWINDING + EXCEPTION_EXIT_UNWIND)
58 #define EXCEPTION_NESTED_CALL 0x10
59 #define EXCEPTION_TARGET_UNWIND 0x20
60 #define EXCEPTION_COLLIDED_UNWIND 0x20
63 // Range and Range List Flags
65 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
66 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
68 #define RTL_RANGE_SHARED 0x01
69 #define RTL_RANGE_CONFLICT 0x02
72 // Activation Context Frame Flags
74 #define RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_FORMAT_WHISTLER \
80 #if !defined(NTOS_MODE_USER) && !defined(_NTIFS_)
81 #define HEAP_NO_SERIALIZE 0x00000001
82 #define HEAP_GROWABLE 0x00000002
83 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
84 #define HEAP_ZERO_MEMORY 0x00000008
85 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
86 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
87 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
88 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
89 #define HEAP_CREATE_ALIGN_16 0x00010000
90 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
91 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
95 // User-Defined Heap Flags and Classes
97 #define HEAP_SETTABLE_USER_VALUE 0x00000100
98 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
99 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
100 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
101 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
102 #define HEAP_CLASS_0 0x00000000
103 #define HEAP_CLASS_1 0x00001000
104 #define HEAP_CLASS_2 0x00002000
105 #define HEAP_CLASS_3 0x00003000
106 #define HEAP_CLASS_4 0x00004000
107 #define HEAP_CLASS_5 0x00005000
108 #define HEAP_CLASS_6 0x00006000
109 #define HEAP_CLASS_7 0x00007000
110 #define HEAP_CLASS_8 0x00008000
111 #define HEAP_CLASS_MASK 0x0000F000
114 // Internal HEAP Structure Flags
116 #define HEAP_FLAG_PAGE_ALLOCS 0x01000000
117 #define HEAP_PROTECTION_ENABLED 0x02000000
118 #define HEAP_BREAK_WHEN_OUT_OF_VM 0x04000000
119 #define HEAP_NO_ALIGNMENT 0x08000000
120 #define HEAP_CAPTURE_STACK_BACKTRACES 0x08000000
121 #define HEAP_SKIP_VALIDATION_CHECKS 0x10000000
122 #define HEAP_VALIDATE_ALL_ENABLED 0x20000000
123 #define HEAP_VALIDATE_PARAMETERS_ENABLED 0x40000000
124 #define HEAP_LOCK_USER_ALLOCATED 0x80000000
127 // Heap Validation Flags
129 #define HEAP_CREATE_VALID_MASK \
130 (HEAP_NO_SERIALIZE | \
132 HEAP_GENERATE_EXCEPTIONS | \
134 HEAP_REALLOC_IN_PLACE_ONLY | \
135 HEAP_TAIL_CHECKING_ENABLED | \
136 HEAP_FREE_CHECKING_ENABLED | \
137 HEAP_DISABLE_COALESCE_ON_FREE | \
139 HEAP_CREATE_ALIGN_16 | \
140 HEAP_CREATE_ENABLE_TRACING | \
141 HEAP_CREATE_ENABLE_EXECUTE)
143 C_ASSERT(HEAP_CREATE_VALID_MASK
== 0x0007F0FF);
149 #define RTL_REGISTRY_ABSOLUTE 0
150 #define RTL_REGISTRY_SERVICES 1
151 #define RTL_REGISTRY_CONTROL 2
152 #define RTL_REGISTRY_WINDOWS_NT 3
153 #define RTL_REGISTRY_DEVICEMAP 4
154 #define RTL_REGISTRY_USER 5
155 #define RTL_REGISTRY_MAXIMUM 6
156 #define RTL_REGISTRY_HANDLE 0x40000000
157 #define RTL_REGISTRY_OPTIONAL 0x80000000
158 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
159 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
160 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
161 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
162 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
163 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
164 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
169 #define VER_MINORVERSION 0x0000001
170 #define VER_MAJORVERSION 0x0000002
171 #define VER_BUILDNUMBER 0x0000004
172 #define VER_PLATFORMID 0x0000008
173 #define VER_SERVICEPACKMINOR 0x0000010
174 #define VER_SERVICEPACKMAJOR 0x0000020
175 #define VER_SUITENAME 0x0000040
176 #define VER_PRODUCT_TYPE 0x0000080
177 #define VER_PLATFORM_WIN32s 0
178 #define VER_PLATFORM_WIN32_WINDOWS 1
179 #define VER_PLATFORM_WIN32_NT 2
181 #define VER_GREATER 2
182 #define VER_GREATER_EQUAL 3
184 #define VER_LESS_EQUAL 5
187 #define VER_CONDITION_MASK 7
188 #define VER_NUM_BITS_PER_CONDITION_MASK 3
193 #define TIME_ZONE_ID_UNKNOWN 0
194 #define TIME_ZONE_ID_STANDARD 1
195 #define TIME_ZONE_ID_DAYLIGHT 2
198 // Maximum Path Length
203 // RTL Lock Type (Critical Section or Resource)
205 #define RTL_CRITSECT_TYPE 0
206 #define RTL_RESOURCE_TYPE 1
209 // RtlAcquirePrivileges Flags
211 #define RTL_ACQUIRE_PRIVILEGE_IMPERSONATE 1
212 #define RTL_ACQUIRE_PRIVILEGE_PROCESS 2
214 #ifdef NTOS_MODE_USER
217 // String Hash Algorithms
219 #define HASH_STRING_ALGORITHM_DEFAULT 0
220 #define HASH_STRING_ALGORITHM_X65599 1
221 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
224 // RtlDuplicateString Flags
226 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
227 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
230 // RtlFindCharInUnicodeString Flags
232 #define RTL_FIND_CHAR_IN_UNICODE_STRING_CASE_INSENSITIVE 4
237 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
238 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
239 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
244 #if defined(__cplusplus)
245 #define RTL_CONST_CAST(type) const_cast<type>
247 #define RTL_CONST_CAST(type) (type)
251 // Constant String Macro
253 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
255 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
256 sizeof(__SOURCE_STRING__), \
257 (__SOURCE_STRING__) \
261 // Constant Object Attributes Macro
263 #define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a) \
265 sizeof(OBJECT_ATTRIBUTES), \
267 RTL_CONST_CAST(PUNICODE_STRING)(n), \
273 #define RTL_INIT_OBJECT_ATTRIBUTES(n, a) \
274 RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
278 // Message Resource Flag
280 #define MESSAGE_RESOURCE_UNICODE 0x0001
283 #define MAXIMUM_LEADBYTES 12
288 #define RTL_DEBUG_QUERY_MODULES 0x01
289 #define RTL_DEBUG_QUERY_BACKTRACES 0x02
290 #define RTL_DEBUG_QUERY_HEAPS 0x04
291 #define RTL_DEBUG_QUERY_HEAP_TAGS 0x08
292 #define RTL_DEBUG_QUERY_HEAP_BLOCKS 0x10
293 #define RTL_DEBUG_QUERY_LOCKS 0x20
298 #define RTL_HANDLE_VALID 0x1
303 #define RTL_ATOM_IS_PINNED 0x1
306 // Critical section lock bits
308 #define CS_LOCK_BIT 0x1
309 #define CS_LOCK_BIT_V 0x0
310 #define CS_LOCK_WAITER_WOKEN 0x2
311 #define CS_LOCK_WAITER_INC 0x4
316 #ifdef NTOS_MODE_USER
317 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
318 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
321 // Constant String Macro
323 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
325 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
326 sizeof(__SOURCE_STRING__), \
327 (__SOURCE_STRING__) \
332 #ifdef NTOS_MODE_USER
335 // Table and Compare result types
337 typedef enum _TABLE_SEARCH_RESULT
343 } TABLE_SEARCH_RESULT
;
345 typedef enum _RTL_GENERIC_COMPARE_RESULTS
350 } RTL_GENERIC_COMPARE_RESULTS
;
357 typedef enum _RTL_PATH_TYPE
360 RtlPathTypeUncAbsolute
,
361 RtlPathTypeDriveAbsolute
,
362 RtlPathTypeDriveRelative
,
365 RtlPathTypeLocalDevice
,
366 RtlPathTypeRootLocalDevice
,
369 #ifndef NTOS_MODE_USER
372 // Callback function for RTL Timers or Registered Waits
375 (NTAPI
*WAITORTIMERCALLBACKFUNC
)(
377 BOOLEAN fTimerOrWaitFired
381 // Handler during Vectored RTL Exceptions
384 (NTAPI
*PVECTORED_EXCEPTION_HANDLER
)(
385 PEXCEPTION_POINTERS ExceptionPointers
389 // Worker Thread Callback for Rtl
392 (NTAPI
*WORKERCALLBACKFUNC
)(
399 // Handler during regular RTL Exceptions
401 typedef EXCEPTION_DISPOSITION
402 (NTAPI
*PEXCEPTION_ROUTINE
)(
403 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
404 IN PVOID EstablisherFrame
,
405 IN OUT
struct _CONTEXT
*ContextRecord
,
406 IN OUT PVOID DispatcherContext
410 // RTL Library Allocation/Free Routines
413 (NTAPI
*PRTL_ALLOCATE_STRING_ROUTINE
)(
418 (NTAPI
*PRTL_REALLOCATE_STRING_ROUTINE
)(
419 SIZE_T NumberOfBytes
,
425 (NTAPI
*PRTL_FREE_STRING_ROUTINE
)(
429 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine
;
430 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine
;
431 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine
;
436 // Callback for RTL Heap Enumeration
439 (NTAPI
*PHEAP_ENUMERATION_ROUTINE
)(
445 // Thread and Process Start Routines for RtlCreateUserThread/Process
447 typedef ULONG (NTAPI
*PTHREAD_START_ROUTINE
)(
452 (NTAPI
*PRTL_BASE_PROCESS_START_ROUTINE
)(
453 PTHREAD_START_ROUTINE StartAddress
,
458 // Declare empty structure definitions so that they may be referenced by
459 // routines before they are defined
461 struct _RTL_AVL_TABLE
;
462 struct _RTL_GENERIC_TABLE
;
466 // Routines and callbacks for the RTL AVL/Generic Table package
468 #if defined(NTOS_MODE_USER) || (!defined(NTOS_MODE_USER) && !defined(_NTIFS_))
470 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
)(
471 struct _RTL_AVL_TABLE
*Table
,
476 typedef RTL_GENERIC_COMPARE_RESULTS
477 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
478 struct _RTL_AVL_TABLE
*Table
,
483 typedef RTL_GENERIC_COMPARE_RESULTS
484 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
485 struct _RTL_GENERIC_TABLE
*Table
,
491 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
492 struct _RTL_GENERIC_TABLE
*Table
,
497 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
498 struct _RTL_GENERIC_TABLE
*Table
,
503 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
504 struct _RTL_AVL_TABLE
*Table
,
509 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
510 struct _RTL_AVL_TABLE
*Table
,
516 // RTL Query Registry callback
518 #ifdef NTOS_MODE_USER
520 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
524 IN ULONG ValueLength
,
526 IN PVOID EntryContext
531 // RTL Secure Memory callbacks
533 #ifdef NTOS_MODE_USER
535 (NTAPI
*PRTL_SECURE_MEMORY_CACHE_CALLBACK
)(
542 // RTL Range List callbacks
544 #ifdef NTOS_MODE_USER
546 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
)(
548 struct _RTL_RANGE
*Range
552 // Custom Heap Commit Routine for RtlCreateHeap
555 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
)(
557 IN OUT PVOID
*CommitAddress
,
558 IN OUT PSIZE_T CommitSize
562 // Version Info redefinitions
564 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW
;
565 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW
;
566 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW
;
567 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW
;
570 // Simple pointer definitions
572 typedef ACL_REVISION_INFORMATION
*PACL_REVISION_INFORMATION
;
573 typedef ACL_SIZE_INFORMATION
*PACL_SIZE_INFORMATION
;
576 // Parameters for RtlCreateHeap
577 // FIXME: Determine whether Length is SIZE_T or ULONG
579 typedef struct _RTL_HEAP_PARAMETERS
582 SIZE_T SegmentReserve
;
583 SIZE_T SegmentCommit
;
584 SIZE_T DeCommitFreeBlockThreshold
;
585 SIZE_T DeCommitTotalFreeThreshold
;
586 SIZE_T MaximumAllocationSize
;
587 SIZE_T VirtualMemoryThreshold
;
588 SIZE_T InitialCommit
;
589 SIZE_T InitialReserve
;
590 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
592 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
595 // RTL Bitmap structures
597 typedef struct _RTL_BITMAP
601 } RTL_BITMAP
, *PRTL_BITMAP
;
603 typedef struct _RTL_BITMAP_RUN
607 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
610 // RtlGenerateXxxName context
612 typedef struct _GENERATE_NAME_CONTEXT
615 BOOLEAN CheckSumInserted
;
618 ULONG ExtensionLength
;
619 WCHAR ExtensionBuffer
[4];
620 ULONG LastIndexValue
;
621 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
624 // RTL Splay and Balanced Links structures
626 typedef struct _RTL_SPLAY_LINKS
628 struct _RTL_SPLAY_LINKS
*Parent
;
629 struct _RTL_SPLAY_LINKS
*LeftChild
;
630 struct _RTL_SPLAY_LINKS
*RightChild
;
631 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
633 typedef struct _RTL_BALANCED_LINKS
635 struct _RTL_BALANCED_LINKS
*Parent
;
636 struct _RTL_BALANCED_LINKS
*LeftChild
;
637 struct _RTL_BALANCED_LINKS
*RightChild
;
640 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
643 // RTL Avl/Generic Tables
645 typedef struct _RTL_GENERIC_TABLE
647 PRTL_SPLAY_LINKS TableRoot
;
648 LIST_ENTRY InsertOrderList
;
649 PLIST_ENTRY OrderedPointer
;
650 ULONG WhichOrderedElement
;
651 ULONG NumberGenericTableElements
;
652 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
653 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
654 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
656 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
658 typedef struct _RTL_AVL_TABLE
660 RTL_BALANCED_LINKS BalancedRoot
;
661 PVOID OrderedPointer
;
662 ULONG WhichOrderedElement
;
663 ULONG NumberGenericTableElements
;
665 PRTL_BALANCED_LINKS RestartKey
;
667 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
668 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
669 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
671 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
674 // RTL Compression Buffer
676 typedef struct _COMPRESSED_DATA_INFO
{
677 USHORT CompressionFormatAndEngine
;
678 UCHAR CompressionUnitShift
;
682 USHORT NumberOfChunks
;
683 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
684 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
687 // RtlQueryRegistry Data
689 typedef struct _RTL_QUERY_REGISTRY_TABLE
691 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
698 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
701 // RTL Unicode Table Structures
703 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
707 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
708 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
709 RTL_SPLAY_LINKS Links
;
710 PUNICODE_STRING Prefix
;
711 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
713 typedef struct _UNICODE_PREFIX_TABLE
717 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
718 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
719 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
722 // Time Structure for RTL Time calls
724 typedef struct _TIME_FIELDS
734 } TIME_FIELDS
, *PTIME_FIELDS
;
737 // Activation Context
739 typedef PVOID PACTIVATION_CONTEXT
;
742 // Activation Context Frame
744 typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
746 struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
*Previous
;
747 PACTIVATION_CONTEXT ActivationContext
;
749 } RTL_ACTIVATION_CONTEXT_STACK_FRAME
,
750 *PRTL_ACTIVATION_CONTEXT_STACK_FRAME
;
752 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
756 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
761 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
,
762 *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
;
764 #if (NTDDI_VERSION >= NTDDI_WS03)
765 typedef struct _ACTIVATION_CONTEXT_STACK
767 PRTL_ACTIVATION_CONTEXT_STACK_FRAME ActiveFrame
;
768 LIST_ENTRY FrameListCache
;
770 ULONG NextCookieSequenceNumber
;
772 } ACTIVATION_CONTEXT_STACK
,
773 *PACTIVATION_CONTEXT_STACK
;
775 typedef struct _ACTIVATION_CONTEXT_STACK
778 ULONG NextCookieSequenceNumber
;
780 LIST_ENTRY FrameListCache
;
781 } ACTIVATION_CONTEXT_STACK
, *PACTIVATION_CONTEXT_STACK
;
792 ACCESS_MASK AccessMask
;
796 // Information Structures for RTL Debug Functions
798 typedef struct _RTL_PROCESS_MODULE_INFORMATION
805 USHORT LoadOrderIndex
;
806 USHORT InitOrderIndex
;
808 USHORT OffsetToFileName
;
809 CHAR FullPathName
[256];
810 } RTL_PROCESS_MODULE_INFORMATION
, *PRTL_PROCESS_MODULE_INFORMATION
;
812 typedef struct _RTL_PROCESS_MODULES
814 ULONG NumberOfModules
;
815 RTL_PROCESS_MODULE_INFORMATION Modules
[1];
816 } RTL_PROCESS_MODULES
, *PRTL_PROCESS_MODULES
;
818 typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
821 RTL_PROCESS_MODULE_INFORMATION BaseInfo
;
825 } RTL_PROCESS_MODULE_INFORMATION_EX
, *PRTL_PROCESS_MODULE_INFORMATION_EX
;
827 typedef struct _RTL_HEAP_TAG_INFO
829 ULONG NumberOfAllocations
;
831 ULONG BytesAllocated
;
832 } RTL_HEAP_TAG_INFO
, *PRTL_HEAP_TAG_INFO
;
834 typedef struct _RTL_HEAP_USAGE_ENTRY
836 struct _RTL_HEAP_USAGE_ENTRY
*Next
;
837 } RTL_HEAP_USAGE_ENTRY
, *PRTL_HEAP_USAGE_ENTRY
;
839 typedef struct _RTL_HEAP_USAGE
842 ULONG BytesAllocated
;
843 ULONG BytesCommitted
;
845 ULONG BytesReservedMaximum
;
846 PRTL_HEAP_USAGE_ENTRY Entries
;
847 PRTL_HEAP_USAGE_ENTRY AddedEntries
;
848 PRTL_HEAP_USAGE_ENTRY RemovedEntries
;
850 } RTL_HEAP_USAGE
, *PRTL_HEAP_USAGE
;
852 typedef struct _RTL_HEAP_INFORMATION
856 USHORT EntryOverhead
;
857 USHORT CreatorBackTraceIndex
;
858 ULONG BytesAllocated
;
859 ULONG BytesCommitted
;
861 ULONG NumberOfEntries
;
862 ULONG NumberOfPseudoTags
;
863 ULONG PseudoTagGranularity
;
867 } RTL_HEAP_INFORMATION
, *PRTL_HEAP_INFORMATION
;
869 typedef struct _RTL_PROCESS_HEAPS
872 RTL_HEAP_INFORMATION Heaps
[1];
873 } RTL_PROCESS_HEAPS
, *PRTL_PROCESS_HEAPS
;
875 typedef struct _RTL_PROCESS_LOCK_INFORMATION
879 USHORT CreatorBackTraceIndex
;
882 ULONG ContentionCount
;
884 ULONG RecursionCount
;
885 ULONG NumberOfSharedWaiters
;
886 ULONG NumberOfExclusiveWaiters
;
887 } RTL_PROCESS_LOCK_INFORMATION
, *PRTL_PROCESS_LOCK_INFORMATION
;
889 typedef struct _RTL_PROCESS_LOCKS
892 RTL_PROCESS_LOCK_INFORMATION Locks
[1];
893 } RTL_PROCESS_LOCKS
, *PRTL_PROCESS_LOCKS
;
895 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
897 PVOID SymbolicBackTrace
;
902 } RTL_PROCESS_BACKTRACE_INFORMATION
, *PRTL_PROCESS_BACKTRACE_INFORMATION
;
904 typedef struct _RTL_PROCESS_BACKTRACES
906 ULONG CommittedMemory
;
907 ULONG ReservedMemory
;
908 ULONG NumberOfBackTraceLookups
;
909 ULONG NumberOfBackTraces
;
910 RTL_PROCESS_BACKTRACE_INFORMATION BackTraces
[1];
911 } RTL_PROCESS_BACKTRACES
, *PRTL_PROCESS_BACKTRACES
;
913 typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
919 // Option array continues below
921 } RTL_PROCESS_VERIFIER_OPTIONS
, *PRTL_PROCESS_VERIFIER_OPTIONS
;
923 typedef struct _RTL_DEBUG_INFORMATION
925 HANDLE SectionHandleClient
;
926 PVOID ViewBaseClient
;
927 PVOID ViewBaseTarget
;
929 HANDLE EventPairClient
;
930 PVOID EventPairTarget
;
931 HANDLE TargetProcessId
;
932 HANDLE TargetThreadHandle
;
939 PRTL_PROCESS_MODULES Modules
;
940 PRTL_PROCESS_MODULE_INFORMATION_EX ModulesEx
;
942 PRTL_PROCESS_BACKTRACES BackTraces
;
943 PRTL_PROCESS_HEAPS Heaps
;
944 PRTL_PROCESS_LOCKS Locks
;
946 HANDLE TargetProcessHandle
;
947 RTL_PROCESS_VERIFIER_OPTIONS VerifierOptions
;
949 HANDLE CriticalSectionHandle
;
950 HANDLE CriticalSectionOwnerThread
;
952 } RTL_DEBUG_INFORMATION
, *PRTL_DEBUG_INFORMATION
;
955 // Unload Event Trace Structure for RtlGetUnloadEventTrace
957 typedef struct _RTL_UNLOAD_EVENT_TRACE
965 } RTL_UNLOAD_EVENT_TRACE
, *PRTL_UNLOAD_EVENT_TRACE
;
968 // RTL Handle Structures
970 typedef struct _RTL_HANDLE_TABLE_ENTRY
975 struct _RTL_HANDLE_TABLE_ENTRY
*NextFree
;
977 } RTL_HANDLE_TABLE_ENTRY
, *PRTL_HANDLE_TABLE_ENTRY
;
979 typedef struct _RTL_HANDLE_TABLE
981 ULONG MaximumNumberOfHandles
;
982 ULONG SizeOfHandleTableEntry
;
984 PRTL_HANDLE_TABLE_ENTRY FreeHandles
;
985 PRTL_HANDLE_TABLE_ENTRY CommittedHandles
;
986 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles
;
987 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles
;
988 } RTL_HANDLE_TABLE
, *PRTL_HANDLE_TABLE
;
993 typedef struct _EXCEPTION_REGISTRATION_RECORD
995 struct _EXCEPTION_REGISTRATION_RECORD
*Next
;
996 PEXCEPTION_ROUTINE Handler
;
997 } EXCEPTION_REGISTRATION_RECORD
, *PEXCEPTION_REGISTRATION_RECORD
;
1000 // Current Directory Structures
1002 typedef struct _CURDIR
1004 UNICODE_STRING DosPath
;
1008 typedef struct RTL_DRIVE_LETTER_CURDIR
1013 UNICODE_STRING DosPath
;
1014 } RTL_DRIVE_LETTER_CURDIR
, *PRTL_DRIVE_LETTER_CURDIR
;
1017 // Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
1019 typedef struct _RTL_ACQUIRE_STATE
1022 HANDLE OldImpersonationToken
;
1023 PTOKEN_PRIVILEGES OldPrivileges
;
1024 PTOKEN_PRIVILEGES NewPrivileges
;
1026 UCHAR OldPrivBuffer
[1024];
1027 } RTL_ACQUIRE_STATE
, *PRTL_ACQUIRE_STATE
;
1029 #ifndef NTOS_MODE_USER
1032 // RTL Critical Section Structures
1034 typedef struct _RTL_CRITICAL_SECTION_DEBUG
1037 USHORT CreatorBackTraceIndex
;
1038 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
1039 LIST_ENTRY ProcessLocksList
;
1041 ULONG ContentionCount
;
1043 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
1045 typedef struct _RTL_CRITICAL_SECTION
1047 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
1049 LONG RecursionCount
;
1050 HANDLE OwningThread
;
1051 HANDLE LockSemaphore
;
1052 ULONG_PTR SpinCount
;
1053 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
1058 // RTL Range List Structures
1060 typedef struct _RTL_RANGE_LIST
1062 LIST_ENTRY ListHead
;
1066 } RTL_RANGE_LIST
, *PRTL_RANGE_LIST
;
1068 typedef struct _RTL_RANGE
1076 } RTL_RANGE
, *PRTL_RANGE
;
1078 typedef struct _RANGE_LIST_ITERATOR
1080 PLIST_ENTRY RangeListHead
;
1081 PLIST_ENTRY MergedHead
;
1084 } RTL_RANGE_LIST_ITERATOR
, *PRTL_RANGE_LIST_ITERATOR
;
1089 typedef struct _RTL_RESOURCE
1091 RTL_CRITICAL_SECTION Lock
;
1092 HANDLE SharedSemaphore
;
1093 ULONG SharedWaiters
;
1094 HANDLE ExclusiveSemaphore
;
1095 ULONG ExclusiveWaiters
;
1097 HANDLE OwningThread
;
1100 } RTL_RESOURCE
, *PRTL_RESOURCE
;
1103 // RTL Message Structures for PE Resources
1105 typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
1110 } RTL_MESSAGE_RESOURCE_ENTRY
, *PRTL_MESSAGE_RESOURCE_ENTRY
;
1112 typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
1116 ULONG OffsetToEntries
;
1117 } RTL_MESSAGE_RESOURCE_BLOCK
, *PRTL_MESSAGE_RESOURCE_BLOCK
;
1119 typedef struct _RTL_MESSAGE_RESOURCE_DATA
1121 ULONG NumberOfBlocks
;
1122 RTL_MESSAGE_RESOURCE_BLOCK Blocks
[1];
1123 } RTL_MESSAGE_RESOURCE_DATA
, *PRTL_MESSAGE_RESOURCE_DATA
;
1126 // Structures for RtlCreateUserProcess
1128 typedef struct _RTL_USER_PROCESS_PARAMETERS
1130 ULONG MaximumLength
;
1134 HANDLE ConsoleHandle
;
1136 HANDLE StandardInput
;
1137 HANDLE StandardOutput
;
1138 HANDLE StandardError
;
1139 CURDIR CurrentDirectory
;
1140 UNICODE_STRING DllPath
;
1141 UNICODE_STRING ImagePathName
;
1142 UNICODE_STRING CommandLine
;
1150 ULONG FillAttribute
;
1152 ULONG ShowWindowFlags
;
1153 UNICODE_STRING WindowTitle
;
1154 UNICODE_STRING DesktopInfo
;
1155 UNICODE_STRING ShellInfo
;
1156 UNICODE_STRING RuntimeData
;
1157 RTL_DRIVE_LETTER_CURDIR CurrentDirectories
[32];
1158 } RTL_USER_PROCESS_PARAMETERS
, *PRTL_USER_PROCESS_PARAMETERS
;
1160 typedef struct _RTL_USER_PROCESS_INFORMATION
1163 HANDLE ProcessHandle
;
1164 HANDLE ThreadHandle
;
1166 SECTION_IMAGE_INFORMATION ImageInformation
;
1167 } RTL_USER_PROCESS_INFORMATION
, *PRTL_USER_PROCESS_INFORMATION
;
1170 // RTL Atom Table Structures
1172 typedef struct _RTL_ATOM_TABLE_ENTRY
1174 struct _RTL_ATOM_TABLE_ENTRY
*HashLink
;
1177 USHORT ReferenceCount
;
1181 } RTL_ATOM_TABLE_ENTRY
, *PRTL_ATOM_TABLE_ENTRY
;
1183 typedef struct _RTL_ATOM_TABLE
1188 #ifdef NTOS_MODE_USER
1189 RTL_CRITICAL_SECTION CriticalSection
;
1191 FAST_MUTEX FastMutex
;
1196 #ifdef NTOS_MODE_USER
1197 RTL_HANDLE_TABLE RtlHandleTable
;
1199 PHANDLE_TABLE ExHandleTable
;
1202 ULONG NumberOfBuckets
;
1203 PRTL_ATOM_TABLE_ENTRY Buckets
[1];
1204 } RTL_ATOM_TABLE
, *PRTL_ATOM_TABLE
;
1208 // System Time and Timezone Structures
1210 typedef struct _SYSTEMTIME
1219 USHORT wMilliseconds
;
1220 } SYSTEMTIME
, *PSYSTEMTIME
, *LPSYSTEMTIME
;
1222 typedef struct _TIME_ZONE_INFORMATION
1225 WCHAR StandardName
[32];
1226 SYSTEMTIME StandardDate
;
1228 WCHAR DaylightName
[32];
1229 SYSTEMTIME DaylightDate
;
1231 } TIME_ZONE_INFORMATION
, *PTIME_ZONE_INFORMATION
, *LPTIME_ZONE_INFORMATION
;
1235 // Native version of Timezone Structure
1237 typedef LPTIME_ZONE_INFORMATION PRTL_TIME_ZONE_INFORMATION
;
1242 typedef struct _RTL_PATCH_HEADER
1244 LIST_ENTRY PatchList
;
1245 PVOID PatchImageBase
;
1246 struct _RTL_PATCH_HEADER
*NextPath
;
1249 struct _HOTPATCH_HEADER
*HotpatchHeader
;
1250 UNICODE_STRING TargetDllName
;
1251 PVOID TargetDllBase
;
1252 PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry
;
1253 PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry
;
1254 struct _SYSTEM_HOTPATCH_CODE_INFORMATION
*CodeInfo
;
1255 } RTL_PATCH_HEADER
, *PRTL_PATCH_HEADER
;
1258 // Header for NLS Files
1260 typedef struct _NLS_FILE_HEADER
1264 USHORT MaximumCharacterSize
;
1266 USHORT UniDefaultChar
;
1267 USHORT TransDefaultChar
;
1268 USHORT TransUniDefaultChar
;
1269 UCHAR LeadByte
[MAXIMUM_LEADBYTES
];
1270 } NLS_FILE_HEADER
, *PNLS_FILE_HEADER
;
1275 typedef struct _RTL_STACK_TRACE_ENTRY
1277 struct _RTL_STACK_TRACE_ENTRY
*HashChain
;
1281 PVOID BackTrace
[32];
1282 } RTL_STACK_TRACE_ENTRY
, *PRTL_STACK_TRACE_ENTRY
;
1284 typedef struct _STACK_TRACE_DATABASE
1286 RTL_CRITICAL_SECTION CriticalSection
;
1287 } STACK_TRACE_DATABASE
, *PSTACK_TRACE_DATABASE
;
1289 #ifndef NTOS_MODE_USER
1292 // Message Resource Entry, Block and Data
1294 typedef struct _MESSAGE_RESOURCE_ENTRY
1298 UCHAR Text
[ANYSIZE_ARRAY
];
1299 } MESSAGE_RESOURCE_ENTRY
, *PMESSAGE_RESOURCE_ENTRY
;
1301 typedef struct _MESSAGE_RESOURCE_BLOCK
1305 ULONG OffsetToEntries
;
1306 } MESSAGE_RESOURCE_BLOCK
, *PMESSAGE_RESOURCE_BLOCK
;
1308 typedef struct _MESSAGE_RESOURCE_DATA
1310 ULONG NumberOfBlocks
;
1311 MESSAGE_RESOURCE_BLOCK Blocks
[ANYSIZE_ARRAY
];
1312 } MESSAGE_RESOURCE_DATA
, *PMESSAGE_RESOURCE_DATA
;