[SDK] One step further towards ReactOS source code tree restructure: the sdk folder...
[reactos.git] / reactos / include / ndk / rtltypes.h
diff --git a/reactos/include/ndk/rtltypes.h b/reactos/include/ndk/rtltypes.h
deleted file mode 100644 (file)
index 5a95ab2..0000000
+++ /dev/null
@@ -1,1782 +0,0 @@
-/*++ NDK Version: 0098
-
-Copyright (c) Alex Ionescu.  All rights reserved.
-
-Header Name:
-
-    rtltypes.h
-
-Abstract:
-
-    Type definitions for the Run-Time Library
-
-Author:
-
-    Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
-
---*/
-
-#ifndef _RTLTYPES_H
-#define _RTLTYPES_H
-
-//
-// Dependencies
-//
-#include <umtypes.h>
-#include <mmtypes.h>
-#include <ldrtypes.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//
-// Maximum Atom Length
-//
-#define RTL_MAXIMUM_ATOM_LENGTH                             255
-
-//
-// Process Parameters Flags
-//
-#define RTL_USER_PROCESS_PARAMETERS_NORMALIZED              0x01
-#define RTL_USER_PROCESS_PARAMETERS_PROFILE_USER            0x02
-#define RTL_USER_PROCESS_PARAMETERS_PROFILE_KERNEL          0x04
-#define RTL_USER_PROCESS_PARAMETERS_PROFILE_SERVER          0x08
-#define RTL_USER_PROCESS_PARAMETERS_UNKNOWN                 0x10
-#define RTL_USER_PROCESS_PARAMETERS_RESERVE_1MB             0x20
-#define RTL_USER_PROCESS_PARAMETERS_RESERVE_16MB            0x40
-#define RTL_USER_PROCESS_PARAMETERS_CASE_SENSITIVE          0x80
-#define RTL_USER_PROCESS_PARAMETERS_DISABLE_HEAP_CHECKS     0x100
-#define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_1            0x200
-#define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_2            0x400
-#define RTL_USER_PROCESS_PARAMETERS_PRIVATE_DLL_PATH        0x1000
-#define RTL_USER_PROCESS_PARAMETERS_LOCAL_DLL_PATH          0x2000
-#define RTL_USER_PROCESS_PARAMETERS_IMAGE_KEY_MISSING       0x4000
-#define RTL_USER_PROCESS_PARAMETERS_NX                      0x20000
-
-#define RTL_MAX_DRIVE_LETTERS 32
-#define RTL_DRIVE_LETTER_VALID (USHORT)0x0001
-
-//
-// End of Exception List
-//
-#define EXCEPTION_CHAIN_END                                 ((PEXCEPTION_REGISTRATION_RECORD)-1)
-
-//
-// Range and Range List Flags
-//
-#define RTL_RANGE_LIST_ADD_IF_CONFLICT                      0x00000001
-#define RTL_RANGE_LIST_ADD_SHARED                           0x00000002
-
-#define RTL_RANGE_SHARED                                    0x01
-#define RTL_RANGE_CONFLICT                                  0x02
-
-//
-// Flags in RTL_ACTIVATION_CONTEXT_STACK_FRAME (from Checked NTDLL)
-//
-#define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_RELEASE_ON_DEACTIVATION         0x01
-#define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_NO_DEACTIVATE                   0x02
-#define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_ON_FREE_LIST                    0x04
-#define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_HEAP_ALLOCATED                  0x08
-#define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_NOT_REALLY_ACTIVATED            0x10
-#define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_ACTIVATED                       0x20
-#define RTL_ACTIVATION_CONTEXT_STACK_FRAME_FLAG_DEACTIVATED                     0x40
-
-//
-// Activation Context Frame Flags (from Checked NTDLL)
-//
-#define RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_FORMAT_WHISTLER     0x01
-
-//
-// RtlActivateActivationContextEx Flags (from Checked NTDLL)
-//
-#define RTL_ACTIVATE_ACTIVATION_CONTEXT_EX_FLAG_RELEASE_ON_STACK_DEALLOCATION   0x01
-
-//
-// RtlDeactivateActivationContext Flags (based on Win32 flag and name of above)
-//
-#define RTL_DEACTIVATE_ACTIVATION_CONTEXT_FLAG_FORCE_EARLY_DEACTIVATION         0x01
-
-//
-// RtlQueryActivationContext Flags (based on Win32 flag and name of above)
-//
-#define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_USE_ACTIVE_ACTIVATION_CONTEXT         0x01
-#define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_IS_HMODULE                            0x02
-#define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_IS_ADDRESS                            0x04
-#define RTL_QUERY_ACTIVATION_CONTEXT_FLAG_NO_ADDREF                             0x80000000
-
-//
-// Public Heap Flags
-//
-#if !defined(NTOS_MODE_USER) && !defined(_NTIFS_)
-#define HEAP_NO_SERIALIZE                                   0x00000001
-#define HEAP_GROWABLE                                       0x00000002
-#define HEAP_GENERATE_EXCEPTIONS                            0x00000004
-#define HEAP_ZERO_MEMORY                                    0x00000008
-#define HEAP_REALLOC_IN_PLACE_ONLY                          0x00000010
-#define HEAP_TAIL_CHECKING_ENABLED                          0x00000020
-#define HEAP_FREE_CHECKING_ENABLED                          0x00000040
-#define HEAP_DISABLE_COALESCE_ON_FREE                       0x00000080
-#define HEAP_CREATE_ALIGN_16                                0x00010000
-#define HEAP_CREATE_ENABLE_TRACING                          0x00020000
-#define HEAP_CREATE_ENABLE_EXECUTE                          0x00040000
-#endif
-
-//
-// User-Defined Heap Flags and Classes
-//
-#define HEAP_SETTABLE_USER_VALUE                            0x00000100
-#define HEAP_SETTABLE_USER_FLAG1                            0x00000200
-#define HEAP_SETTABLE_USER_FLAG2                            0x00000400
-#define HEAP_SETTABLE_USER_FLAG3                            0x00000800
-#define HEAP_SETTABLE_USER_FLAGS                            0x00000E00
-#define HEAP_CLASS_0                                        0x00000000
-#define HEAP_CLASS_1                                        0x00001000
-#define HEAP_CLASS_2                                        0x00002000
-#define HEAP_CLASS_3                                        0x00003000
-#define HEAP_CLASS_4                                        0x00004000
-#define HEAP_CLASS_5                                        0x00005000
-#define HEAP_CLASS_6                                        0x00006000
-#define HEAP_CLASS_7                                        0x00007000
-#define HEAP_CLASS_8                                        0x00008000
-#define HEAP_CLASS_MASK                                     0x0000F000
-
-//
-// Internal HEAP Structure Flags
-//
-#define HEAP_FLAG_PAGE_ALLOCS                               0x01000000
-#define HEAP_PROTECTION_ENABLED                             0x02000000
-#define HEAP_BREAK_WHEN_OUT_OF_VM                           0x04000000
-#define HEAP_NO_ALIGNMENT                                   0x08000000
-#define HEAP_CAPTURE_STACK_BACKTRACES                       0x08000000
-#define HEAP_SKIP_VALIDATION_CHECKS                         0x10000000
-#define HEAP_VALIDATE_ALL_ENABLED                           0x20000000
-#define HEAP_VALIDATE_PARAMETERS_ENABLED                    0x40000000
-#define HEAP_LOCK_USER_ALLOCATED                            0x80000000
-
-//
-// Heap Validation Flags
-//
-#define HEAP_CREATE_VALID_MASK                              \
-    (HEAP_NO_SERIALIZE              |                       \
-     HEAP_GROWABLE                  |                       \
-     HEAP_GENERATE_EXCEPTIONS       |                       \
-     HEAP_ZERO_MEMORY               |                       \
-     HEAP_REALLOC_IN_PLACE_ONLY     |                       \
-     HEAP_TAIL_CHECKING_ENABLED     |                       \
-     HEAP_FREE_CHECKING_ENABLED     |                       \
-     HEAP_DISABLE_COALESCE_ON_FREE  |                       \
-     HEAP_CLASS_MASK                |                       \
-     HEAP_CREATE_ALIGN_16           |                       \
-     HEAP_CREATE_ENABLE_TRACING     |                       \
-     HEAP_CREATE_ENABLE_EXECUTE)
-#ifdef C_ASSERT
-C_ASSERT(HEAP_CREATE_VALID_MASK == 0x0007F0FF);
-#endif
-
-//
-// Native image architecture
-//
-#if defined(_M_IX86)
-#define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_I386
-#elif defined(_M_ARM)
-#define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_ARM
-#elif defined(_M_AMD64)
-#define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_AMD64
-#else
-#error Define these please!
-#endif
-
-//
-// Registry Keys
-//
-#define RTL_REGISTRY_ABSOLUTE                               0
-#define RTL_REGISTRY_SERVICES                               1
-#define RTL_REGISTRY_CONTROL                                2
-#define RTL_REGISTRY_WINDOWS_NT                             3
-#define RTL_REGISTRY_DEVICEMAP                              4
-#define RTL_REGISTRY_USER                                   5
-#define RTL_REGISTRY_MAXIMUM                                6
-#define RTL_REGISTRY_HANDLE                                 0x40000000
-#define RTL_REGISTRY_OPTIONAL                               0x80000000
-#define RTL_QUERY_REGISTRY_SUBKEY                           0x00000001
-#define RTL_QUERY_REGISTRY_TOPKEY                           0x00000002
-#define RTL_QUERY_REGISTRY_REQUIRED                         0x00000004
-#define RTL_QUERY_REGISTRY_NOVALUE                          0x00000008
-#define RTL_QUERY_REGISTRY_NOEXPAND                         0x00000010
-#define RTL_QUERY_REGISTRY_DIRECT                           0x00000020
-#define RTL_QUERY_REGISTRY_DELETE                           0x00000040
-
-//
-// Versioning
-//
-#define VER_MINORVERSION                                    0x0000001
-#define VER_MAJORVERSION                                    0x0000002
-#define VER_BUILDNUMBER                                     0x0000004
-#define VER_PLATFORMID                                      0x0000008
-#define VER_SERVICEPACKMINOR                                0x0000010
-#define VER_SERVICEPACKMAJOR                                0x0000020
-#define VER_SUITENAME                                       0x0000040
-#define VER_PRODUCT_TYPE                                    0x0000080
-#define VER_PLATFORM_WIN32s                                 0
-#define VER_PLATFORM_WIN32_WINDOWS                          1
-#define VER_PLATFORM_WIN32_NT                               2
-#define VER_EQUAL                                           1
-#define VER_GREATER                                         2
-#define VER_GREATER_EQUAL                                   3
-#define VER_LESS                                            4
-#define VER_LESS_EQUAL                                      5
-#define VER_AND                                             6
-#define VER_OR                                              7
-#define VER_CONDITION_MASK                                  7
-#define VER_NUM_BITS_PER_CONDITION_MASK                     3
-
-//
-// Timezone IDs
-//
-#define TIME_ZONE_ID_UNKNOWN                                0
-#define TIME_ZONE_ID_STANDARD                               1
-#define TIME_ZONE_ID_DAYLIGHT                               2
-
-//
-// Maximum Path Length
-//
-#define MAX_PATH                                            260
-
-//
-// RTL Lock Type (Critical Section or Resource)
-//
-#define RTL_CRITSECT_TYPE                                   0
-#define RTL_RESOURCE_TYPE                                   1
-
-//
-// RtlAcquirePrivileges Flags
-//
-#define RTL_ACQUIRE_PRIVILEGE_IMPERSONATE                   1
-#define RTL_ACQUIRE_PRIVILEGE_PROCESS                       2
-
-#ifdef NTOS_MODE_USER
-
-//
-// String Hash Algorithms
-//
-#define HASH_STRING_ALGORITHM_DEFAULT                       0
-#define HASH_STRING_ALGORITHM_X65599                        1
-#define HASH_STRING_ALGORITHM_INVALID                       0xffffffff
-
-//
-// RtlDuplicateString Flags
-//
-#define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE         1
-#define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING   2
-
-//
-// RtlFindCharInUnicodeString Flags
-//
-#define RTL_FIND_CHAR_IN_UNICODE_STRING_START_AT_END        1
-#define RTL_FIND_CHAR_IN_UNICODE_STRING_COMPLEMENT_CHAR_SET 2
-#define RTL_FIND_CHAR_IN_UNICODE_STRING_CASE_INSENSITIVE    4
-
-//
-// RtlImageNtHeaderEx Flags
-//
-#define RTL_IMAGE_NT_HEADER_EX_FLAG_NO_RANGE_CHECK          0x00000001
-
-//
-// RtlDosApplyFileIsolationRedirection_Ustr Flags
-//
-#define RTL_DOS_APPLY_FILE_REDIRECTION_USTR_FLAG_RESPECT_DOT_LOCAL  0x01
-
-//
-// Codepages
-//
-#define NLS_MB_CODE_PAGE_TAG                                NlsMbCodePageTag
-#define NLS_MB_OEM_CODE_PAGE_TAG                            NlsMbOemCodePageTag
-#define NLS_OEM_LEAD_BYTE_INFO                              NlsOemLeadByteInfo
-
-//
-// Activation Contexts
-//
-#define INVALID_ACTIVATION_CONTEXT                          (PVOID)0xFFFFFFFF
-
-//
-// C++ CONST casting
-//
-#if defined(__cplusplus)
-#define RTL_CONST_CAST(type)                    const_cast<type>
-#else
-#define RTL_CONST_CAST(type)                    (type)
-#endif
-
-//
-// Constant String Macro
-//
-#define RTL_CONSTANT_STRING(__SOURCE_STRING__)                  \
-{                                                               \
-    sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
-    sizeof(__SOURCE_STRING__),                                  \
-    (__SOURCE_STRING__)                                         \
-}
-
-//
-// Constant Object Attributes Macro
-//
-#define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)                    \
-{                                                               \
-    sizeof(OBJECT_ATTRIBUTES),                                  \
-    NULL,                                                       \
-    RTL_CONST_CAST(PUNICODE_STRING)(n),                         \
-    a,                                                          \
-    NULL,                                                       \
-    NULL                                                        \
-}
-
-#define RTL_INIT_OBJECT_ATTRIBUTES(n, a)                        \
-    RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
-
-#else /* NTOS_MODE_USER */
-//
-// Message Resource Flag
-//
-#define MESSAGE_RESOURCE_UNICODE                            0x0001
-
-#endif /* !NTOS_MODE_USER */
-#define MAXIMUM_LEADBYTES                                   12
-
-//
-// RTL Debug Queries
-//
-#define RTL_DEBUG_QUERY_MODULES                             0x01
-#define RTL_DEBUG_QUERY_BACKTRACES                          0x02
-#define RTL_DEBUG_QUERY_HEAPS                               0x04
-#define RTL_DEBUG_QUERY_HEAP_TAGS                           0x08
-#define RTL_DEBUG_QUERY_HEAP_BLOCKS                         0x10
-#define RTL_DEBUG_QUERY_LOCKS                               0x20
-
-//
-// RTL Handle Flags
-//
-#define RTL_HANDLE_VALID                                    0x1
-
-//
-// RTL Atom Flags
-//
-#define RTL_ATOM_IS_PINNED                                  0x1
-
-//
-// Critical section lock bits
-//
-#define CS_LOCK_BIT                                         0x1
-#define CS_LOCK_BIT_V                                       0x0
-#define CS_LOCK_WAITER_WOKEN                                0x2
-#define CS_LOCK_WAITER_INC                                  0x4
-
-//
-// Codepage Tags
-//
-#ifdef NTOS_MODE_USER
-extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG;
-extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
-
-//
-// Constant String Macro
-//
-#define RTL_CONSTANT_STRING(__SOURCE_STRING__)                  \
-{                                                               \
-    sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
-    sizeof(__SOURCE_STRING__),                                  \
-    (__SOURCE_STRING__)                                         \
-}
-
-#endif /* NTOS_MODE_USER */
-
-#ifdef NTOS_MODE_USER
-
-//
-// Boot Status Data Field Types
-//
-typedef enum _RTL_BSD_ITEM_TYPE
-{
-    RtlBsdItemVersionNumber,
-    RtlBsdItemProductType,
-    RtlBsdItemAabEnabled,
-    RtlBsdItemAabTimeout,
-    RtlBsdItemBootGood,
-    RtlBsdItemBootShutdown,
-    RtlBsdItemMax
-} RTL_BSD_ITEM_TYPE, *PRTL_BSD_ITEM_TYPE;
-
-//
-// Table and Compare result types
-//
-typedef enum _TABLE_SEARCH_RESULT
-{
-    TableEmptyTree,
-    TableFoundNode,
-    TableInsertAsLeft,
-    TableInsertAsRight
-} TABLE_SEARCH_RESULT;
-
-typedef enum _RTL_GENERIC_COMPARE_RESULTS
-{
-    GenericLessThan,
-    GenericGreaterThan,
-    GenericEqual
-} RTL_GENERIC_COMPARE_RESULTS;
-
-#endif /* NTOS_MODE_USER */
-
-//
-// RTL Path Types
-//
-typedef enum _RTL_PATH_TYPE
-{
-    RtlPathTypeUnknown,
-    RtlPathTypeUncAbsolute,
-    RtlPathTypeDriveAbsolute,
-    RtlPathTypeDriveRelative,
-    RtlPathTypeRooted,
-    RtlPathTypeRelative,
-    RtlPathTypeLocalDevice,
-    RtlPathTypeRootLocalDevice,
-} RTL_PATH_TYPE;
-
-#ifndef NTOS_MODE_USER
-
-//
-// Heap Information Class
-//
-typedef enum _HEAP_INFORMATION_CLASS
-{
-    HeapCompatibilityInformation,
-    HeapEnableTerminationOnCorruption
-} HEAP_INFORMATION_CLASS;
-
-//
-// Callback function for RTL Timers or Registered Waits
-//
-typedef VOID
-(NTAPI *WAITORTIMERCALLBACKFUNC)(
-    PVOID pvContext,
-    BOOLEAN fTimerOrWaitFired
-);
-
-//
-// Handler during Vectored RTL Exceptions
-//
-typedef LONG
-(NTAPI *PVECTORED_EXCEPTION_HANDLER)(
-    PEXCEPTION_POINTERS ExceptionPointers
-);
-
-//
-// Worker Thread Callback for Rtl
-//
-typedef VOID
-(NTAPI *WORKERCALLBACKFUNC)(
-    _In_ PVOID Context
-);
-
-#else /* !NTOS_MODE_USER */
-
-//
-// RTL Library Allocation/Free Routines
-//
-typedef PVOID
-(NTAPI *PRTL_ALLOCATE_STRING_ROUTINE)(
-    SIZE_T NumberOfBytes
-);
-
-typedef PVOID
-(NTAPI *PRTL_REALLOCATE_STRING_ROUTINE)(
-    SIZE_T NumberOfBytes,
-    PVOID Buffer
-);
-
-typedef
-VOID
-(NTAPI *PRTL_FREE_STRING_ROUTINE)(
-    PVOID Buffer
-);
-
-extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine;
-extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine;
-extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine;
-
-#endif /* NTOS_MODE_USER */
-
-//
-// Unhandled Exception Filter
-//
-typedef ULONG
-(NTAPI *RTLP_UNHANDLED_EXCEPTION_FILTER)(
-    _In_ struct _EXCEPTION_POINTERS *ExceptionInfo
-);
-typedef RTLP_UNHANDLED_EXCEPTION_FILTER *PRTLP_UNHANDLED_EXCEPTION_FILTER;
-
-//
-// Callback for RTL Heap Enumeration
-//
-typedef NTSTATUS
-(NTAPI *PHEAP_ENUMERATION_ROUTINE)(
-    _In_ PVOID HeapHandle,
-    _In_ PVOID UserParam
-);
-
-//
-// Thread and Process Start Routines for RtlCreateUserThread/Process
-//
-typedef ULONG (NTAPI *PTHREAD_START_ROUTINE)(
-    PVOID Parameter
-);
-
-typedef VOID
-(NTAPI *PRTL_BASE_PROCESS_START_ROUTINE)(
-    PTHREAD_START_ROUTINE StartAddress,
-    PVOID Parameter
-);
-
-//
-// Worker Start/Exit Function
-//
-typedef NTSTATUS
-(NTAPI *PRTL_START_POOL_THREAD)(
-    _In_ PTHREAD_START_ROUTINE Function,
-    _In_ PVOID Parameter,
-    _Out_ PHANDLE ThreadHandle
-);
-
-typedef NTSTATUS
-(NTAPI *PRTL_EXIT_POOL_THREAD)(
-    _In_ NTSTATUS ExitStatus
-);
-
-//
-// Declare empty structure definitions so that they may be referenced by
-// routines before they are defined
-//
-struct _RTL_AVL_TABLE;
-struct _RTL_GENERIC_TABLE;
-struct _RTL_RANGE;
-
-//
-// Routines and callbacks for the RTL AVL/Generic Table package
-//
-#ifdef NTOS_MODE_USER
-typedef NTSTATUS
-(NTAPI RTL_AVL_MATCH_FUNCTION)(
-    struct _RTL_AVL_TABLE *Table,
-    PVOID UserData,
-    PVOID MatchData
-);
-typedef RTL_AVL_MATCH_FUNCTION *PRTL_AVL_MATCH_FUNCTION;
-
-typedef RTL_GENERIC_COMPARE_RESULTS
-(NTAPI RTL_AVL_COMPARE_ROUTINE) (
-    struct _RTL_AVL_TABLE *Table,
-    PVOID FirstStruct,
-    PVOID SecondStruct
-);
-typedef RTL_AVL_COMPARE_ROUTINE *PRTL_AVL_COMPARE_ROUTINE;
-
-typedef RTL_GENERIC_COMPARE_RESULTS
-(NTAPI RTL_GENERIC_COMPARE_ROUTINE) (
-    struct _RTL_GENERIC_TABLE *Table,
-    PVOID FirstStruct,
-    PVOID SecondStruct
-);
-typedef RTL_GENERIC_COMPARE_ROUTINE *PRTL_GENERIC_COMPARE_ROUTINE;
-
-typedef PVOID
-(NTAPI RTL_GENERIC_ALLOCATE_ROUTINE) (
-    struct _RTL_GENERIC_TABLE *Table,
-    CLONG ByteSize
-);
-typedef RTL_GENERIC_ALLOCATE_ROUTINE *PRTL_GENERIC_ALLOCATE_ROUTINE;
-
-typedef PVOID
-(NTAPI RTL_AVL_ALLOCATE_ROUTINE) (
-    struct _RTL_AVL_TABLE *Table,
-    CLONG ByteSize
-);
-typedef RTL_AVL_ALLOCATE_ROUTINE *PRTL_AVL_ALLOCATE_ROUTINE;
-
-typedef VOID
-(NTAPI RTL_GENERIC_FREE_ROUTINE) (
-    struct _RTL_GENERIC_TABLE *Table,
-    PVOID Buffer
-);
-typedef RTL_GENERIC_FREE_ROUTINE *PRTL_GENERIC_FREE_ROUTINE;
-
-typedef VOID
-(NTAPI RTL_AVL_FREE_ROUTINE) (
-    struct _RTL_AVL_TABLE *Table,
-    PVOID Buffer
-);
-typedef RTL_AVL_FREE_ROUTINE *PRTL_AVL_FREE_ROUTINE;
-
-#ifdef RTL_USE_AVL_TABLES
-#undef  RTL_GENERIC_COMPARE_ROUTINE
-#undef PRTL_GENERIC_COMPARE_ROUTINE
-#undef  RTL_GENERIC_ALLOCATE_ROUTINE
-#undef PRTL_GENERIC_ALLOCATE_ROUTINE
-#undef  RTL_GENERIC_FREE_ROUTINE
-#undef PRTL_GENERIC_FREE_ROUTINE
-
-#define  RTL_GENERIC_COMPARE_ROUTINE     RTL_AVL_COMPARE_ROUTINE
-#define PRTL_GENERIC_COMPARE_ROUTINE    PRTL_AVL_COMPARE_ROUTINE
-#define  RTL_GENERIC_ALLOCATE_ROUTINE    RTL_AVL_ALLOCATE_ROUTINE
-#define PRTL_GENERIC_ALLOCATE_ROUTINE   PRTL_AVL_ALLOCATE_ROUTINE
-#define  RTL_GENERIC_FREE_ROUTINE        RTL_AVL_FREE_ROUTINE
-#define PRTL_GENERIC_FREE_ROUTINE       PRTL_AVL_FREE_ROUTINE
-#endif /* RTL_USE_AVL_TABLES */
-
-#endif /* NTOS_MODE_USER */
-
-//
-// RTL Query Registry callback
-//
-#ifdef NTOS_MODE_USER
-typedef NTSTATUS
-(NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
-    _In_ PWSTR ValueName,
-    _In_ ULONG ValueType,
-    _In_ PVOID ValueData,
-    _In_ ULONG ValueLength,
-    _In_ PVOID Context,
-    _In_ PVOID EntryContext
-);
-#endif
-
-//
-// RTL Secure Memory callbacks
-//
-#ifdef NTOS_MODE_USER
-typedef NTSTATUS
-(NTAPI *PRTL_SECURE_MEMORY_CACHE_CALLBACK)(
-    _In_ PVOID Address,
-    _In_ SIZE_T Length
-);
-#endif
-
-//
-// RTL Range List callbacks
-//
-#ifdef NTOS_MODE_USER
-typedef BOOLEAN
-(NTAPI *PRTL_CONFLICT_RANGE_CALLBACK)(
-    PVOID Context,
-    struct _RTL_RANGE *Range
-);
-
-//
-// Custom Heap Commit Routine for RtlCreateHeap
-//
-typedef NTSTATUS
-(NTAPI * PRTL_HEAP_COMMIT_ROUTINE)(
-    _In_ PVOID Base,
-    _Inout_ PVOID *CommitAddress,
-    _Inout_ PSIZE_T CommitSize
-);
-
-//
-// Parameters for RtlCreateHeap
-//
-typedef struct _RTL_HEAP_PARAMETERS
-{
-    ULONG Length;
-    SIZE_T SegmentReserve;
-    SIZE_T SegmentCommit;
-    SIZE_T DeCommitFreeBlockThreshold;
-    SIZE_T DeCommitTotalFreeThreshold;
-    SIZE_T MaximumAllocationSize;
-    SIZE_T VirtualMemoryThreshold;
-    SIZE_T InitialCommit;
-    SIZE_T InitialReserve;
-    PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
-    SIZE_T Reserved[2];
-} RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
-
-//
-// RTL Bitmap structures
-//
-typedef struct _RTL_BITMAP
-{
-    ULONG SizeOfBitMap;
-    PULONG Buffer;
-} RTL_BITMAP, *PRTL_BITMAP;
-
-typedef struct _RTL_BITMAP_RUN
-{
-    ULONG StartingIndex;
-    ULONG NumberOfBits;
-} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
-
-//
-// RtlGenerateXxxName context
-//
-typedef struct _GENERATE_NAME_CONTEXT
-{
-    USHORT Checksum;
-    BOOLEAN CheckSumInserted;
-    UCHAR NameLength;
-    WCHAR NameBuffer[8];
-    ULONG ExtensionLength;
-    WCHAR ExtensionBuffer[4];
-    ULONG LastIndexValue;
-} GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
-
-//
-// RTL Splay and Balanced Links structures
-//
-typedef struct _RTL_SPLAY_LINKS
-{
-    struct _RTL_SPLAY_LINKS *Parent;
-    struct _RTL_SPLAY_LINKS *LeftChild;
-    struct _RTL_SPLAY_LINKS *RightChild;
-} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
-
-typedef struct _RTL_BALANCED_LINKS
-{
-    struct _RTL_BALANCED_LINKS *Parent;
-    struct _RTL_BALANCED_LINKS *LeftChild;
-    struct _RTL_BALANCED_LINKS *RightChild;
-    CHAR Balance;
-    UCHAR Reserved[3];
-} RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
-
-//
-// RTL Avl/Generic Tables
-//
-#ifndef RTL_USE_AVL_TABLES
-typedef struct _RTL_GENERIC_TABLE
-{
-    PRTL_SPLAY_LINKS TableRoot;
-    LIST_ENTRY InsertOrderList;
-    PLIST_ENTRY OrderedPointer;
-    ULONG WhichOrderedElement;
-    ULONG NumberGenericTableElements;
-    PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
-    PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
-    PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
-    PVOID TableContext;
-} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
-#endif /* !RTL_USE_AVL_TABLES */
-
-typedef struct _RTL_AVL_TABLE
-{
-    RTL_BALANCED_LINKS BalancedRoot;
-    PVOID OrderedPointer;
-    ULONG WhichOrderedElement;
-    ULONG NumberGenericTableElements;
-    ULONG DepthOfTree;
-    PRTL_BALANCED_LINKS RestartKey;
-    ULONG DeleteCount;
-    PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
-    PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
-    PRTL_AVL_FREE_ROUTINE FreeRoutine;
-    PVOID TableContext;
-} RTL_AVL_TABLE, *PRTL_AVL_TABLE;
-
-#ifdef RTL_USE_AVL_TABLES
-#undef  RTL_GENERIC_TABLE
-#undef PRTL_GENERIC_TABLE
-
-#define  RTL_GENERIC_TABLE  RTL_AVL_TABLE
-#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
-#endif /* RTL_USE_AVL_TABLES */
-
-//
-// RTL Compression Buffer
-//
-typedef struct _COMPRESSED_DATA_INFO {
-    USHORT CompressionFormatAndEngine;
-    UCHAR CompressionUnitShift;
-    UCHAR ChunkShift;
-    UCHAR ClusterShift;
-    UCHAR Reserved;
-    USHORT NumberOfChunks;
-    ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
-} COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
-
-//
-// RtlQueryRegistry Data
-//
-typedef struct _RTL_QUERY_REGISTRY_TABLE
-{
-    PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
-    ULONG Flags;
-    PCWSTR Name;
-    PVOID EntryContext;
-    ULONG DefaultType;
-    PVOID DefaultData;
-    ULONG DefaultLength;
-} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
-
-//
-// RTL Unicode Table Structures
-//
-typedef struct _UNICODE_PREFIX_TABLE_ENTRY
-{
-    CSHORT NodeTypeCode;
-    CSHORT NameLength;
-    struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
-    struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
-    RTL_SPLAY_LINKS Links;
-    PUNICODE_STRING Prefix;
-} UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
-
-typedef struct _UNICODE_PREFIX_TABLE
-{
-    CSHORT NodeTypeCode;
-    CSHORT NameLength;
-    PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
-    PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
-} UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
-
-#ifdef NTOS_MODE_USER
-//
-// Pfx* routines' table structures
-//
-typedef struct _PREFIX_TABLE_ENTRY
-{
-  CSHORT NodeTypeCode;
-  CSHORT NameLength;
-  struct _PREFIX_TABLE_ENTRY *NextPrefixTree;
-  RTL_SPLAY_LINKS Links;
-  PSTRING Prefix;
-} PREFIX_TABLE_ENTRY, *PPREFIX_TABLE_ENTRY;
-
-typedef struct _PREFIX_TABLE
-{
-  CSHORT NodeTypeCode;
-  CSHORT NameLength;
-  PPREFIX_TABLE_ENTRY NextPrefixTree;
-} PREFIX_TABLE, *PPREFIX_TABLE;
-#endif
-
-//
-// Time Structure for RTL Time calls
-//
-typedef struct _TIME_FIELDS
-{
-    CSHORT Year;
-    CSHORT Month;
-    CSHORT Day;
-    CSHORT Hour;
-    CSHORT Minute;
-    CSHORT Second;
-    CSHORT Milliseconds;
-    CSHORT Weekday;
-} TIME_FIELDS, *PTIME_FIELDS;
-
-//
-// Activation Context Frame
-//
-typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
-{
-    struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous;
-    PACTIVATION_CONTEXT ActivationContext;
-    ULONG Flags;
-} RTL_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME;
-
-typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
-{
-    SIZE_T Size;
-    ULONG Format;
-    RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame;
-} RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC;
-
-typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
-{
-    SIZE_T Size;
-    ULONG Format;
-    RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame;
-    PVOID Extra1;
-    PVOID Extra2;
-    PVOID Extra3;
-    PVOID Extra4;
-} RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED;
-
-typedef RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME;
-typedef PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME;
-
-typedef struct _RTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME
-{
-    RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame;
-    ULONG_PTR Cookie;
-    PVOID ActivationStackBackTrace[8];
-} RTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME;
-
-#if (NTDDI_VERSION >= NTDDI_WS03)
-typedef struct _ACTIVATION_CONTEXT_STACK
-{
-    PRTL_ACTIVATION_CONTEXT_STACK_FRAME ActiveFrame;
-    LIST_ENTRY FrameListCache;
-    ULONG Flags;
-    ULONG NextCookieSequenceNumber;
-    ULONG StackId;
-} ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK;
-#else
-typedef struct _ACTIVATION_CONTEXT_STACK
-{
-    ULONG Flags;
-    ULONG NextCookieSequenceNumber;
-    PVOID ActiveFrame;
-    LIST_ENTRY FrameListCache;
-} ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK;
-#endif
-
-typedef struct _ACTIVATION_CONTEXT_DATA
-{
-    ULONG Magic;
-    ULONG HeaderSize;
-    ULONG FormatVersion;
-    ULONG TotalSize;
-    ULONG DefaultTocOffset;
-    ULONG ExtendedTocOffset;
-    ULONG AssemblyRosterOffset;
-    ULONG Flags;
-} ACTIVATION_CONTEXT_DATA, *PACTIVATION_CONTEXT_DATA;
-
-typedef struct _ACTIVATION_CONTEXT_STACK_FRAMELIST
-{
-    ULONG Magic;
-    ULONG FramesInUse;
-    LIST_ENTRY Links;
-    ULONG Flags;
-    ULONG NotFramesInUse;
-    RTL_HEAP_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME Frames[32];
-} ACTIVATION_CONTEXT_STACK_FRAMELIST, *PACTIVATION_CONTEXT_STACK_FRAMELIST;
-
-#endif /* NTOS_MODE_USER */
-
-//
-// ACE Structure
-//
-typedef struct _ACE
-{
-    ACE_HEADER Header;
-    ACCESS_MASK AccessMask;
-} ACE, *PACE;
-
-//
-// Information Structures for RTL Debug Functions
-//
-typedef struct _RTL_PROCESS_MODULE_INFORMATION
-{
-    ULONG Section;
-    PVOID MappedBase;
-    PVOID ImageBase;
-    ULONG ImageSize;
-    ULONG Flags;
-    USHORT LoadOrderIndex;
-    USHORT InitOrderIndex;
-    USHORT LoadCount;
-    USHORT OffsetToFileName;
-    CHAR FullPathName[256];
-} RTL_PROCESS_MODULE_INFORMATION, *PRTL_PROCESS_MODULE_INFORMATION;
-
-typedef struct _RTL_PROCESS_MODULES
-{
-    ULONG NumberOfModules;
-    RTL_PROCESS_MODULE_INFORMATION Modules[1];
-} RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES;
-
-typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
-{
-    ULONG NextOffset;
-    RTL_PROCESS_MODULE_INFORMATION BaseInfo;
-    ULONG ImageCheckSum;
-    ULONG TimeDateStamp;
-    PVOID DefaultBase;
-} RTL_PROCESS_MODULE_INFORMATION_EX, *PRTL_PROCESS_MODULE_INFORMATION_EX;
-
-typedef struct _RTL_HEAP_TAG_INFO
-{
-    ULONG NumberOfAllocations;
-    ULONG NumberOfFrees;
-    SIZE_T BytesAllocated;
-} RTL_HEAP_TAG_INFO, *PRTL_HEAP_TAG_INFO;
-
-typedef struct _RTL_HEAP_USAGE_ENTRY
-{
-    struct _RTL_HEAP_USAGE_ENTRY *Next;
-    PVOID Address;
-    SIZE_T Size;
-    USHORT AllocatorBackTraceIndex;
-    USHORT TagIndex;
-} RTL_HEAP_USAGE_ENTRY, *PRTL_HEAP_USAGE_ENTRY;
-
-typedef struct _RTL_HEAP_USAGE
-{
-    ULONG Length;
-    SIZE_T BytesAllocated;
-    SIZE_T BytesCommitted;
-    SIZE_T BytesReserved;
-    SIZE_T BytesReservedMaximum;
-    PRTL_HEAP_USAGE_ENTRY Entries;
-    PRTL_HEAP_USAGE_ENTRY AddedEntries;
-    PRTL_HEAP_USAGE_ENTRY RemovedEntries;
-    ULONG_PTR Reserved[8];
-} RTL_HEAP_USAGE, *PRTL_HEAP_USAGE;
-
-typedef struct _RTL_HEAP_WALK_ENTRY
-{
-    PVOID DataAddress;
-    SIZE_T DataSize;
-    UCHAR OverheadBytes;
-    UCHAR SegmentIndex;
-    USHORT Flags;
-    union
-    {
-        struct
-        {
-            SIZE_T Settable;
-            USHORT TagIndex;
-            USHORT AllocatorBackTraceIndex;
-            ULONG Reserved[2];
-        } Block;
-        struct
-        {
-            ULONG_PTR CommittedSize;
-            ULONG_PTR UnCommittedSize;
-            PVOID FirstEntry;
-            PVOID LastEntry;
-        } Segment;
-    };
-} RTL_HEAP_WALK_ENTRY, *PRTL_HEAP_WALK_ENTRY;
-
-typedef struct _RTL_HEAP_ENTRY
-{
-    SIZE_T Size;
-    USHORT Flags;
-    USHORT AllocatorBackTraceIndex;
-    union
-    {
-        struct
-        {
-            SIZE_T Settable;
-            ULONG Tag;
-        } s1;
-        struct
-        {
-            SIZE_T CommittedSize;
-            PVOID FirstBlock;
-        } s2;
-    } u;
-} RTL_HEAP_ENTRY, *PRTL_HEAP_ENTRY;
-
-typedef struct _RTL_HEAP_TAG
-{
-    ULONG NumberOfAllocations;
-    ULONG NumberOfFrees;
-    SIZE_T BytesAllocated;
-    USHORT TagIndex;
-    USHORT CreatorBackTraceIndex;
-    WCHAR TagName[24];
-} RTL_HEAP_TAG, *PRTL_HEAP_TAG;
-
-typedef struct _RTL_HEAP_INFORMATION
-{
-    PVOID BaseAddress;
-    ULONG Flags;
-    USHORT EntryOverhead;
-    USHORT CreatorBackTraceIndex;
-    SIZE_T BytesAllocated;
-    SIZE_T BytesCommitted;
-    ULONG NumberOfTags;
-    ULONG NumberOfEntries;
-    ULONG NumberOfPseudoTags;
-    ULONG PseudoTagGranularity;
-    ULONG Reserved[4];
-    PRTL_HEAP_TAG Tags;
-    PRTL_HEAP_ENTRY Entries;
-} RTL_HEAP_INFORMATION, *PRTL_HEAP_INFORMATION;
-
-typedef struct _RTL_PROCESS_HEAPS
-{
-    ULONG NumberOfHeaps;
-    RTL_HEAP_INFORMATION Heaps[1];
-} RTL_PROCESS_HEAPS, *PRTL_PROCESS_HEAPS;
-
-typedef struct _RTL_PROCESS_LOCK_INFORMATION
-{
-    PVOID Address;
-    USHORT Type;
-    USHORT CreatorBackTraceIndex;
-    ULONG OwnerThreadId;
-    ULONG ActiveCount;
-    ULONG ContentionCount;
-    ULONG EntryCount;
-    ULONG RecursionCount;
-    ULONG NumberOfSharedWaiters;
-    ULONG NumberOfExclusiveWaiters;
-} RTL_PROCESS_LOCK_INFORMATION, *PRTL_PROCESS_LOCK_INFORMATION;
-
-typedef struct _RTL_PROCESS_LOCKS
-{
-    ULONG NumberOfLocks;
-    RTL_PROCESS_LOCK_INFORMATION Locks[1];
-} RTL_PROCESS_LOCKS, *PRTL_PROCESS_LOCKS;
-
-typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
-{
-    PVOID SymbolicBackTrace;
-    ULONG TraceCount;
-    USHORT Index;
-    USHORT Depth;
-    PVOID BackTrace[16];
-} RTL_PROCESS_BACKTRACE_INFORMATION, *PRTL_PROCESS_BACKTRACE_INFORMATION;
-
-typedef struct _RTL_PROCESS_BACKTRACES
-{
-    ULONG CommittedMemory;
-    ULONG ReservedMemory;
-    ULONG NumberOfBackTraceLookups;
-    ULONG NumberOfBackTraces;
-    RTL_PROCESS_BACKTRACE_INFORMATION BackTraces[1];
-} RTL_PROCESS_BACKTRACES, *PRTL_PROCESS_BACKTRACES;
-
-typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
-{
-    ULONG SizeStruct;
-    ULONG Option;
-    UCHAR OptionData[1];
-    //
-    // Option array continues below
-    //
-} RTL_PROCESS_VERIFIER_OPTIONS, *PRTL_PROCESS_VERIFIER_OPTIONS;
-
-typedef struct _RTL_DEBUG_INFORMATION
-{
-    HANDLE SectionHandleClient;
-    PVOID ViewBaseClient;
-    PVOID ViewBaseTarget;
-    ULONG ViewBaseDelta;
-    HANDLE EventPairClient;
-    PVOID EventPairTarget;
-    HANDLE TargetProcessId;
-    HANDLE TargetThreadHandle;
-    ULONG Flags;
-    ULONG OffsetFree;
-    ULONG CommitSize;
-    ULONG ViewSize;
-    union
-    {
-        PRTL_PROCESS_MODULES Modules;
-        PRTL_PROCESS_MODULE_INFORMATION_EX ModulesEx;
-    };
-    PRTL_PROCESS_BACKTRACES BackTraces;
-    PRTL_PROCESS_HEAPS Heaps;
-    PRTL_PROCESS_LOCKS Locks;
-    HANDLE SpecificHeap;
-    HANDLE TargetProcessHandle;
-    RTL_PROCESS_VERIFIER_OPTIONS VerifierOptions;
-    HANDLE ProcessHeap;
-    HANDLE CriticalSectionHandle;
-    HANDLE CriticalSectionOwnerThread;
-    PVOID Reserved[4];
-} RTL_DEBUG_INFORMATION, *PRTL_DEBUG_INFORMATION;
-
-//
-// Unload Event Trace Structure for RtlGetUnloadEventTrace
-//
-typedef struct _RTL_UNLOAD_EVENT_TRACE
-{
-    PVOID BaseAddress;
-    ULONG SizeOfImage;
-    ULONG Sequence;
-    ULONG TimeDateStamp;
-    ULONG CheckSum;
-    WCHAR ImageName[32];
-} RTL_UNLOAD_EVENT_TRACE, *PRTL_UNLOAD_EVENT_TRACE;
-
-//
-// RTL Handle Structures
-//
-typedef struct _RTL_HANDLE_TABLE_ENTRY
-{
-    union
-    {
-        ULONG Flags;
-        struct _RTL_HANDLE_TABLE_ENTRY *NextFree;
-    };
-} RTL_HANDLE_TABLE_ENTRY, *PRTL_HANDLE_TABLE_ENTRY;
-
-typedef struct _RTL_HANDLE_TABLE
-{
-    ULONG MaximumNumberOfHandles;
-    ULONG SizeOfHandleTableEntry;
-    ULONG Reserved[2];
-    PRTL_HANDLE_TABLE_ENTRY FreeHandles;
-    PRTL_HANDLE_TABLE_ENTRY CommittedHandles;
-    PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles;
-    PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles;
-} RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
-
-#ifdef NTOS_MODE_USER
-//
-// Exception Record
-//
-typedef struct _EXCEPTION_REGISTRATION_RECORD
-{
-    struct _EXCEPTION_REGISTRATION_RECORD *Next;
-    PEXCEPTION_ROUTINE Handler;
-} EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
-#endif /* NTOS_MODE_USER */
-
-//
-// Current Directory Structures
-//
-typedef struct _CURDIR
-{
-    UNICODE_STRING DosPath;
-    HANDLE Handle;
-} CURDIR, *PCURDIR;
-
-typedef struct _RTLP_CURDIR_REF
-{
-    LONG RefCount;
-    HANDLE Handle;
-} RTLP_CURDIR_REF, *PRTLP_CURDIR_REF;
-
-typedef struct _RTL_RELATIVE_NAME_U
-{
-    UNICODE_STRING RelativeName;
-    HANDLE ContainingDirectory;
-    PRTLP_CURDIR_REF CurDirRef;
-} RTL_RELATIVE_NAME_U, *PRTL_RELATIVE_NAME_U;
-
-typedef struct _RTL_DRIVE_LETTER_CURDIR
-{
-    USHORT Flags;
-    USHORT Length;
-    ULONG TimeStamp;
-    UNICODE_STRING DosPath;
-} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
-
-typedef struct _RTL_PERTHREAD_CURDIR
-{
-    PRTL_DRIVE_LETTER_CURDIR CurrentDirectories;
-    PUNICODE_STRING ImageName;
-    PVOID Environment;
-} RTL_PERTHREAD_CURDIR, *PRTL_PERTHREAD_CURDIR;
-
-//
-// Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
-//
-typedef struct _RTL_ACQUIRE_STATE
-{
-    HANDLE Token;
-    HANDLE OldImpersonationToken;
-    PTOKEN_PRIVILEGES OldPrivileges;
-    PTOKEN_PRIVILEGES NewPrivileges;
-    ULONG Flags;
-    UCHAR OldPrivBuffer[1024];
-} RTL_ACQUIRE_STATE, *PRTL_ACQUIRE_STATE;
-
-#ifndef NTOS_MODE_USER
-
-//
-// RTL Critical Section Structures
-//
-typedef struct _RTL_CRITICAL_SECTION_DEBUG
-{
-    USHORT Type;
-    USHORT CreatorBackTraceIndex;
-    struct _RTL_CRITICAL_SECTION *CriticalSection;
-    LIST_ENTRY ProcessLocksList;
-    ULONG EntryCount;
-    ULONG ContentionCount;
-    ULONG Spare[2];
-} RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
-
-typedef struct _RTL_CRITICAL_SECTION
-{
-    PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
-    LONG LockCount;
-    LONG RecursionCount;
-    HANDLE OwningThread;
-    HANDLE LockSemaphore;
-    ULONG_PTR SpinCount;
-} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
-
-#endif /* !NTOS_MODE_USER */
-
-//
-// RTL Private Heap Structures
-//
-typedef struct _HEAP_LOCK
-{
-    union
-    {
-        RTL_CRITICAL_SECTION CriticalSection;
-#ifndef NTOS_MODE_USER
-        ERESOURCE Resource;
-#endif
-        UCHAR Padding[0x68]; /* Max ERESOURCE size for x64 build. Needed because RTL is built only once */
-    };
-} HEAP_LOCK, *PHEAP_LOCK;
-
-//
-// RTL Range List Structures
-//
-typedef struct _RTL_RANGE_LIST
-{
-    LIST_ENTRY ListHead;
-    ULONG Flags;
-    ULONG Count;
-    ULONG Stamp;
-} RTL_RANGE_LIST, *PRTL_RANGE_LIST;
-
-typedef struct _RTL_RANGE
-{
-    ULONGLONG Start;
-    ULONGLONG End;
-    PVOID UserData;
-    PVOID Owner;
-    UCHAR Attributes;
-    UCHAR Flags;
-} RTL_RANGE, *PRTL_RANGE;
-
-typedef struct _RANGE_LIST_ITERATOR
-{
-    PLIST_ENTRY RangeListHead;
-    PLIST_ENTRY MergedHead;
-    PVOID Current;
-    ULONG Stamp;
-} RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
-
-//
-// RTL Resource
-//
-#define RTL_RESOURCE_FLAG_LONG_TERM ((ULONG)0x00000001)
-
-typedef struct _RTL_RESOURCE
-{
-    RTL_CRITICAL_SECTION Lock;
-    HANDLE SharedSemaphore;
-    ULONG SharedWaiters;
-    HANDLE ExclusiveSemaphore;
-    ULONG ExclusiveWaiters;
-    LONG NumberActive;
-    HANDLE OwningThread;
-    ULONG TimeoutBoost;
-    PVOID DebugInfo;
-} RTL_RESOURCE, *PRTL_RESOURCE;
-
-//
-// Structures for RtlCreateUserProcess
-//
-typedef struct _RTL_USER_PROCESS_PARAMETERS
-{
-    ULONG MaximumLength;
-    ULONG Length;
-    ULONG Flags;
-    ULONG DebugFlags;
-    HANDLE ConsoleHandle;
-    ULONG ConsoleFlags;
-    HANDLE StandardInput;
-    HANDLE StandardOutput;
-    HANDLE StandardError;
-    CURDIR CurrentDirectory;
-    UNICODE_STRING DllPath;
-    UNICODE_STRING ImagePathName;
-    UNICODE_STRING CommandLine;
-    PWSTR Environment;
-    ULONG StartingX;
-    ULONG StartingY;
-    ULONG CountX;
-    ULONG CountY;
-    ULONG CountCharsX;
-    ULONG CountCharsY;
-    ULONG FillAttribute;
-    ULONG WindowFlags;
-    ULONG ShowWindowFlags;
-    UNICODE_STRING WindowTitle;
-    UNICODE_STRING DesktopInfo;
-    UNICODE_STRING ShellInfo;
-    UNICODE_STRING RuntimeData;
-    RTL_DRIVE_LETTER_CURDIR CurrentDirectories[RTL_MAX_DRIVE_LETTERS];
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
-    SIZE_T EnvironmentSize;
-#endif
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-    SIZE_T EnvironmentVersion;
-#endif
-} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
-
-typedef struct _RTL_USER_PROCESS_INFORMATION
-{
-    ULONG Size;
-    HANDLE ProcessHandle;
-    HANDLE ThreadHandle;
-    CLIENT_ID ClientId;
-    SECTION_IMAGE_INFORMATION ImageInformation;
-} RTL_USER_PROCESS_INFORMATION, *PRTL_USER_PROCESS_INFORMATION;
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-typedef enum _RTL_UMS_SCHEDULER_REASON
-{
-    UmsSchedulerStartup = 0,
-    UmsSchedulerThreadBlocked = 1,
-    UmsSchedulerThreadYield = 2,
-} RTL_UMS_SCHEDULER_REASON, *PRTL_UMS_SCHEDULER_REASON;
-
-enum _RTL_UMSCTX_FLAGS
-{
-    UMSCTX_SCHEDULED_THREAD_BIT = 0,
-#if (NTDDI_VERSION < NTDDI_WIN8)
-    UMSCTX_HAS_QUANTUM_REQ_BIT,
-    UMSCTX_HAS_AFFINITY_REQ_BIT,
-    UMSCTX_HAS_PRIORITY_REQ_BIT,
-#endif
-    UMSCTX_SUSPENDED_BIT,
-    UMSCTX_VOLATILE_CONTEXT_BIT,
-    UMSCTX_TERMINATED_BIT,
-    UMSCTX_DEBUG_ACTIVE_BIT,
-    UMSCTX_RUNNING_ON_SELF_THREAD_BIT,
-    UMSCTX_DENY_RUNNING_ON_SELF_THREAD_BIT
-
-} RTL_UMSCTX_FLAGS, *PRTL_UMSCTX_FLAGS;
-
-#define UMSCTX_SCHEDULED_THREAD_MASK (1 << UMSCTX_SCHEDULED_THREAD_BIT)
-#define UMSCTX_SUSPENDED_MASK        (1 << UMSCTX_SUSPENDED_BIT)
-#define UMSCTX_VOLATILE_CONTEXT_MASK (1 << UMSCTX_VOLATILE_CONTEXT_BIT)
-#define UMSCTX_TERMINATED_MASK       (1 << UMSCTX_TERMINATED_BIT)
-#define UMSCTX_DEBUG_ACTIVE_MASK     (1 << UMSCTX_DEBUG_ACTIVE_BIT)
-#define UMSCTX_RUNNING_ON_SELF_THREAD_MASK (1 << UMSCTX_RUNNING_ON_SELF_THREAD_BIT)
-#define UMSCTX_DENY_RUNNING_ON_SELF_THREAD_MASK (1 << UMSCTX_DENY_RUNNING_ON_SELF_THREAD_BIT)
-
-//
-// UMS Context
-//
-typedef struct DECLSPEC_ALIGN(16) _RTL_UMS_CONTEXT
-{
-    SINGLE_LIST_ENTRY Link;
-    CONTEXT Context;
-    PVOID Teb;
-    PVOID UserContext;
-    union
-    {
-        struct
-        {
-            ULONG ScheduledThread : 1;
-#if (NTDDI_VERSION < NTDDI_WIN8)
-            ULONG HasQuantumReq : 1;
-            ULONG HasAffinityReq : 1;
-            ULONG HasPriorityReq : 1;
-#endif
-            ULONG Suspended : 1;
-            ULONG VolatileContext : 1;
-            ULONG Terminated : 1;
-            ULONG DebugActive : 1;
-            ULONG RunningOnSelfThread : 1;
-            ULONG DenyRunningOnSelfThread : 1;
-#if (NTDDI_VERSION < NTDDI_WIN8)
-            ULONG ReservedFlags : 22;
-#endif
-        };
-        LONG Flags;
-    };
-    union
-    {
-        struct
-        {
-#if (NTDDI_VERSION >= NTDDI_WIN8)
-            ULONG64 KernelUpdateLock : 2;
-#else
-            ULONG64 KernelUpdateLock : 1;
-            ULONG64 Reserved : 1;
-#endif
-            ULONG64 PrimaryClientID : 62;
-        };
-        ULONG64 ContextLock;
-    };
-#if (NTDDI_VERSION < NTDDI_WIN8)
-    ULONG64 QuantumValue;
-    GROUP_AFFINITY AffinityMask;
-    LONG Priority;
-#endif
-    struct _RTL_UMS_CONTEXT* PrimaryUmsContext;
-    ULONG SwitchCount;
-    ULONG KernelYieldCount;
-    ULONG MixedYieldCount;
-    ULONG YieldCount;
-} RTL_UMS_CONTEXT, *PRTL_UMS_CONTEXT;
-#endif // #if (NTDDI_VERSION >= NTDDI_WIN7)
-
-//
-// RTL Atom Table Structures
-//
-typedef struct _RTL_ATOM_TABLE_ENTRY
-{
-    struct _RTL_ATOM_TABLE_ENTRY *HashLink;
-    USHORT HandleIndex;
-    USHORT Atom;
-    USHORT ReferenceCount;
-    UCHAR Flags;
-    UCHAR NameLength;
-    WCHAR Name[1];
-} RTL_ATOM_TABLE_ENTRY, *PRTL_ATOM_TABLE_ENTRY;
-
-typedef struct _RTL_ATOM_TABLE
-{
-    ULONG Signature;
-    union
-    {
-#ifdef NTOS_MODE_USER
-        RTL_CRITICAL_SECTION CriticalSection;
-#else
-        FAST_MUTEX FastMutex;
-#endif
-    };
-    union
-    {
-#ifdef NTOS_MODE_USER
-        RTL_HANDLE_TABLE RtlHandleTable;
-#else
-        PHANDLE_TABLE ExHandleTable;
-#endif
-    };
-    ULONG NumberOfBuckets;
-    PRTL_ATOM_TABLE_ENTRY Buckets[1];
-} RTL_ATOM_TABLE, *PRTL_ATOM_TABLE;
-
-#ifndef _WINBASE_
-//
-// System Time and Timezone Structures
-//
-typedef struct _SYSTEMTIME
-{
-    USHORT wYear;
-    USHORT wMonth;
-    USHORT wDayOfWeek;
-    USHORT wDay;
-    USHORT wHour;
-    USHORT wMinute;
-    USHORT wSecond;
-    USHORT wMilliseconds;
-} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
-
-typedef struct _TIME_ZONE_INFORMATION
-{
-    LONG Bias;
-    WCHAR StandardName[32];
-    SYSTEMTIME StandardDate;
-    LONG StandardBias;
-    WCHAR DaylightName[32];
-    SYSTEMTIME DaylightDate;
-    LONG DaylightBias;
-} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
-#endif /* !_WINBASE_ */
-
-//
-// Native version of Timezone Structure
-//
-typedef LPTIME_ZONE_INFORMATION PRTL_TIME_ZONE_INFORMATION;
-
-//
-// Hotpatch Header
-//
-typedef struct _RTL_PATCH_HEADER
-{
-    LIST_ENTRY PatchList;
-    PVOID PatchImageBase;
-    struct _RTL_PATCH_HEADER *NextPath;
-    ULONG PatchFlags;
-    LONG PatchRefCount;
-    struct _HOTPATCH_HEADER *HotpatchHeader;
-    UNICODE_STRING TargetDllName;
-    PVOID TargetDllBase;
-    PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry;
-    PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry;
-    struct _SYSTEM_HOTPATCH_CODE_INFORMATION *CodeInfo;
-} RTL_PATCH_HEADER, *PRTL_PATCH_HEADER;
-
-//
-// Header for NLS Files
-//
-typedef struct _NLS_FILE_HEADER
-{
-    USHORT HeaderSize;
-    USHORT CodePage;
-    USHORT MaximumCharacterSize;
-    USHORT DefaultChar;
-    USHORT UniDefaultChar;
-    USHORT TransDefaultChar;
-    USHORT TransUniDefaultChar;
-    UCHAR LeadByte[MAXIMUM_LEADBYTES];
-} NLS_FILE_HEADER, *PNLS_FILE_HEADER;
-
-//
-// Stack Traces
-//
-typedef struct _RTL_STACK_TRACE_ENTRY
-{
-    struct _RTL_STACK_TRACE_ENTRY *HashChain;
-    ULONG TraceCount;
-    USHORT Index;
-    USHORT Depth;
-    PVOID BackTrace[32];
-} RTL_STACK_TRACE_ENTRY, *PRTL_STACK_TRACE_ENTRY;
-
-typedef struct _STACK_TRACE_DATABASE
-{
-    RTL_CRITICAL_SECTION CriticalSection;
-} STACK_TRACE_DATABASE, *PSTACK_TRACE_DATABASE;
-
-//
-// Trace Database
-//
-
-typedef ULONG (NTAPI *RTL_TRACE_HASH_FUNCTION) (ULONG Count, PVOID *Trace);
-
-typedef struct _RTL_TRACE_BLOCK
-{
-    ULONG Magic;
-    ULONG Count;
-    ULONG Size;
-    ULONG UserCount;
-    ULONG UserSize;
-    PVOID UserContext;
-    struct _RTL_TRACE_BLOCK *Next;
-    PVOID *Trace;
-} RTL_TRACE_BLOCK, *PRTL_TRACE_BLOCK;
-
-typedef struct _RTL_TRACE_DATABASE
-{
-    ULONG Magic;
-    ULONG Flags;
-    ULONG Tag;
-    struct _RTL_TRACE_SEGMENT *SegmentList;
-    SIZE_T MaximumSize;
-    SIZE_T CurrentSize;
-    PVOID Owner;
-#ifdef NTOS_MODE_USER
-    RTL_CRITICAL_SECTION Lock;
-#else
-    union
-    {
-        KSPIN_LOCK SpinLock;
-        FAST_MUTEX FastMutex;
-    } u;
-#endif
-    ULONG NoOfBuckets;
-    struct _RTL_TRACE_BLOCK **Buckets;
-    RTL_TRACE_HASH_FUNCTION HashFunction;
-    SIZE_T NoOfTraces;
-    SIZE_T NoOfHits;
-    ULONG HashCounter[16];
-} RTL_TRACE_DATABASE, *PRTL_TRACE_DATABASE;
-
-typedef struct _RTL_TRACE_SEGMENT
-{
-    ULONG Magic;
-    struct _RTL_TRACE_DATABASE *Database;
-    struct _RTL_TRACE_SEGMENT *NextSegment;
-    SIZE_T TotalSize;
-    PCHAR SegmentStart;
-    PCHAR SegmentEnd;
-    PCHAR SegmentFree;
-} RTL_TRACE_SEGMENT, *PRTL_TRACE_SEGMENT;
-
-typedef struct _RTL_TRACE_ENUMERATE
-{
-    struct _RTL_TRACE_DATABASE *Database;
-    ULONG Index;
-    struct _RTL_TRACE_BLOCK *Block;
-} RTL_TRACE_ENUMERATE, * PRTL_TRACE_ENUMERATE;
-
-//
-// Auto-Managed Rtl* String Buffer
-//
-typedef struct _RTL_BUFFER
-{
-    PUCHAR Buffer;
-    PUCHAR StaticBuffer;
-    SIZE_T Size;
-    SIZE_T StaticSize;
-    SIZE_T ReservedForAllocatedSize;
-    PVOID ReservedForIMalloc;
-} RTL_BUFFER, *PRTL_BUFFER;
-
-typedef struct _RTL_UNICODE_STRING_BUFFER
-{
-    UNICODE_STRING String;
-    RTL_BUFFER ByteBuffer;
-    WCHAR MinimumStaticBufferForTerminalNul;
-} RTL_UNICODE_STRING_BUFFER, *PRTL_UNICODE_STRING_BUFFER;
-
-#ifndef NTOS_MODE_USER
-
-//
-// Message Resource Entry, Block and Data
-//
-typedef struct _MESSAGE_RESOURCE_ENTRY
-{
-    USHORT Length;
-    USHORT Flags;
-    UCHAR Text[ANYSIZE_ARRAY];
-} MESSAGE_RESOURCE_ENTRY, *PMESSAGE_RESOURCE_ENTRY;
-
-typedef struct _MESSAGE_RESOURCE_BLOCK
-{
-    ULONG LowId;
-    ULONG HighId;
-    ULONG OffsetToEntries;
-} MESSAGE_RESOURCE_BLOCK, *PMESSAGE_RESOURCE_BLOCK;
-
-typedef struct _MESSAGE_RESOURCE_DATA
-{
-    ULONG NumberOfBlocks;
-    MESSAGE_RESOURCE_BLOCK Blocks[ANYSIZE_ARRAY];
-} MESSAGE_RESOURCE_DATA, *PMESSAGE_RESOURCE_DATA;
-
-#endif /* !NTOS_MODE_USER */
-
-#ifdef NTOS_MODE_USER
-
-//
-// Memory Stream
-//
-#ifndef CONST_VTBL
-#ifdef CONST_VTABLE
-#define CONST_VTBL const
-#else
-#define CONST_VTBL
-#endif
-#endif
-
-struct IStreamVtbl;
-struct IStream;
-struct tagSTATSTG;
-
-typedef struct _RTL_MEMORY_STREAM RTL_MEMORY_STREAM, *PRTL_MEMORY_STREAM;
-
-typedef VOID
-(NTAPI *PRTL_MEMORY_STREAM_FINAL_RELEASE_ROUTINE)(
-    _In_ PRTL_MEMORY_STREAM Stream
-);
-
-struct _RTL_MEMORY_STREAM
-{
-    CONST_VTBL struct IStreamVtbl *Vtbl;
-    LONG RefCount;
-    ULONG Unk1;
-    PVOID Current;
-    PVOID Start;
-    PVOID End;
-    PRTL_MEMORY_STREAM_FINAL_RELEASE_ROUTINE FinalRelease;
-    HANDLE ProcessHandle;
-};
-
-#endif /* NTOS_MODE_USER */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !_RTLTYPES_H */