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 #define HEAP_CLASS_0 0x00000000
80 #define HEAP_CLASS_1 0x00001000
81 #define HEAP_CLASS_2 0x00002000
82 #define HEAP_CLASS_3 0x00003000
83 #define HEAP_CLASS_4 0x00004000
84 #define HEAP_CLASS_5 0x00005000
85 #define HEAP_CLASS_6 0x00006000
86 #define HEAP_CLASS_7 0x00007000
87 #define HEAP_CLASS_8 0x00008000
88 #define HEAP_CLASS_MASK 0x0000F000
93 #define RTL_REGISTRY_ABSOLUTE 0
94 #define RTL_REGISTRY_SERVICES 1
95 #define RTL_REGISTRY_CONTROL 2
96 #define RTL_REGISTRY_WINDOWS_NT 3
97 #define RTL_REGISTRY_DEVICEMAP 4
98 #define RTL_REGISTRY_USER 5
99 #define RTL_REGISTRY_MAXIMUM 6
100 #define RTL_REGISTRY_HANDLE 0x40000000
101 #define RTL_REGISTRY_OPTIONAL 0x80000000
102 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
103 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
104 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
105 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
106 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
107 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
108 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
113 #define VER_MINORVERSION 0x0000001
114 #define VER_MAJORVERSION 0x0000002
115 #define VER_BUILDNUMBER 0x0000004
116 #define VER_PLATFORMID 0x0000008
117 #define VER_SERVICEPACKMINOR 0x0000010
118 #define VER_SERVICEPACKMAJOR 0x0000020
119 #define VER_SUITENAME 0x0000040
120 #define VER_PRODUCT_TYPE 0x0000080
121 #define VER_PLATFORM_WIN32s 0
122 #define VER_PLATFORM_WIN32_WINDOWS 1
123 #define VER_PLATFORM_WIN32_NT 2
125 #define VER_GREATER 2
126 #define VER_GREATER_EQUAL 3
128 #define VER_LESS_EQUAL 5
131 #define VER_CONDITION_MASK 7
132 #define VER_NUM_BITS_PER_CONDITION_MASK 3
137 #define TIME_ZONE_ID_UNKNOWN 0
138 #define TIME_ZONE_ID_STANDARD 1
139 #define TIME_ZONE_ID_DAYLIGHT 2
142 // RTL Lock Type (Critical Section or Resource)
144 #define RTL_CRITSECT_TYPE 0
145 #define RTL_RESOURCE_TYPE 1
148 // RtlAcquirePrivileges Flags
150 #define RTL_ACQUIRE_PRIVILEGE_IMPERSONATE 1
151 #define RTL_ACQUIRE_PRIVILEGE_PROCESS 2
153 #ifdef NTOS_MODE_USER
156 // String Hash Algorithms
158 #define HASH_STRING_ALGORITHM_DEFAULT 0
159 #define HASH_STRING_ALGORITHM_X65599 1
160 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
163 // RtlDuplicateString Flags
165 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
166 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
171 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
172 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
173 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
176 // Message Resource Flag
178 #define MESSAGE_RESOURCE_UNICODE 0x0001
181 #define MAXIMUM_LEADBYTES 12
186 #define RTL_DEBUG_QUERY_MODULES 0x01
187 #define RTL_DEBUG_QUERY_BACKTRACES 0x02
188 #define RTL_DEBUG_QUERY_HEAPS 0x04
189 #define RTL_DEBUG_QUERY_HEAP_TAGS 0x08
190 #define RTL_DEBUG_QUERY_HEAP_BLOCKS 0x10
191 #define RTL_DEBUG_QUERY_LOCKS 0x20
196 #define RTL_HANDLE_VALID 0x1
201 #define RTL_ATOM_IS_PINNED 0x1
204 // Critical section lock bits
206 #define CS_LOCK_BIT 0x1
207 #define CS_LOCK_BIT_V 0x0
208 #define CS_LOCK_WAITER_WOKEN 0x2
209 #define CS_LOCK_WAITER_INC 0x4
214 #ifdef NTOS_MODE_USER
215 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG
;
216 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG
;
219 // Constant String Macro
221 #define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
223 sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
224 sizeof(__SOURCE_STRING__), \
225 (__SOURCE_STRING__) \
230 #ifdef NTOS_MODE_USER
233 // Table and Compare result types
235 typedef enum _TABLE_SEARCH_RESULT
241 } TABLE_SEARCH_RESULT
;
243 typedef enum _RTL_GENERIC_COMPARE_RESULTS
248 } RTL_GENERIC_COMPARE_RESULTS
;
253 // ACL Query Information Classes
255 typedef enum _ACL_INFORMATION_CLASS
257 AclRevisionInformation
= 1,
259 } ACL_INFORMATION_CLASS
;
266 typedef enum _RTL_PATH_TYPE
269 RtlPathTypeUncAbsolute
,
270 RtlPathTypeDriveAbsolute
,
271 RtlPathTypeDriveRelative
,
274 RtlPathTypeLocalDevice
,
275 RtlPathTypeRootLocalDevice
,
278 #ifndef NTOS_MODE_USER
281 // Callback function for RTL Timers or Registered Waits
284 (NTAPI
*WAITORTIMERCALLBACKFUNC
)(
286 BOOLEAN fTimerOrWaitFired
290 // Handler during Vectored RTL Exceptions
293 (NTAPI
*PVECTORED_EXCEPTION_HANDLER
)(
294 PEXCEPTION_POINTERS ExceptionPointers
300 // Handler during regular RTL Exceptions
302 typedef EXCEPTION_DISPOSITION
303 (NTAPI
*PEXCEPTION_ROUTINE
)(
304 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
305 IN PVOID EstablisherFrame
,
306 IN OUT
struct _CONTEXT
*ContextRecord
,
307 IN OUT PVOID DispatcherContext
311 // RTL Library Allocation/Free Routines
314 (NTAPI
*PRTL_ALLOCATE_STRING_ROUTINE
)(
319 (NTAPI
*PRTL_REALLOCATE_STRING_ROUTINE
)(
320 SIZE_T NumberOfBytes
,
326 (NTAPI
*PRTL_FREE_STRING_ROUTINE
)(
330 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine
;
331 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine
;
332 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine
;
337 // Callback for RTL Heap Enumeration
340 (*PHEAP_ENUMERATION_ROUTINE
)(
346 // Thread and Process Start Routines for RtlCreateUserThread/Process
348 typedef ULONG (NTAPI
*PTHREAD_START_ROUTINE
)(
353 (NTAPI
*PRTL_BASE_PROCESS_START_ROUTINE
)(
354 PTHREAD_START_ROUTINE StartAddress
,
359 // Declare empty structure definitions so that they may be referenced by
360 // routines before they are defined
362 struct _RTL_AVL_TABLE
;
363 struct _RTL_GENERIC_TABLE
;
365 typedef struct _COMPRESSED_DATA_INFO COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
368 // Routines and callbacks for the RTL AVL/Generic Table package
371 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
)(
372 struct _RTL_AVL_TABLE
*Table
,
377 typedef RTL_GENERIC_COMPARE_RESULTS
378 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
379 struct _RTL_AVL_TABLE
*Table
,
384 typedef RTL_GENERIC_COMPARE_RESULTS
385 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
386 struct _RTL_GENERIC_TABLE
*Table
,
392 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
393 struct _RTL_GENERIC_TABLE
*Table
,
398 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
399 struct _RTL_GENERIC_TABLE
*Table
,
404 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
405 struct _RTL_AVL_TABLE
*Table
,
410 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
411 struct _RTL_AVL_TABLE
*Table
,
416 // RTL Query Registry callback
419 (NTAPI
*PRTL_QUERY_REGISTRY_ROUTINE
)(
423 IN ULONG ValueLength
,
425 IN PVOID EntryContext
429 // RTL Range List callbacks
431 #ifdef NTOS_MODE_USER
433 (NTAPI
*PRTL_CONFLICT_RANGE_CALLBACK
)(
435 struct _RTL_RANGE
*Range
439 // Custom Heap Commit Routine for RtlCreateHeap
442 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
)(
444 IN OUT PVOID
*CommitAddress
,
445 IN OUT PSIZE_T CommitSize
449 // Version Info redefinitions
451 typedef OSVERSIONINFOW RTL_OSVERSIONINFOW
;
452 typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW
;
453 typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW
;
454 typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW
;
457 // Simple pointer definitions
459 typedef ACL_REVISION_INFORMATION
*PACL_REVISION_INFORMATION
;
460 typedef ACL_SIZE_INFORMATION
*PACL_SIZE_INFORMATION
;
463 // Parameters for RtlCreateHeap
465 typedef struct _RTL_HEAP_PARAMETERS
468 SIZE_T SegmentReserve
;
469 SIZE_T SegmentCommit
;
470 SIZE_T DeCommitFreeBlockThreshold
;
471 SIZE_T DeCommitTotalFreeThreshold
;
472 SIZE_T MaximumAllocationSize
;
473 SIZE_T VirtualMemoryThreshold
;
474 SIZE_T InitialCommit
;
475 SIZE_T InitialReserve
;
476 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
478 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
481 // RTL Bitmap structures
483 typedef struct _RTL_BITMAP
487 } RTL_BITMAP
, *PRTL_BITMAP
;
489 typedef struct _RTL_BITMAP_RUN
493 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
496 // RtlGenerateXxxName context
498 typedef struct _GENERATE_NAME_CONTEXT
501 BOOLEAN CheckSumInserted
;
504 ULONG ExtensionLength
;
505 WCHAR ExtensionBuffer
[4];
506 ULONG LastIndexValue
;
507 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
510 // RTL Splay and Balanced Links structures
512 typedef struct _RTL_SPLAY_LINKS
514 struct _RTL_SPLAY_LINKS
*Parent
;
515 struct _RTL_SPLAY_LINKS
*LeftChild
;
516 struct _RTL_SPLAY_LINKS
*RightChild
;
517 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
519 typedef struct _RTL_BALANCED_LINKS
521 struct _RTL_BALANCED_LINKS
*Parent
;
522 struct _RTL_BALANCED_LINKS
*LeftChild
;
523 struct _RTL_BALANCED_LINKS
*RightChild
;
526 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
529 // RTL Avl/Generic Tables
531 typedef struct _RTL_GENERIC_TABLE
533 PRTL_SPLAY_LINKS TableRoot
;
534 LIST_ENTRY InsertOrderList
;
535 PLIST_ENTRY OrderedPointer
;
536 ULONG WhichOrderedElement
;
537 ULONG NumberGenericTableElements
;
538 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
539 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
540 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
542 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
544 typedef struct _RTL_AVL_TABLE
546 RTL_BALANCED_LINKS BalancedRoot
;
547 PVOID OrderedPointer
;
548 ULONG WhichOrderedElement
;
549 ULONG NumberGenericTableElements
;
551 PRTL_BALANCED_LINKS RestartKey
;
553 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
554 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
555 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
557 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
560 // RtlQueryRegistry Data
562 typedef struct _RTL_QUERY_REGISTRY_TABLE
564 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
;
571 } RTL_QUERY_REGISTRY_TABLE
, *PRTL_QUERY_REGISTRY_TABLE
;
574 // RTL Unicode Table Structures
576 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
580 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
581 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
582 RTL_SPLAY_LINKS Links
;
583 PUNICODE_STRING Prefix
;
584 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
586 typedef struct _UNICODE_PREFIX_TABLE
590 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
591 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
592 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
595 // Time Structure for RTL Time calls
597 typedef struct _TIME_FIELDS
607 } TIME_FIELDS
, *PTIME_FIELDS
;
610 // Activation Context
612 typedef PVOID PACTIVATION_CONTEXT
;
615 // Activation Context Frame
617 typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
619 struct __RTL_ACTIVATION_CONTEXT_STACK_FRAME
*Previous
;
620 PACTIVATION_CONTEXT ActivationContext
;
622 } RTL_ACTIVATION_CONTEXT_STACK_FRAME
,
623 *PRTL_ACTIVATION_CONTEXT_STACK_FRAME
;
625 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
629 RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame
;
634 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
,
635 *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
;
645 ACCESS_MASK AccessMask
;
649 // Information Structures for RTL Debug Functions
651 typedef struct _RTL_PROCESS_MODULE_INFORMATION
658 USHORT LoadOrderIndex
;
659 USHORT InitOrderIndex
;
661 USHORT OffsetToFileName
;
662 CHAR FullPathName
[256];
663 } RTL_PROCESS_MODULE_INFORMATION
, *PRTL_PROCESS_MODULE_INFORMATION
;
665 typedef struct _RTL_PROCESS_MODULES
667 ULONG NumberOfModules
;
668 RTL_PROCESS_MODULE_INFORMATION Modules
[1];
669 } RTL_PROCESS_MODULES
, *PRTL_PROCESS_MODULES
;
671 typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
674 RTL_PROCESS_MODULE_INFORMATION BaseInfo
;
678 } RTL_PROCESS_MODULE_INFORMATION_EX
, *PRTL_PROCESS_MODULE_INFORMATION_EX
;
680 typedef struct _RTL_HEAP_INFORMATION
684 USHORT EntryOverhead
;
685 USHORT CreatorBackTraceIndex
;
686 ULONG BytesAllocated
;
687 ULONG BytesCommitted
;
689 ULONG NumberOfEntries
;
690 ULONG NumberOfPseudoTags
;
691 ULONG PseudoTagGranularity
;
695 } RTL_HEAP_INFORMATION
, *PRTL_HEAP_INFORMATION
;
697 typedef struct _RTL_PROCESS_HEAPS
700 RTL_HEAP_INFORMATION Heaps
[1];
701 } RTL_PROCESS_HEAPS
, *PRTL_PROCESS_HEAPS
;
703 typedef struct _RTL_PROCESS_LOCK_INFORMATION
707 USHORT CreatorBackTraceIndex
;
710 ULONG ContentionCount
;
712 ULONG RecursionCount
;
713 ULONG NumberOfSharedWaiters
;
714 ULONG NumberOfExclusiveWaiters
;
715 } RTL_PROCESS_LOCK_INFORMATION
, *PRTL_PROCESS_LOCK_INFORMATION
;
717 typedef struct _RTL_PROCESS_LOCKS
720 RTL_PROCESS_LOCK_INFORMATION Locks
[1];
721 } RTL_PROCESS_LOCKS
, *PRTL_PROCESS_LOCKS
;
723 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
725 PVOID SymbolicBackTrace
;
730 } RTL_PROCESS_BACKTRACE_INFORMATION
, *PRTL_PROCESS_BACKTRACE_INFORMATION
;
732 typedef struct _RTL_PROCESS_BACKTRACES
734 ULONG CommittedMemory
;
735 ULONG ReservedMemory
;
736 ULONG NumberOfBackTraceLookups
;
737 ULONG NumberOfBackTraces
;
738 RTL_PROCESS_BACKTRACE_INFORMATION BackTraces
[1];
739 } RTL_PROCESS_BACKTRACES
, *PRTL_PROCESS_BACKTRACES
;
741 typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
747 // Option array continues below
749 } RTL_PROCESS_VERIFIER_OPTIONS
, *PRTL_PROCESS_VERIFIER_OPTIONS
;
751 typedef struct _RTL_DEBUG_INFORMATION
753 HANDLE SectionHandleClient
;
754 PVOID ViewBaseClient
;
755 PVOID ViewBaseTarget
;
757 HANDLE EventPairClient
;
758 PVOID EventPairTarget
;
759 HANDLE TargetProcessId
;
760 HANDLE TargetThreadHandle
;
767 PRTL_PROCESS_MODULES Modules
;
768 PRTL_PROCESS_MODULE_INFORMATION_EX ModulesEx
;
770 PRTL_PROCESS_BACKTRACES BackTraces
;
771 PRTL_PROCESS_HEAPS Heaps
;
772 PRTL_PROCESS_LOCKS Locks
;
774 HANDLE TargetProcessHandle
;
775 RTL_PROCESS_VERIFIER_OPTIONS VerifierOptions
;
777 HANDLE CriticalSectionHandle
;
778 HANDLE CriticalSectionOwnerThread
;
780 } RTL_DEBUG_INFORMATION
, *PRTL_DEBUG_INFORMATION
;
783 // Unload Event Trace Structure for RtlGetUnloadEventTrace
785 typedef struct _RTL_UNLOAD_EVENT_TRACE
793 } RTL_UNLOAD_EVENT_TRACE
, *PRTL_UNLOAD_EVENT_TRACE
;
796 // RTL Handle Structures
798 typedef struct _RTL_HANDLE_TABLE_ENTRY
801 struct _RTL_HANDLE_TABLE_ENTRY
*NextFree
;
802 } RTL_HANDLE_TABLE_ENTRY
, *PRTL_HANDLE_TABLE_ENTRY
;
804 typedef struct _RTL_HANDLE_TABLE
806 ULONG MaximumNumberOfHandles
;
807 ULONG SizeOfHandleTableEntry
;
809 PRTL_HANDLE_TABLE_ENTRY FreeHandles
;
810 PRTL_HANDLE_TABLE_ENTRY CommittedHandles
;
811 PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles
;
812 PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles
;
813 } RTL_HANDLE_TABLE
, *PRTL_HANDLE_TABLE
;
818 typedef struct _EXCEPTION_REGISTRATION_RECORD
820 struct _EXCEPTION_REGISTRATION_RECORD
*Next
;
821 PEXCEPTION_ROUTINE Handler
;
822 } EXCEPTION_REGISTRATION_RECORD
, *PEXCEPTION_REGISTRATION_RECORD
;
825 // Current Directory Structures
827 typedef struct _CURDIR
829 UNICODE_STRING DosPath
;
833 typedef struct RTL_DRIVE_LETTER_CURDIR
838 UNICODE_STRING DosPath
;
839 } RTL_DRIVE_LETTER_CURDIR
, *PRTL_DRIVE_LETTER_CURDIR
;
842 // Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
844 typedef struct _RTL_ACQUIRE_STATE
847 HANDLE OldImpersonationToken
;
848 PTOKEN_PRIVILEGES OldPrivileges
;
849 PTOKEN_PRIVILEGES NewPrivileges
;
851 UCHAR OldPrivBuffer
[1024];
852 } RTL_ACQUIRE_STATE
, *PRTL_ACQUIRE_STATE
;
854 #ifndef NTOS_MODE_USER
857 // RTL Critical Section Structures
859 typedef struct _RTL_CRITICAL_SECTION_DEBUG
862 USHORT CreatorBackTraceIndex
;
863 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
864 LIST_ENTRY ProcessLocksList
;
866 ULONG ContentionCount
;
868 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
870 typedef struct _RTL_CRITICAL_SECTION
872 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
876 HANDLE LockSemaphore
;
878 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
883 // RTL Range List Structures
885 typedef struct _RTL_RANGE_LIST
891 } RTL_RANGE_LIST
, *PRTL_RANGE_LIST
;
893 typedef struct _RTL_RANGE
901 } RTL_RANGE
, *PRTL_RANGE
;
903 typedef struct _RANGE_LIST_ITERATOR
905 PLIST_ENTRY RangeListHead
;
906 PLIST_ENTRY MergedHead
;
909 } RTL_RANGE_LIST_ITERATOR
, *PRTL_RANGE_LIST_ITERATOR
;
914 typedef struct _RTL_RESOURCE
916 RTL_CRITICAL_SECTION Lock
;
917 HANDLE SharedSemaphore
;
919 HANDLE ExclusiveSemaphore
;
920 ULONG ExclusiveWaiters
;
925 } RTL_RESOURCE
, *PRTL_RESOURCE
;
928 // RTL Message Structures for PE Resources
930 typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
935 } RTL_MESSAGE_RESOURCE_ENTRY
, *PRTL_MESSAGE_RESOURCE_ENTRY
;
937 typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
941 ULONG OffsetToEntries
;
942 } RTL_MESSAGE_RESOURCE_BLOCK
, *PRTL_MESSAGE_RESOURCE_BLOCK
;
944 typedef struct _RTL_MESSAGE_RESOURCE_DATA
946 ULONG NumberOfBlocks
;
947 RTL_MESSAGE_RESOURCE_BLOCK Blocks
[1];
948 } RTL_MESSAGE_RESOURCE_DATA
, *PRTL_MESSAGE_RESOURCE_DATA
;
951 // Structures for RtlCreateUserProcess
953 typedef struct _RTL_USER_PROCESS_PARAMETERS
959 HANDLE ConsoleHandle
;
961 HANDLE StandardInput
;
962 HANDLE StandardOutput
;
963 HANDLE StandardError
;
964 CURDIR CurrentDirectory
;
965 UNICODE_STRING DllPath
;
966 UNICODE_STRING ImagePathName
;
967 UNICODE_STRING CommandLine
;
977 ULONG ShowWindowFlags
;
978 UNICODE_STRING WindowTitle
;
979 UNICODE_STRING DesktopInfo
;
980 UNICODE_STRING ShellInfo
;
981 UNICODE_STRING RuntimeData
;
982 RTL_DRIVE_LETTER_CURDIR CurrentDirectories
[32];
983 } RTL_USER_PROCESS_PARAMETERS
, *PRTL_USER_PROCESS_PARAMETERS
;
985 typedef struct _RTL_USER_PROCESS_INFORMATION
988 HANDLE ProcessHandle
;
991 SECTION_IMAGE_INFORMATION ImageInformation
;
992 } RTL_USER_PROCESS_INFORMATION
, *PRTL_USER_PROCESS_INFORMATION
;
995 // RTL Atom Table Structures
997 typedef struct _RTL_ATOM_TABLE_ENTRY
999 struct _RTL_ATOM_TABLE_ENTRY
*HashLink
;
1002 USHORT ReferenceCount
;
1006 } RTL_ATOM_TABLE_ENTRY
, *PRTL_ATOM_TABLE_ENTRY
;
1008 typedef struct _RTL_ATOM_TABLE
1013 #ifdef NTOS_MODE_USER
1014 RTL_CRITICAL_SECTION CriticalSection
;
1016 FAST_MUTEX FastMutex
;
1021 #ifdef NTOS_MODE_USER
1022 RTL_HANDLE_TABLE RtlHandleTable
;
1024 PHANDLE_TABLE ExHandleTable
;
1027 ULONG NumberOfBuckets
;
1028 PRTL_ATOM_TABLE_ENTRY Buckets
[1];
1029 } RTL_ATOM_TABLE
, *PRTL_ATOM_TABLE
;
1031 #ifndef NTOS_MODE_USER
1034 // System Time and Timezone Structures
1036 typedef struct _SYSTEMTIME
1045 USHORT wMilliseconds
;
1046 } SYSTEMTIME
, *PSYSTEMTIME
, *LPSYSTEMTIME
;
1048 typedef struct _TIME_ZONE_INFORMATION
1051 WCHAR StandardName
[32];
1052 SYSTEMTIME StandardDate
;
1054 WCHAR DaylightName
[32];
1055 SYSTEMTIME DaylightDate
;
1057 } TIME_ZONE_INFORMATION
, *PTIME_ZONE_INFORMATION
, *LPTIME_ZONE_INFORMATION
;
1064 typedef struct _RTL_PATCH_HEADER
1066 LIST_ENTRY PatchList
;
1067 PVOID PatchImageBase
;
1068 struct _RTL_PATCH_HEADER
*NextPath
;
1071 struct _HOTPATCH_HEADER
*HotpatchHeader
;
1072 UNICODE_STRING TargetDllName
;
1073 PVOID TargetDllBase
;
1074 PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry
;
1075 PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry
;
1076 struct _SYSTEM_HOTPATCH_CODE_INFORMATION
*CodeInfo
;
1077 } RTL_PATCH_HEADER
, *PRTL_PATCH_HEADER
;
1080 // Header for NLS Files
1082 typedef struct _NLS_FILE_HEADER
1086 USHORT MaximumCharacterSize
;
1088 USHORT UniDefaultChar
;
1089 USHORT TransDefaultChar
;
1090 USHORT TransUniDefaultChar
;
1091 USHORT DBCSCodePage
;
1092 UCHAR LeadByte
[MAXIMUM_LEADBYTES
];
1093 } NLS_FILE_HEADER
, *PNLS_FILE_HEADER
;
1098 typedef struct _RTL_STACK_TRACE_ENTRY
1100 struct _RTL_STACK_TRACE_ENTRY
*HashChain
;
1104 PVOID BackTrace
[32];
1105 } RTL_STACK_TRACE_ENTRY
, *PRTL_STACK_TRACE_ENTRY
;
1107 typedef struct _STACK_TRACE_DATABASE
1109 RTL_CRITICAL_SECTION CriticalSection
;
1110 } STACK_TRACE_DATABASE
, *PSTACK_TRACE_DATABASE
;
1112 #ifndef NTOS_MODE_USER
1115 // Message Resource Entry, Block and Data
1117 typedef struct _MESSAGE_RESOURCE_ENTRY
1121 UCHAR Text
[ANYSIZE_ARRAY
];
1122 } MESSAGE_RESOURCE_ENTRY
, *PMESSAGE_RESOURCE_ENTRY
;
1124 typedef struct _MESSAGE_RESOURCE_BLOCK
1128 ULONG OffsetToEntries
;
1129 } MESSAGE_RESOURCE_BLOCK
, *PMESSAGE_RESOURCE_BLOCK
;
1131 typedef struct _MESSAGE_RESOURCE_DATA
1133 ULONG NumberOfBlocks
;
1134 MESSAGE_RESOURCE_BLOCK Blocks
[ANYSIZE_ARRAY
];
1135 } MESSAGE_RESOURCE_DATA
, *PMESSAGE_RESOURCE_DATA
;