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
29 // Maximum Atom Length
31 #define RTL_MAXIMUM_ATOM_LENGTH 255
34 // Process Parameters Flags
36 #define RTL_USER_PROCESS_PARAMETERS_NORMALIZED 0x01
37 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_USER 0x02
38 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_SERVER 0x04
39 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_KERNEL 0x08
40 #define RTL_USER_PROCESS_PARAMETERS_UNKNOWN 0x10
41 #define RTL_USER_PROCESS_PARAMETERS_RESERVE_1MB 0x20
42 #define RTL_USER_PROCESS_PARAMETERS_DISABLE_HEAP_CHECKS 0x100
43 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_1 0x200
44 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_2 0x400
45 #define RTL_USER_PROCESS_PARAMETERS_PRIVATE_DLL_PATH 0x1000
46 #define RTL_USER_PROCESS_PARAMETERS_LOCAL_DLL_PATH 0x2000
47 #define RTL_USER_PROCESS_PARAMETERS_NX 0x20000
52 #define EXCEPTION_CHAIN_END ((PEXCEPTION_REGISTRATION_RECORD)-1)
53 #define EXCEPTION_UNWINDING 0x02
54 #define EXCEPTION_EXIT_UNWIND 0x04
55 #define EXCEPTION_STACK_INVALID 0x08
56 #define EXCEPTION_UNWIND (EXCEPTION_UNWINDING + EXCEPTION_EXIT_UNWIND)
57 #define EXCEPTION_NESTED_CALL 0x10
58 #define EXCEPTION_TARGET_UNWIND 0x20
59 #define EXCEPTION_COLLIDED_UNWIND 0x20
62 // Range and Range List Flags
64 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
65 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
67 #define RTL_RANGE_SHARED 0x01
68 #define RTL_RANGE_CONFLICT 0x02
71 // Activation Context Frame Flags
73 #define RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_FORMAT_WHISTLER \
79 #if !defined(NTOS_MODE_USER) && !defined(_NTIFS_)
80 #define HEAP_NO_SERIALIZE 0x00000001
81 #define HEAP_GROWABLE 0x00000002
82 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
83 #define HEAP_ZERO_MEMORY 0x00000008
84 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
85 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
86 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
87 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
88 #define HEAP_CREATE_ALIGN_16 0x00010000
89 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
90 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
94 // User-Defined Heap Flags and Classes
96 #define HEAP_SETTABLE_USER_VALUE 0x00000100
97 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
98 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
99 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
100 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
101 #define HEAP_CLASS_0 0x00000000
102 #define HEAP_CLASS_1 0x00001000
103 #define HEAP_CLASS_2 0x00002000
104 #define HEAP_CLASS_3 0x00003000
105 #define HEAP_CLASS_4 0x00004000
106 #define HEAP_CLASS_5 0x00005000
107 #define HEAP_CLASS_6 0x00006000
108 #define HEAP_CLASS_7 0x00007000
109 #define HEAP_CLASS_8 0x00008000
110 #define HEAP_CLASS_MASK 0x0000F000
113 // Internal HEAP Structure Flags
115 #define HEAP_FLAG_PAGE_ALLOCS 0x01000000
116 #define HEAP_PROTECTION_ENABLED 0x02000000
117 #define HEAP_BREAK_WHEN_OUT_OF_VM 0x04000000
118 #define HEAP_NO_ALIGNMENT 0x08000000
119 #define HEAP_CAPTURE_STACK_BACKTRACES 0x08000000
120 #define HEAP_SKIP_VALIDATION_CHECKS 0x10000000
121 #define HEAP_VALIDATE_ALL_ENABLED 0x20000000
122 #define HEAP_VALIDATE_PARAMETERS_ENABLED 0x40000000
123 #define HEAP_LOCK_USER_ALLOCATED 0x80000000
126 // Heap Validation Flags
128 #define HEAP_CREATE_VALID_MASK \
129 (HEAP_NO_SERIALIZE | \
131 HEAP_GENERATE_EXCEPTIONS | \
133 HEAP_REALLOC_IN_PLACE_ONLY | \
134 HEAP_TAIL_CHECKING_ENABLED | \
135 HEAP_FREE_CHECKING_ENABLED | \
136 HEAP_DISABLE_COALESCE_ON_FREE | \
138 HEAP_CREATE_ALIGN_16 | \
139 HEAP_CREATE_ENABLE_TRACING | \
140 HEAP_CREATE_ENABLE_EXECUTE)
142 C_ASSERT(HEAP_CREATE_VALID_MASK
== 0x0007F0FF);
148 #define RTL_REGISTRY_ABSOLUTE 0
149 #define RTL_REGISTRY_SERVICES 1
150 #define RTL_REGISTRY_CONTROL 2
151 #define RTL_REGISTRY_WINDOWS_NT 3
152 #define RTL_REGISTRY_DEVICEMAP 4
153 #define RTL_REGISTRY_USER 5
154 #define RTL_REGISTRY_MAXIMUM 6
155 #define RTL_REGISTRY_HANDLE 0x40000000
156 #define RTL_REGISTRY_OPTIONAL 0x80000000
157 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
158 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
159 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
160 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
161 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
162 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
163 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
168 #define VER_MINORVERSION 0x0000001
169 #define VER_MAJORVERSION 0x0000002
170 #define VER_BUILDNUMBER 0x0000004
171 #define VER_PLATFORMID 0x0000008
172 #define VER_SERVICEPACKMINOR 0x0000010
173 #define VER_SERVICEPACKMAJOR 0x0000020
174 #define VER_SUITENAME 0x0000040
175 #define VER_PRODUCT_TYPE 0x0000080
176 #define VER_PLATFORM_WIN32s 0
177 #define VER_PLATFORM_WIN32_WINDOWS 1
178 #define VER_PLATFORM_WIN32_NT 2
180 #define VER_GREATER 2
181 #define VER_GREATER_EQUAL 3
183 #define VER_LESS_EQUAL 5
186 #define VER_CONDITION_MASK 7
187 #define VER_NUM_BITS_PER_CONDITION_MASK 3
192 #define TIME_ZONE_ID_UNKNOWN 0
193 #define TIME_ZONE_ID_STANDARD 1
194 #define TIME_ZONE_ID_DAYLIGHT 2
197 // Maximum Path Length
202 // RTL Lock Type (Critical Section or Resource)
204 #define RTL_CRITSECT_TYPE 0
205 #define RTL_RESOURCE_TYPE 1
208 // RtlAcquirePrivileges Flags
210 #define RTL_ACQUIRE_PRIVILEGE_IMPERSONATE 1
211 #define RTL_ACQUIRE_PRIVILEGE_PROCESS 2
213 #ifdef NTOS_MODE_USER
216 // String Hash Algorithms
218 #define HASH_STRING_ALGORITHM_DEFAULT 0
219 #define HASH_STRING_ALGORITHM_X65599 1
220 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
223 // RtlDuplicateString Flags
225 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
226 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
229 // RtlFindCharInUnicodeString Flags
231 #define RTL_FIND_CHAR_IN_UNICODE_STRING_CASE_INSENSITIVE 4
236 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
237 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
238 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
243 #if defined(__cplusplus)
244 #define RTL_CONST_CAST(type) const_cast<type>
246 #define RTL_CONST_CAST(type) (type)
250 // Constant String Macro
252 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
254 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
255 sizeof(__SOURCE_STRING__), \
256 (__SOURCE_STRING__) \
260 // Constant Object Attributes Macro
262 #define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a) \
264 sizeof(OBJECT_ATTRIBUTES), \
266 RTL_CONST_CAST(PUNICODE_STRING)(n), \
272 #define RTL_INIT_OBJECT_ATTRIBUTES(n, a) \
273 RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
277 // Message Resource Flag
279 #define MESSAGE_RESOURCE_UNICODE 0x0001
282 #define MAXIMUM_LEADBYTES 12
287 #define RTL_DEBUG_QUERY_MODULES 0x01
288 #define RTL_DEBUG_QUERY_BACKTRACES 0x02
289 #define RTL_DEBUG_QUERY_HEAPS 0x04
290 #define RTL_DEBUG_QUERY_HEAP_TAGS 0x08
291 #define RTL_DEBUG_QUERY_HEAP_BLOCKS 0x10
292 #define RTL_DEBUG_QUERY_LOCKS 0x20
297 #define RTL_HANDLE_VALID 0x1
302 #define RTL_ATOM_IS_PINNED 0x1
305 // Critical section lock bits
307 #define CS_LOCK_BIT 0x1
308 #define CS_LOCK_BIT_V 0x0
309 #define CS_LOCK_WAITER_WOKEN 0x2
310 #define CS_LOCK_WAITER_INC 0x4
315 #ifdef NTOS_MODE_USER
316 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
317 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
320 // Constant String Macro
322 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
324 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
325 sizeof(__SOURCE_STRING__), \
326 (__SOURCE_STRING__) \
331 #ifdef NTOS_MODE_USER
334 // Table and Compare result types
336 typedef enum _TABLE_SEARCH_RESULT
342 } TABLE_SEARCH_RESULT
;
344 typedef enum _RTL_GENERIC_COMPARE_RESULTS
349 } RTL_GENERIC_COMPARE_RESULTS
;
356 typedef enum _RTL_PATH_TYPE
359 RtlPathTypeUncAbsolute
,
360 RtlPathTypeDriveAbsolute
,
361 RtlPathTypeDriveRelative
,
364 RtlPathTypeLocalDevice
,
365 RtlPathTypeRootLocalDevice
,
368 #ifndef NTOS_MODE_USER
371 // Callback function for RTL Timers or Registered Waits
374 (NTAPI
*WAITORTIMERCALLBACKFUNC
)(
376 BOOLEAN fTimerOrWaitFired
380 // Handler during Vectored RTL Exceptions
383 (NTAPI
*PVECTORED_EXCEPTION_HANDLER
)(
384 PEXCEPTION_POINTERS ExceptionPointers
388 // Worker Thread Callback for Rtl
391 (NTAPI
*WORKERCALLBACKFUNC
)(
398 // Handler during regular RTL Exceptions
400 typedef EXCEPTION_DISPOSITION
401 (NTAPI
*PEXCEPTION_ROUTINE
)(
402 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
403 IN PVOID EstablisherFrame
,
404 IN OUT
struct _CONTEXT
*ContextRecord
,
405 IN OUT PVOID DispatcherContext
409 // RTL Library Allocation/Free Routines
412 (NTAPI
*PRTL_ALLOCATE_STRING_ROUTINE
)(
417 (NTAPI
*PRTL_REALLOCATE_STRING_ROUTINE
)(
418 SIZE_T NumberOfBytes
,
424 (NTAPI
*PRTL_FREE_STRING_ROUTINE
)(
428 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine
;
429 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine
;
430 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine
;
435 // Callback for RTL Heap Enumeration
438 (NTAPI
*PHEAP_ENUMERATION_ROUTINE
)(
444 // Thread and Process Start Routines for RtlCreateUserThread/Process
446 typedef ULONG (NTAPI
*PTHREAD_START_ROUTINE
)(
451 (NTAPI
*PRTL_BASE_PROCESS_START_ROUTINE
)(
452 PTHREAD_START_ROUTINE StartAddress
,
457 // Declare empty structure definitions so that they may be referenced by
458 // routines before they are defined
460 struct _RTL_AVL_TABLE
;
461 struct _RTL_GENERIC_TABLE
;
465 // Routines and callbacks for the RTL AVL/Generic Table package
467 #if defined(NTOS_MODE_USER) || (!defined(NTOS_MODE_USER) && !defined(_NTIFS_))
469 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
)(
470 struct _RTL_AVL_TABLE
*Table
,
475 typedef RTL_GENERIC_COMPARE_RESULTS
476 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
477 struct _RTL_AVL_TABLE
*Table
,
482 typedef RTL_GENERIC_COMPARE_RESULTS
483 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
484 struct _RTL_GENERIC_TABLE
*Table
,
490 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
491 struct _RTL_GENERIC_TABLE
*Table
,
496 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
497 struct _RTL_GENERIC_TABLE
*Table
,
502 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
503 struct _RTL_AVL_TABLE
*Table
,
508 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
509 struct _RTL_AVL_TABLE
*Table
,
515 // RTL Query Registry callback
517 #ifdef NTOS_MODE_USER
519 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
523 IN ULONG ValueLength
,
525 IN PVOID EntryContext
530 // RTL Secure Memory callbacks
532 #ifdef NTOS_MODE_USER
534 (NTAPI
*PRTL_SECURE_MEMORY_CACHE_CALLBACK
)(
541 // RTL Range List callbacks
543 #ifdef NTOS_MODE_USER
545 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
)(
547 struct _RTL_RANGE
*Range
551 // Custom Heap Commit Routine for RtlCreateHeap
554 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
)(
556 IN OUT PVOID
*CommitAddress
,
557 IN OUT PSIZE_T CommitSize
561 // Version Info redefinitions
563 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW
;
564 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW
;
565 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW
;
566 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW
;
569 // Simple pointer definitions
571 typedef ACL_REVISION_INFORMATION
*PACL_REVISION_INFORMATION
;
572 typedef ACL_SIZE_INFORMATION
*PACL_SIZE_INFORMATION
;
575 // Parameters for RtlCreateHeap
576 // FIXME: Determine whether Length is SIZE_T or ULONG
578 typedef struct _RTL_HEAP_PARAMETERS
581 SIZE_T SegmentReserve
;
582 SIZE_T SegmentCommit
;
583 SIZE_T DeCommitFreeBlockThreshold
;
584 SIZE_T DeCommitTotalFreeThreshold
;
585 SIZE_T MaximumAllocationSize
;
586 SIZE_T VirtualMemoryThreshold
;
587 SIZE_T InitialCommit
;
588 SIZE_T InitialReserve
;
589 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
591 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
594 // RTL Bitmap structures
596 typedef struct _RTL_BITMAP
600 } RTL_BITMAP
, *PRTL_BITMAP
;
602 typedef struct _RTL_BITMAP_RUN
606 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
609 // RtlGenerateXxxName context
611 typedef struct _GENERATE_NAME_CONTEXT
614 BOOLEAN CheckSumInserted
;
617 ULONG ExtensionLength
;
618 WCHAR ExtensionBuffer
[4];
619 ULONG LastIndexValue
;
620 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
623 // RTL Splay and Balanced Links structures
625 typedef struct _RTL_SPLAY_LINKS
627 struct _RTL_SPLAY_LINKS
*Parent
;
628 struct _RTL_SPLAY_LINKS
*LeftChild
;
629 struct _RTL_SPLAY_LINKS
*RightChild
;
630 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
632 typedef struct _RTL_BALANCED_LINKS
634 struct _RTL_BALANCED_LINKS
*Parent
;
635 struct _RTL_BALANCED_LINKS
*LeftChild
;
636 struct _RTL_BALANCED_LINKS
*RightChild
;
639 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
642 // RTL Avl/Generic Tables
644 typedef struct _RTL_GENERIC_TABLE
646 PRTL_SPLAY_LINKS TableRoot
;
647 LIST_ENTRY InsertOrderList
;
648 PLIST_ENTRY OrderedPointer
;
649 ULONG WhichOrderedElement
;
650 ULONG NumberGenericTableElements
;
651 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
652 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
653 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
655 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
657 typedef struct _RTL_AVL_TABLE
659 RTL_BALANCED_LINKS BalancedRoot
;
660 PVOID OrderedPointer
;
661 ULONG WhichOrderedElement
;
662 ULONG NumberGenericTableElements
;
664 PRTL_BALANCED_LINKS RestartKey
;
666 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
667 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
668 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
670 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
673 // RTL Compression Buffer
675 typedef struct _COMPRESSED_DATA_INFO
{
676 USHORT CompressionFormatAndEngine
;
677 UCHAR CompressionUnitShift
;
681 USHORT NumberOfChunks
;
682 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
683 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
686 // RtlQueryRegistry Data
688 typedef struct _RTL_QUERY_REGISTRY_TABLE
690 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
697 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
700 // RTL Unicode Table Structures
702 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
706 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
707 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
708 RTL_SPLAY_LINKS Links
;
709 PUNICODE_STRING Prefix
;
710 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
712 typedef struct _UNICODE_PREFIX_TABLE
716 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
717 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
718 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
721 // Time Structure for RTL Time calls
723 typedef struct _TIME_FIELDS
733 } TIME_FIELDS
, *PTIME_FIELDS
;
736 // Activation Context
738 typedef PVOID PACTIVATION_CONTEXT
;
741 // Activation Context Frame
743 typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
745 struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
*Previous
;
746 PACTIVATION_CONTEXT ActivationContext
;
748 } RTL_ACTIVATION_CONTEXT_STACK_FRAME
,
749 *PRTL_ACTIVATION_CONTEXT_STACK_FRAME
;
751 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
755 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
760 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
,
761 *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
;
763 typedef struct _ACTIVATION_CONTEXT_STACK
765 PRTL_ACTIVATION_CONTEXT_STACK_FRAME ActiveFrame
;
766 LIST_ENTRY FrameListCache
;
768 ULONG NextCookieSequenceNumber
;
770 } ACTIVATION_CONTEXT_STACK
,
771 *PACTIVATION_CONTEXT_STACK
;
781 ACCESS_MASK AccessMask
;
785 // Information Structures for RTL Debug Functions
787 typedef struct _RTL_PROCESS_MODULE_INFORMATION
794 USHORT LoadOrderIndex
;
795 USHORT InitOrderIndex
;
797 USHORT OffsetToFileName
;
798 CHAR FullPathName
[256];
799 } RTL_PROCESS_MODULE_INFORMATION
, *PRTL_PROCESS_MODULE_INFORMATION
;
801 typedef struct _RTL_PROCESS_MODULES
803 ULONG NumberOfModules
;
804 RTL_PROCESS_MODULE_INFORMATION Modules
[1];
805 } RTL_PROCESS_MODULES
, *PRTL_PROCESS_MODULES
;
807 typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
810 RTL_PROCESS_MODULE_INFORMATION BaseInfo
;
814 } RTL_PROCESS_MODULE_INFORMATION_EX
, *PRTL_PROCESS_MODULE_INFORMATION_EX
;
816 typedef struct _RTL_HEAP_TAG_INFO
818 ULONG NumberOfAllocations
;
820 ULONG BytesAllocated
;
821 } RTL_HEAP_TAG_INFO
, *PRTL_HEAP_TAG_INFO
;
823 typedef struct _RTL_HEAP_USAGE_ENTRY
825 struct _RTL_HEAP_USAGE_ENTRY
*Next
;
826 } RTL_HEAP_USAGE_ENTRY
, *PRTL_HEAP_USAGE_ENTRY
;
828 typedef struct _RTL_HEAP_USAGE
831 ULONG BytesAllocated
;
832 ULONG BytesCommitted
;
834 ULONG BytesReservedMaximum
;
835 PRTL_HEAP_USAGE_ENTRY Entries
;
836 PRTL_HEAP_USAGE_ENTRY AddedEntries
;
837 PRTL_HEAP_USAGE_ENTRY RemovedEntries
;
839 } RTL_HEAP_USAGE
, *PRTL_HEAP_USAGE
;
841 typedef struct _RTL_HEAP_INFORMATION
845 USHORT EntryOverhead
;
846 USHORT CreatorBackTraceIndex
;
847 ULONG BytesAllocated
;
848 ULONG BytesCommitted
;
850 ULONG NumberOfEntries
;
851 ULONG NumberOfPseudoTags
;
852 ULONG PseudoTagGranularity
;
856 } RTL_HEAP_INFORMATION
, *PRTL_HEAP_INFORMATION
;
858 typedef struct _RTL_PROCESS_HEAPS
861 RTL_HEAP_INFORMATION Heaps
[1];
862 } RTL_PROCESS_HEAPS
, *PRTL_PROCESS_HEAPS
;
864 typedef struct _RTL_PROCESS_LOCK_INFORMATION
868 USHORT CreatorBackTraceIndex
;
871 ULONG ContentionCount
;
873 ULONG RecursionCount
;
874 ULONG NumberOfSharedWaiters
;
875 ULONG NumberOfExclusiveWaiters
;
876 } RTL_PROCESS_LOCK_INFORMATION
, *PRTL_PROCESS_LOCK_INFORMATION
;
878 typedef struct _RTL_PROCESS_LOCKS
881 RTL_PROCESS_LOCK_INFORMATION Locks
[1];
882 } RTL_PROCESS_LOCKS
, *PRTL_PROCESS_LOCKS
;
884 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
886 PVOID SymbolicBackTrace
;
891 } RTL_PROCESS_BACKTRACE_INFORMATION
, *PRTL_PROCESS_BACKTRACE_INFORMATION
;
893 typedef struct _RTL_PROCESS_BACKTRACES
895 ULONG CommittedMemory
;
896 ULONG ReservedMemory
;
897 ULONG NumberOfBackTraceLookups
;
898 ULONG NumberOfBackTraces
;
899 RTL_PROCESS_BACKTRACE_INFORMATION BackTraces
[1];
900 } RTL_PROCESS_BACKTRACES
, *PRTL_PROCESS_BACKTRACES
;
902 typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
908 // Option array continues below
910 } RTL_PROCESS_VERIFIER_OPTIONS
, *PRTL_PROCESS_VERIFIER_OPTIONS
;
912 typedef struct _RTL_DEBUG_INFORMATION
914 HANDLE SectionHandleClient
;
915 PVOID ViewBaseClient
;
916 PVOID ViewBaseTarget
;
918 HANDLE EventPairClient
;
919 PVOID EventPairTarget
;
920 HANDLE TargetProcessId
;
921 HANDLE TargetThreadHandle
;
928 PRTL_PROCESS_MODULES Modules
;
929 PRTL_PROCESS_MODULE_INFORMATION_EX ModulesEx
;
931 PRTL_PROCESS_BACKTRACES BackTraces
;
932 PRTL_PROCESS_HEAPS Heaps
;
933 PRTL_PROCESS_LOCKS Locks
;
935 HANDLE TargetProcessHandle
;
936 RTL_PROCESS_VERIFIER_OPTIONS VerifierOptions
;
938 HANDLE CriticalSectionHandle
;
939 HANDLE CriticalSectionOwnerThread
;
941 } RTL_DEBUG_INFORMATION
, *PRTL_DEBUG_INFORMATION
;
944 // Unload Event Trace Structure for RtlGetUnloadEventTrace
946 typedef struct _RTL_UNLOAD_EVENT_TRACE
954 } RTL_UNLOAD_EVENT_TRACE
, *PRTL_UNLOAD_EVENT_TRACE
;
957 // RTL Handle Structures
959 typedef struct _RTL_HANDLE_TABLE_ENTRY
964 struct _RTL_HANDLE_TABLE_ENTRY
*NextFree
;
966 } RTL_HANDLE_TABLE_ENTRY
, *PRTL_HANDLE_TABLE_ENTRY
;
968 typedef struct _RTL_HANDLE_TABLE
970 ULONG MaximumNumberOfHandles
;
971 ULONG SizeOfHandleTableEntry
;
973 PRTL_HANDLE_TABLE_ENTRY FreeHandles
;
974 PRTL_HANDLE_TABLE_ENTRY CommittedHandles
;
975 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles
;
976 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles
;
977 } RTL_HANDLE_TABLE
, *PRTL_HANDLE_TABLE
;
982 typedef struct _EXCEPTION_REGISTRATION_RECORD
984 struct _EXCEPTION_REGISTRATION_RECORD
*Next
;
985 PEXCEPTION_ROUTINE Handler
;
986 } EXCEPTION_REGISTRATION_RECORD
, *PEXCEPTION_REGISTRATION_RECORD
;
989 // Current Directory Structures
991 typedef struct _CURDIR
993 UNICODE_STRING DosPath
;
997 typedef struct RTL_DRIVE_LETTER_CURDIR
1002 UNICODE_STRING DosPath
;
1003 } RTL_DRIVE_LETTER_CURDIR
, *PRTL_DRIVE_LETTER_CURDIR
;
1006 // Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
1008 typedef struct _RTL_ACQUIRE_STATE
1011 HANDLE OldImpersonationToken
;
1012 PTOKEN_PRIVILEGES OldPrivileges
;
1013 PTOKEN_PRIVILEGES NewPrivileges
;
1015 UCHAR OldPrivBuffer
[1024];
1016 } RTL_ACQUIRE_STATE
, *PRTL_ACQUIRE_STATE
;
1018 #ifndef NTOS_MODE_USER
1021 // RTL Critical Section Structures
1023 typedef struct _RTL_CRITICAL_SECTION_DEBUG
1026 USHORT CreatorBackTraceIndex
;
1027 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
1028 LIST_ENTRY ProcessLocksList
;
1030 ULONG ContentionCount
;
1032 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
1034 typedef struct _RTL_CRITICAL_SECTION
1036 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
1038 LONG RecursionCount
;
1039 HANDLE OwningThread
;
1040 HANDLE LockSemaphore
;
1041 ULONG_PTR SpinCount
;
1042 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
1047 // RTL Range List Structures
1049 typedef struct _RTL_RANGE_LIST
1051 LIST_ENTRY ListHead
;
1055 } RTL_RANGE_LIST
, *PRTL_RANGE_LIST
;
1057 typedef struct _RTL_RANGE
1065 } RTL_RANGE
, *PRTL_RANGE
;
1067 typedef struct _RANGE_LIST_ITERATOR
1069 PLIST_ENTRY RangeListHead
;
1070 PLIST_ENTRY MergedHead
;
1073 } RTL_RANGE_LIST_ITERATOR
, *PRTL_RANGE_LIST_ITERATOR
;
1078 typedef struct _RTL_RESOURCE
1080 RTL_CRITICAL_SECTION Lock
;
1081 HANDLE SharedSemaphore
;
1082 ULONG SharedWaiters
;
1083 HANDLE ExclusiveSemaphore
;
1084 ULONG ExclusiveWaiters
;
1086 HANDLE OwningThread
;
1089 } RTL_RESOURCE
, *PRTL_RESOURCE
;
1092 // RTL Message Structures for PE Resources
1094 typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
1099 } RTL_MESSAGE_RESOURCE_ENTRY
, *PRTL_MESSAGE_RESOURCE_ENTRY
;
1101 typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
1105 ULONG OffsetToEntries
;
1106 } RTL_MESSAGE_RESOURCE_BLOCK
, *PRTL_MESSAGE_RESOURCE_BLOCK
;
1108 typedef struct _RTL_MESSAGE_RESOURCE_DATA
1110 ULONG NumberOfBlocks
;
1111 RTL_MESSAGE_RESOURCE_BLOCK Blocks
[1];
1112 } RTL_MESSAGE_RESOURCE_DATA
, *PRTL_MESSAGE_RESOURCE_DATA
;
1115 // Structures for RtlCreateUserProcess
1117 typedef struct _RTL_USER_PROCESS_PARAMETERS
1119 ULONG MaximumLength
;
1123 HANDLE ConsoleHandle
;
1125 HANDLE StandardInput
;
1126 HANDLE StandardOutput
;
1127 HANDLE StandardError
;
1128 CURDIR CurrentDirectory
;
1129 UNICODE_STRING DllPath
;
1130 UNICODE_STRING ImagePathName
;
1131 UNICODE_STRING CommandLine
;
1139 ULONG FillAttribute
;
1141 ULONG ShowWindowFlags
;
1142 UNICODE_STRING WindowTitle
;
1143 UNICODE_STRING DesktopInfo
;
1144 UNICODE_STRING ShellInfo
;
1145 UNICODE_STRING RuntimeData
;
1146 RTL_DRIVE_LETTER_CURDIR CurrentDirectories
[32];
1147 } RTL_USER_PROCESS_PARAMETERS
, *PRTL_USER_PROCESS_PARAMETERS
;
1149 typedef struct _RTL_USER_PROCESS_INFORMATION
1152 HANDLE ProcessHandle
;
1153 HANDLE ThreadHandle
;
1155 SECTION_IMAGE_INFORMATION ImageInformation
;
1156 } RTL_USER_PROCESS_INFORMATION
, *PRTL_USER_PROCESS_INFORMATION
;
1159 // RTL Atom Table Structures
1161 typedef struct _RTL_ATOM_TABLE_ENTRY
1163 struct _RTL_ATOM_TABLE_ENTRY
*HashLink
;
1166 USHORT ReferenceCount
;
1170 } RTL_ATOM_TABLE_ENTRY
, *PRTL_ATOM_TABLE_ENTRY
;
1172 typedef struct _RTL_ATOM_TABLE
1177 #ifdef NTOS_MODE_USER
1178 RTL_CRITICAL_SECTION CriticalSection
;
1180 FAST_MUTEX FastMutex
;
1185 #ifdef NTOS_MODE_USER
1186 RTL_HANDLE_TABLE RtlHandleTable
;
1188 PHANDLE_TABLE ExHandleTable
;
1191 ULONG NumberOfBuckets
;
1192 PRTL_ATOM_TABLE_ENTRY Buckets
[1];
1193 } RTL_ATOM_TABLE
, *PRTL_ATOM_TABLE
;
1197 // System Time and Timezone Structures
1199 typedef struct _SYSTEMTIME
1208 USHORT wMilliseconds
;
1209 } SYSTEMTIME
, *PSYSTEMTIME
, *LPSYSTEMTIME
;
1211 typedef struct _TIME_ZONE_INFORMATION
1214 WCHAR StandardName
[32];
1215 SYSTEMTIME StandardDate
;
1217 WCHAR DaylightName
[32];
1218 SYSTEMTIME DaylightDate
;
1220 } TIME_ZONE_INFORMATION
, *PTIME_ZONE_INFORMATION
, *LPTIME_ZONE_INFORMATION
;
1224 // Native version of Timezone Structure
1226 typedef LPTIME_ZONE_INFORMATION PRTL_TIME_ZONE_INFORMATION
;
1231 typedef struct _RTL_PATCH_HEADER
1233 LIST_ENTRY PatchList
;
1234 PVOID PatchImageBase
;
1235 struct _RTL_PATCH_HEADER
*NextPath
;
1238 struct _HOTPATCH_HEADER
*HotpatchHeader
;
1239 UNICODE_STRING TargetDllName
;
1240 PVOID TargetDllBase
;
1241 PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry
;
1242 PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry
;
1243 struct _SYSTEM_HOTPATCH_CODE_INFORMATION
*CodeInfo
;
1244 } RTL_PATCH_HEADER
, *PRTL_PATCH_HEADER
;
1247 // Header for NLS Files
1249 typedef struct _NLS_FILE_HEADER
1253 USHORT MaximumCharacterSize
;
1255 USHORT UniDefaultChar
;
1256 USHORT TransDefaultChar
;
1257 USHORT TransUniDefaultChar
;
1258 UCHAR LeadByte
[MAXIMUM_LEADBYTES
];
1259 } NLS_FILE_HEADER
, *PNLS_FILE_HEADER
;
1264 typedef struct _RTL_STACK_TRACE_ENTRY
1266 struct _RTL_STACK_TRACE_ENTRY
*HashChain
;
1270 PVOID BackTrace
[32];
1271 } RTL_STACK_TRACE_ENTRY
, *PRTL_STACK_TRACE_ENTRY
;
1273 typedef struct _STACK_TRACE_DATABASE
1275 RTL_CRITICAL_SECTION CriticalSection
;
1276 } STACK_TRACE_DATABASE
, *PSTACK_TRACE_DATABASE
;
1278 #ifndef NTOS_MODE_USER
1281 // Message Resource Entry, Block and Data
1283 typedef struct _MESSAGE_RESOURCE_ENTRY
1287 UCHAR Text
[ANYSIZE_ARRAY
];
1288 } MESSAGE_RESOURCE_ENTRY
, *PMESSAGE_RESOURCE_ENTRY
;
1290 typedef struct _MESSAGE_RESOURCE_BLOCK
1294 ULONG OffsetToEntries
;
1295 } MESSAGE_RESOURCE_BLOCK
, *PMESSAGE_RESOURCE_BLOCK
;
1297 typedef struct _MESSAGE_RESOURCE_DATA
1299 ULONG NumberOfBlocks
;
1300 MESSAGE_RESOURCE_BLOCK Blocks
[ANYSIZE_ARRAY
];
1301 } MESSAGE_RESOURCE_DATA
, *PMESSAGE_RESOURCE_DATA
;