ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

rtltypes.h
Go to the documentation of this file.
00001 /*++ NDK Version: 0098
00002 
00003 Copyright (c) Alex Ionescu.  All rights reserved.
00004 
00005 Header Name:
00006 
00007     rtltypes.h
00008 
00009 Abstract:
00010 
00011     Type definitions for the Run-Time Library
00012 
00013 Author:
00014 
00015     Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
00016 
00017 --*/
00018 
00019 #ifndef _RTLTYPES_H
00020 #define _RTLTYPES_H
00021 
00022 //
00023 // Dependencies
00024 //
00025 #include <umtypes.h>
00026 #include <mmtypes.h>
00027 #include <ldrtypes.h>
00028 
00029 //
00030 // Maximum Atom Length
00031 //
00032 #define RTL_MAXIMUM_ATOM_LENGTH                             255
00033 
00034 //
00035 // Process Parameters Flags
00036 //
00037 #define RTL_USER_PROCESS_PARAMETERS_NORMALIZED              0x01
00038 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_USER            0x02
00039 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_KERNEL          0x04
00040 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_SERVER          0x08
00041 #define RTL_USER_PROCESS_PARAMETERS_UNKNOWN                 0x10
00042 #define RTL_USER_PROCESS_PARAMETERS_RESERVE_1MB             0x20
00043 #define RTL_USER_PROCESS_PARAMETERS_RESERVE_16MB            0x40
00044 #define RTL_USER_PROCESS_PARAMETERS_CASE_SENSITIVE          0x80
00045 #define RTL_USER_PROCESS_PARAMETERS_DISABLE_HEAP_CHECKS     0x100
00046 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_1            0x200
00047 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_2            0x400
00048 #define RTL_USER_PROCESS_PARAMETERS_PRIVATE_DLL_PATH        0x1000
00049 #define RTL_USER_PROCESS_PARAMETERS_LOCAL_DLL_PATH          0x2000
00050 #define RTL_USER_PROCESS_PARAMETERS_IMAGE_KEY_MISSING       0x4000
00051 #define RTL_USER_PROCESS_PARAMETERS_NX                      0x20000
00052 
00053 #define RTL_MAX_DRIVE_LETTERS 32
00054 #define RTL_DRIVE_LETTER_VALID (USHORT)0x0001
00055 
00056 //
00057 // Exception Flags
00058 //
00059 #define EXCEPTION_CHAIN_END                                 ((PEXCEPTION_REGISTRATION_RECORD)-1)
00060 #define EXCEPTION_UNWINDING                                 0x02
00061 #define EXCEPTION_EXIT_UNWIND                               0x04
00062 #define EXCEPTION_STACK_INVALID                             0x08
00063 #define EXCEPTION_UNWIND                                    (EXCEPTION_UNWINDING + EXCEPTION_EXIT_UNWIND)
00064 #define EXCEPTION_NESTED_CALL                               0x10
00065 #define EXCEPTION_TARGET_UNWIND                             0x20
00066 #define EXCEPTION_COLLIDED_UNWIND                           0x20
00067 
00068 //
00069 // Range and Range List Flags
00070 //
00071 #define RTL_RANGE_LIST_ADD_IF_CONFLICT                      0x00000001
00072 #define RTL_RANGE_LIST_ADD_SHARED                           0x00000002
00073 
00074 #define RTL_RANGE_SHARED                                    0x01
00075 #define RTL_RANGE_CONFLICT                                  0x02
00076 
00077 //
00078 // Activation Context Frame Flags
00079 //
00080 #define RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_FORMAT_WHISTLER \
00081                                                             0x1
00082 
00083 //
00084 // RtlActivateActivationContextEx Flags
00085 //
00086 #define RTL_ACTIVATE_ACTIVATION_CONTEXT_EX_FLAG_RELEASE_ON_STACK_DEALLOCATION \
00087                                                             0x1
00088 
00089 //
00090 // Public Heap Flags
00091 //
00092 #if !defined(NTOS_MODE_USER) && !defined(_NTIFS_)
00093 #define HEAP_NO_SERIALIZE                                   0x00000001
00094 #define HEAP_GROWABLE                                       0x00000002
00095 #define HEAP_GENERATE_EXCEPTIONS                            0x00000004
00096 #define HEAP_ZERO_MEMORY                                    0x00000008
00097 #define HEAP_REALLOC_IN_PLACE_ONLY                          0x00000010
00098 #define HEAP_TAIL_CHECKING_ENABLED                          0x00000020
00099 #define HEAP_FREE_CHECKING_ENABLED                          0x00000040
00100 #define HEAP_DISABLE_COALESCE_ON_FREE                       0x00000080
00101 #define HEAP_CREATE_ALIGN_16                                0x00010000
00102 #define HEAP_CREATE_ENABLE_TRACING                          0x00020000
00103 #define HEAP_CREATE_ENABLE_EXECUTE                          0x00040000
00104 #endif
00105 
00106 //
00107 // User-Defined Heap Flags and Classes
00108 //
00109 #define HEAP_SETTABLE_USER_VALUE                            0x00000100
00110 #define HEAP_SETTABLE_USER_FLAG1                            0x00000200
00111 #define HEAP_SETTABLE_USER_FLAG2                            0x00000400
00112 #define HEAP_SETTABLE_USER_FLAG3                            0x00000800
00113 #define HEAP_SETTABLE_USER_FLAGS                            0x00000E00
00114 #define HEAP_CLASS_0                                        0x00000000
00115 #define HEAP_CLASS_1                                        0x00001000
00116 #define HEAP_CLASS_2                                        0x00002000
00117 #define HEAP_CLASS_3                                        0x00003000
00118 #define HEAP_CLASS_4                                        0x00004000
00119 #define HEAP_CLASS_5                                        0x00005000
00120 #define HEAP_CLASS_6                                        0x00006000
00121 #define HEAP_CLASS_7                                        0x00007000
00122 #define HEAP_CLASS_8                                        0x00008000
00123 #define HEAP_CLASS_MASK                                     0x0000F000
00124 
00125 //
00126 // Internal HEAP Structure Flags
00127 //
00128 #define HEAP_FLAG_PAGE_ALLOCS                               0x01000000
00129 #define HEAP_PROTECTION_ENABLED                             0x02000000
00130 #define HEAP_BREAK_WHEN_OUT_OF_VM                           0x04000000
00131 #define HEAP_NO_ALIGNMENT                                   0x08000000
00132 #define HEAP_CAPTURE_STACK_BACKTRACES                       0x08000000
00133 #define HEAP_SKIP_VALIDATION_CHECKS                         0x10000000
00134 #define HEAP_VALIDATE_ALL_ENABLED                           0x20000000
00135 #define HEAP_VALIDATE_PARAMETERS_ENABLED                    0x40000000
00136 #define HEAP_LOCK_USER_ALLOCATED                            0x80000000
00137 
00138 //
00139 // Heap Validation Flags
00140 //
00141 #define HEAP_CREATE_VALID_MASK                              \
00142     (HEAP_NO_SERIALIZE              |                       \
00143      HEAP_GROWABLE                  |                       \
00144      HEAP_GENERATE_EXCEPTIONS       |                       \
00145      HEAP_ZERO_MEMORY               |                       \
00146      HEAP_REALLOC_IN_PLACE_ONLY     |                       \
00147      HEAP_TAIL_CHECKING_ENABLED     |                       \
00148      HEAP_FREE_CHECKING_ENABLED     |                       \
00149      HEAP_DISABLE_COALESCE_ON_FREE  |                       \
00150      HEAP_CLASS_MASK                |                       \
00151      HEAP_CREATE_ALIGN_16           |                       \
00152      HEAP_CREATE_ENABLE_TRACING     |                       \
00153      HEAP_CREATE_ENABLE_EXECUTE)
00154 #ifdef C_ASSERT
00155 C_ASSERT(HEAP_CREATE_VALID_MASK == 0x0007F0FF);
00156 #endif
00157 
00158 //
00159 // Native image architecture
00160 //
00161 #if defined(_M_IX86)
00162 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_I386
00163 #elif defined(_M_ARM)
00164 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_ARM
00165 #elif defined(_M_AMD64)
00166 #define IMAGE_FILE_MACHINE_NATIVE IMAGE_FILE_MACHINE_AMD64
00167 #else
00168 #error Define these please!
00169 #endif
00170 
00171 //
00172 // Registry Keys
00173 //
00174 #define RTL_REGISTRY_ABSOLUTE                               0
00175 #define RTL_REGISTRY_SERVICES                               1
00176 #define RTL_REGISTRY_CONTROL                                2
00177 #define RTL_REGISTRY_WINDOWS_NT                             3
00178 #define RTL_REGISTRY_DEVICEMAP                              4
00179 #define RTL_REGISTRY_USER                                   5
00180 #define RTL_REGISTRY_MAXIMUM                                6
00181 #define RTL_REGISTRY_HANDLE                                 0x40000000
00182 #define RTL_REGISTRY_OPTIONAL                               0x80000000
00183 #define RTL_QUERY_REGISTRY_SUBKEY                           0x00000001
00184 #define RTL_QUERY_REGISTRY_TOPKEY                           0x00000002
00185 #define RTL_QUERY_REGISTRY_REQUIRED                         0x00000004
00186 #define RTL_QUERY_REGISTRY_NOVALUE                          0x00000008
00187 #define RTL_QUERY_REGISTRY_NOEXPAND                         0x00000010
00188 #define RTL_QUERY_REGISTRY_DIRECT                           0x00000020
00189 #define RTL_QUERY_REGISTRY_DELETE                           0x00000040
00190 
00191 //
00192 // Versioning
00193 //
00194 #define VER_MINORVERSION                                    0x0000001
00195 #define VER_MAJORVERSION                                    0x0000002
00196 #define VER_BUILDNUMBER                                     0x0000004
00197 #define VER_PLATFORMID                                      0x0000008
00198 #define VER_SERVICEPACKMINOR                                0x0000010
00199 #define VER_SERVICEPACKMAJOR                                0x0000020
00200 #define VER_SUITENAME                                       0x0000040
00201 #define VER_PRODUCT_TYPE                                    0x0000080
00202 #define VER_PLATFORM_WIN32s                                 0
00203 #define VER_PLATFORM_WIN32_WINDOWS                          1
00204 #define VER_PLATFORM_WIN32_NT                               2
00205 #define VER_EQUAL                                           1
00206 #define VER_GREATER                                         2
00207 #define VER_GREATER_EQUAL                                   3
00208 #define VER_LESS                                            4
00209 #define VER_LESS_EQUAL                                      5
00210 #define VER_AND                                             6
00211 #define VER_OR                                              7
00212 #define VER_CONDITION_MASK                                  7
00213 #define VER_NUM_BITS_PER_CONDITION_MASK                     3
00214 
00215 //
00216 // Timezone IDs
00217 //
00218 #define TIME_ZONE_ID_UNKNOWN                                0
00219 #define TIME_ZONE_ID_STANDARD                               1
00220 #define TIME_ZONE_ID_DAYLIGHT                               2
00221 
00222 //
00223 // Maximum Path Length
00224 //
00225 #define MAX_PATH                                            260
00226 
00227 //
00228 // RTL Lock Type (Critical Section or Resource)
00229 //
00230 #define RTL_CRITSECT_TYPE                                   0
00231 #define RTL_RESOURCE_TYPE                                   1
00232 
00233 //
00234 // RtlAcquirePrivileges Flags
00235 //
00236 #define RTL_ACQUIRE_PRIVILEGE_IMPERSONATE                   1
00237 #define RTL_ACQUIRE_PRIVILEGE_PROCESS                       2
00238 
00239 #ifdef NTOS_MODE_USER
00240 
00241 //
00242 // String Hash Algorithms
00243 //
00244 #define HASH_STRING_ALGORITHM_DEFAULT                       0
00245 #define HASH_STRING_ALGORITHM_X65599                        1
00246 #define HASH_STRING_ALGORITHM_INVALID                       0xffffffff
00247 
00248 //
00249 // RtlDuplicateString Flags
00250 //
00251 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE         1
00252 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING   2
00253 
00254 //
00255 // RtlFindCharInUnicodeString Flags
00256 //
00257 #define RTL_FIND_CHAR_IN_UNICODE_STRING_START_AT_END        1
00258 #define RTL_FIND_CHAR_IN_UNICODE_STRING_COMPLEMENT_CHAR_SET 2
00259 #define RTL_FIND_CHAR_IN_UNICODE_STRING_CASE_INSENSITIVE    4
00260 
00261 //
00262 // RtlImageNtHeaderEx Flags
00263 //
00264 #define RTL_IMAGE_NT_HEADER_EX_FLAG_NO_RANGE_CHECK          0x00000001
00265 
00266 //
00267 // RtlDosApplyFileIsolationRedirection_Ustr Flags
00268 //
00269 #define RTL_DOS_APPLY_FILE_REDIRECTION_USTR_FLAG_RESPECT_DOT_LOCAL  0x01
00270 
00271 //
00272 // Codepages
00273 //
00274 #define NLS_MB_CODE_PAGE_TAG                                NlsMbCodePageTag
00275 #define NLS_MB_OEM_CODE_PAGE_TAG                            NlsMbOemCodePageTag
00276 #define NLS_OEM_LEAD_BYTE_INFO                              NlsOemLeadByteInfo
00277 
00278 //
00279 // Activation Contexts
00280 //
00281 #define INVALID_ACTIVATION_CONTEXT                          (PVOID)0xFFFFFFFF
00282 
00283 //
00284 // C++ CONST casting
00285 //
00286 #if defined(__cplusplus)
00287 #define RTL_CONST_CAST(type)                    const_cast<type>
00288 #else
00289 #define RTL_CONST_CAST(type)                    (type)
00290 #endif
00291 
00292 //
00293 // Constant String Macro
00294 //
00295 #define RTL_CONSTANT_STRING(__SOURCE_STRING__)                  \
00296 {                                                               \
00297     sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
00298     sizeof(__SOURCE_STRING__),                                  \
00299     (__SOURCE_STRING__)                                         \
00300 }
00301 
00302 //
00303 // Constant Object Attributes Macro
00304 //
00305 #define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)                    \
00306 {                                                               \
00307     sizeof(OBJECT_ATTRIBUTES),                                  \
00308     NULL,                                                       \
00309     RTL_CONST_CAST(PUNICODE_STRING)(n),                         \
00310     a,                                                          \
00311     NULL,                                                       \
00312     NULL                                                        \
00313 }
00314 
00315 #define RTL_INIT_OBJECT_ATTRIBUTES(n, a)                        \
00316     RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
00317 
00318 #else /* NTOS_MODE_USER */
00319 //
00320 // Message Resource Flag
00321 //
00322 #define MESSAGE_RESOURCE_UNICODE                            0x0001
00323 
00324 #endif /* !NTOS_MODE_USER */
00325 #define MAXIMUM_LEADBYTES                                   12
00326 
00327 //
00328 // RTL Debug Queries
00329 //
00330 #define RTL_DEBUG_QUERY_MODULES                             0x01
00331 #define RTL_DEBUG_QUERY_BACKTRACES                          0x02
00332 #define RTL_DEBUG_QUERY_HEAPS                               0x04
00333 #define RTL_DEBUG_QUERY_HEAP_TAGS                           0x08
00334 #define RTL_DEBUG_QUERY_HEAP_BLOCKS                         0x10
00335 #define RTL_DEBUG_QUERY_LOCKS                               0x20
00336 
00337 //
00338 // RTL Handle Flags
00339 //
00340 #define RTL_HANDLE_VALID                                    0x1
00341 
00342 //
00343 // RTL Atom Flags
00344 //
00345 #define RTL_ATOM_IS_PINNED                                  0x1
00346 
00347 //
00348 // Critical section lock bits
00349 //
00350 #define CS_LOCK_BIT                                         0x1
00351 #define CS_LOCK_BIT_V                                       0x0
00352 #define CS_LOCK_WAITER_WOKEN                                0x2
00353 #define CS_LOCK_WAITER_INC                                  0x4
00354 
00355 //
00356 // Codepage Tags
00357 //
00358 #ifdef NTOS_MODE_USER
00359 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG;
00360 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
00361 
00362 //
00363 // Constant String Macro
00364 //
00365 #define RTL_CONSTANT_STRING(__SOURCE_STRING__)                  \
00366 {                                                               \
00367     sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
00368     sizeof(__SOURCE_STRING__),                                  \
00369     (__SOURCE_STRING__)                                         \
00370 }
00371 
00372 #endif /* NTOS_MODE_USER */
00373 
00374 #ifdef NTOS_MODE_USER
00375 
00376 //
00377 // Boot Status Data Field Types
00378 //
00379 typedef enum _RTL_BSD_ITEM_TYPE
00380 {
00381     RtlBsdItemVersionNumber,
00382     RtlBsdItemProductType,
00383     RtlBsdItemAabEnabled,
00384     RtlBsdItemAabTimeout,
00385     RtlBsdItemBootGood,
00386     RtlBsdItemBootShutdown,
00387     RtlBsdItemMax
00388 } RTL_BSD_ITEM_TYPE, *PRTL_BSD_ITEM_TYPE;
00389 
00390 //
00391 // Table and Compare result types
00392 //
00393 typedef enum _TABLE_SEARCH_RESULT
00394 {
00395     TableEmptyTree,
00396     TableFoundNode,
00397     TableInsertAsLeft,
00398     TableInsertAsRight
00399 } TABLE_SEARCH_RESULT;
00400 
00401 typedef enum _RTL_GENERIC_COMPARE_RESULTS
00402 {
00403     GenericLessThan,
00404     GenericGreaterThan,
00405     GenericEqual
00406 } RTL_GENERIC_COMPARE_RESULTS;
00407 
00408 #endif /* NTOS_MODE_USER */
00409 
00410 //
00411 // RTL Path Types
00412 //
00413 typedef enum _RTL_PATH_TYPE
00414 {
00415     RtlPathTypeUnknown,
00416     RtlPathTypeUncAbsolute,
00417     RtlPathTypeDriveAbsolute,
00418     RtlPathTypeDriveRelative,
00419     RtlPathTypeRooted,
00420     RtlPathTypeRelative,
00421     RtlPathTypeLocalDevice,
00422     RtlPathTypeRootLocalDevice,
00423 } RTL_PATH_TYPE;
00424 
00425 #ifndef NTOS_MODE_USER
00426 
00427 //
00428 // Heap Information Class
00429 //
00430 typedef enum _HEAP_INFORMATION_CLASS
00431 {
00432     HeapCompatibilityInformation,
00433     HeapEnableTerminationOnCorruption
00434 } HEAP_INFORMATION_CLASS;
00435 
00436 //
00437 // Callback function for RTL Timers or Registered Waits
00438 //
00439 typedef VOID
00440 (NTAPI *WAITORTIMERCALLBACKFUNC)(
00441     PVOID pvContext,
00442     BOOLEAN fTimerOrWaitFired
00443 );
00444 
00445 //
00446 // Handler during Vectored RTL Exceptions
00447 //
00448 typedef LONG
00449 (NTAPI *PVECTORED_EXCEPTION_HANDLER)(
00450     PEXCEPTION_POINTERS ExceptionPointers
00451 );
00452 
00453 //
00454 // Worker Thread Callback for Rtl
00455 //
00456 typedef VOID
00457 (NTAPI *WORKERCALLBACKFUNC)(
00458     IN PVOID Context
00459 );
00460 
00461 #else /* !NTOS_MODE_USER */
00462 
00463 //
00464 // RTL Library Allocation/Free Routines
00465 //
00466 typedef PVOID
00467 (NTAPI *PRTL_ALLOCATE_STRING_ROUTINE)(
00468     SIZE_T NumberOfBytes
00469 );
00470 
00471 typedef PVOID
00472 (NTAPI *PRTL_REALLOCATE_STRING_ROUTINE)(
00473     SIZE_T NumberOfBytes,
00474     PVOID Buffer
00475 );
00476 
00477 typedef
00478 VOID
00479 (NTAPI *PRTL_FREE_STRING_ROUTINE)(
00480     PVOID Buffer
00481 );
00482 
00483 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine;
00484 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine;
00485 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine;
00486 
00487 #endif /* NTOS_MODE_USER */
00488 
00489 //
00490 // Unhandled Exception Filter
00491 //
00492 typedef ULONG
00493 (NTAPI *RTLP_UNHANDLED_EXCEPTION_FILTER)(
00494     IN struct _EXCEPTION_POINTERS *ExceptionInfo
00495 );
00496 typedef RTLP_UNHANDLED_EXCEPTION_FILTER *PRTLP_UNHANDLED_EXCEPTION_FILTER;
00497 
00498 //
00499 // Callback for RTL Heap Enumeration
00500 //
00501 typedef NTSTATUS
00502 (NTAPI *PHEAP_ENUMERATION_ROUTINE)(
00503     IN PVOID HeapHandle,
00504     IN PVOID UserParam
00505 );
00506 
00507 //
00508 // Thread and Process Start Routines for RtlCreateUserThread/Process
00509 //
00510 typedef ULONG (NTAPI *PTHREAD_START_ROUTINE)(
00511     PVOID Parameter
00512 );
00513 
00514 typedef VOID
00515 (NTAPI *PRTL_BASE_PROCESS_START_ROUTINE)(
00516     PTHREAD_START_ROUTINE StartAddress,
00517     PVOID Parameter
00518 );
00519 
00520 //
00521 // Worker Start/Exit Function
00522 //
00523 typedef NTSTATUS
00524 (NTAPI *PRTL_START_POOL_THREAD)(
00525     IN PTHREAD_START_ROUTINE Function,
00526     IN PVOID Parameter,
00527     OUT PHANDLE ThreadHandle
00528 );
00529 
00530 typedef NTSTATUS
00531 (NTAPI *PRTL_EXIT_POOL_THREAD)(
00532     IN NTSTATUS ExitStatus
00533 );
00534 
00535 //
00536 // Declare empty structure definitions so that they may be referenced by
00537 // routines before they are defined
00538 //
00539 struct _RTL_AVL_TABLE;
00540 struct _RTL_GENERIC_TABLE;
00541 struct _RTL_RANGE;
00542 
00543 //
00544 // Routines and callbacks for the RTL AVL/Generic Table package
00545 //
00546 #ifdef NTOS_MODE_USER
00547 typedef NTSTATUS
00548 (NTAPI RTL_AVL_MATCH_FUNCTION)(
00549     struct _RTL_AVL_TABLE *Table,
00550     PVOID UserData,
00551     PVOID MatchData
00552 );
00553 typedef RTL_AVL_MATCH_FUNCTION *PRTL_AVL_MATCH_FUNCTION;
00554 
00555 typedef RTL_GENERIC_COMPARE_RESULTS
00556 (NTAPI RTL_AVL_COMPARE_ROUTINE) (
00557     struct _RTL_AVL_TABLE *Table,
00558     PVOID FirstStruct,
00559     PVOID SecondStruct
00560 );
00561 typedef RTL_AVL_COMPARE_ROUTINE *PRTL_AVL_COMPARE_ROUTINE;
00562 
00563 typedef RTL_GENERIC_COMPARE_RESULTS
00564 (NTAPI RTL_GENERIC_COMPARE_ROUTINE) (
00565     struct _RTL_GENERIC_TABLE *Table,
00566     PVOID FirstStruct,
00567     PVOID SecondStruct
00568 );
00569 typedef RTL_GENERIC_COMPARE_ROUTINE *PRTL_GENERIC_COMPARE_ROUTINE;
00570 
00571 typedef PVOID
00572 (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE) (
00573     struct _RTL_GENERIC_TABLE *Table,
00574     CLONG ByteSize
00575 );
00576 typedef RTL_GENERIC_ALLOCATE_ROUTINE *PRTL_GENERIC_ALLOCATE_ROUTINE;
00577 
00578 typedef PVOID
00579 (NTAPI RTL_AVL_ALLOCATE_ROUTINE) (
00580     struct _RTL_AVL_TABLE *Table,
00581     CLONG ByteSize
00582 );
00583 typedef RTL_AVL_ALLOCATE_ROUTINE *PRTL_AVL_ALLOCATE_ROUTINE;
00584 
00585 typedef VOID
00586 (NTAPI RTL_GENERIC_FREE_ROUTINE) (
00587     struct _RTL_GENERIC_TABLE *Table,
00588     PVOID Buffer
00589 );
00590 typedef RTL_GENERIC_FREE_ROUTINE *PRTL_GENERIC_FREE_ROUTINE;
00591 
00592 typedef VOID
00593 (NTAPI RTL_AVL_FREE_ROUTINE) (
00594     struct _RTL_AVL_TABLE *Table,
00595     PVOID Buffer
00596 );
00597 typedef RTL_AVL_FREE_ROUTINE *PRTL_AVL_FREE_ROUTINE;
00598 
00599 #ifdef RTL_USE_AVL_TABLES
00600 #undef  RTL_GENERIC_COMPARE_ROUTINE
00601 #undef PRTL_GENERIC_COMPARE_ROUTINE
00602 #undef  RTL_GENERIC_ALLOCATE_ROUTINE
00603 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
00604 #undef  RTL_GENERIC_FREE_ROUTINE
00605 #undef PRTL_GENERIC_FREE_ROUTINE
00606 
00607 #define  RTL_GENERIC_COMPARE_ROUTINE     RTL_AVL_COMPARE_ROUTINE
00608 #define PRTL_GENERIC_COMPARE_ROUTINE    PRTL_AVL_COMPARE_ROUTINE
00609 #define  RTL_GENERIC_ALLOCATE_ROUTINE    RTL_AVL_ALLOCATE_ROUTINE
00610 #define PRTL_GENERIC_ALLOCATE_ROUTINE   PRTL_AVL_ALLOCATE_ROUTINE
00611 #define  RTL_GENERIC_FREE_ROUTINE        RTL_AVL_FREE_ROUTINE
00612 #define PRTL_GENERIC_FREE_ROUTINE       PRTL_AVL_FREE_ROUTINE
00613 #endif /* RTL_USE_AVL_TABLES */
00614 
00615 #endif /* NTOS_MODE_USER */
00616 
00617 //
00618 // RTL Query Registry callback
00619 //
00620 #ifdef NTOS_MODE_USER
00621 typedef NTSTATUS
00622 (NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
00623     IN PWSTR ValueName,
00624     IN ULONG ValueType,
00625     IN PVOID ValueData,
00626     IN ULONG ValueLength,
00627     IN PVOID Context,
00628     IN PVOID EntryContext
00629 );
00630 #endif
00631 
00632 //
00633 // RTL Secure Memory callbacks
00634 //
00635 #ifdef NTOS_MODE_USER
00636 typedef NTSTATUS
00637 (NTAPI *PRTL_SECURE_MEMORY_CACHE_CALLBACK)(
00638     IN PVOID Address,
00639     IN SIZE_T Length
00640 );
00641 #endif
00642 
00643 //
00644 // RTL Range List callbacks
00645 //
00646 #ifdef NTOS_MODE_USER
00647 typedef BOOLEAN
00648 (NTAPI *PRTL_CONFLICT_RANGE_CALLBACK)(
00649     PVOID Context,
00650     struct _RTL_RANGE *Range
00651 );
00652 
00653 //
00654 // Custom Heap Commit Routine for RtlCreateHeap
00655 //
00656 typedef NTSTATUS
00657 (NTAPI * PRTL_HEAP_COMMIT_ROUTINE)(
00658     IN PVOID Base,
00659     IN OUT PVOID *CommitAddress,
00660     IN OUT PSIZE_T CommitSize
00661 );
00662 
00663 //
00664 // Parameters for RtlCreateHeap
00665 //
00666 typedef struct _RTL_HEAP_PARAMETERS
00667 {
00668     ULONG Length;
00669     SIZE_T SegmentReserve;
00670     SIZE_T SegmentCommit;
00671     SIZE_T DeCommitFreeBlockThreshold;
00672     SIZE_T DeCommitTotalFreeThreshold;
00673     SIZE_T MaximumAllocationSize;
00674     SIZE_T VirtualMemoryThreshold;
00675     SIZE_T InitialCommit;
00676     SIZE_T InitialReserve;
00677     PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
00678     SIZE_T Reserved[2];
00679 } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
00680 
00681 //
00682 // RTL Bitmap structures
00683 //
00684 typedef struct _RTL_BITMAP
00685 {
00686     ULONG SizeOfBitMap;
00687     PULONG Buffer;
00688 } RTL_BITMAP, *PRTL_BITMAP;
00689 
00690 typedef struct _RTL_BITMAP_RUN
00691 {
00692     ULONG StartingIndex;
00693     ULONG NumberOfBits;
00694 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
00695 
00696 //
00697 // RtlGenerateXxxName context
00698 //
00699 typedef struct _GENERATE_NAME_CONTEXT
00700 {
00701     USHORT Checksum;
00702     BOOLEAN CheckSumInserted;
00703     UCHAR NameLength;
00704     WCHAR NameBuffer[8];
00705     ULONG ExtensionLength;
00706     WCHAR ExtensionBuffer[4];
00707     ULONG LastIndexValue;
00708 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
00709 
00710 //
00711 // RTL Splay and Balanced Links structures
00712 //
00713 typedef struct _RTL_SPLAY_LINKS
00714 {
00715     struct _RTL_SPLAY_LINKS *Parent;
00716     struct _RTL_SPLAY_LINKS *LeftChild;
00717     struct _RTL_SPLAY_LINKS *RightChild;
00718 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
00719 
00720 typedef struct _RTL_BALANCED_LINKS
00721 {
00722     struct _RTL_BALANCED_LINKS *Parent;
00723     struct _RTL_BALANCED_LINKS *LeftChild;
00724     struct _RTL_BALANCED_LINKS *RightChild;
00725     CHAR Balance;
00726     UCHAR Reserved[3];
00727 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
00728 
00729 //
00730 // RTL Avl/Generic Tables
00731 //
00732 #ifndef RTL_USE_AVL_TABLES
00733 typedef struct _RTL_GENERIC_TABLE
00734 {
00735     PRTL_SPLAY_LINKS TableRoot;
00736     LIST_ENTRY InsertOrderList;
00737     PLIST_ENTRY OrderedPointer;
00738     ULONG WhichOrderedElement;
00739     ULONG NumberGenericTableElements;
00740     PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
00741     PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
00742     PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
00743     PVOID TableContext;
00744 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
00745 #endif /* !RTL_USE_AVL_TABLES */
00746 
00747 typedef struct _RTL_AVL_TABLE
00748 {
00749     RTL_BALANCED_LINKS BalancedRoot;
00750     PVOID OrderedPointer;
00751     ULONG WhichOrderedElement;
00752     ULONG NumberGenericTableElements;
00753     ULONG DepthOfTree;
00754     PRTL_BALANCED_LINKS RestartKey;
00755     ULONG DeleteCount;
00756     PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
00757     PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
00758     PRTL_AVL_FREE_ROUTINE FreeRoutine;
00759     PVOID TableContext;
00760 } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
00761 
00762 #ifdef RTL_USE_AVL_TABLES
00763 #undef  RTL_GENERIC_TABLE
00764 #undef PRTL_GENERIC_TABLE
00765 
00766 #define  RTL_GENERIC_TABLE  RTL_AVL_TABLE
00767 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
00768 #endif /* RTL_USE_AVL_TABLES */
00769 
00770 //
00771 // RTL Compression Buffer
00772 //
00773 typedef struct _COMPRESSED_DATA_INFO {
00774     USHORT CompressionFormatAndEngine;
00775     UCHAR CompressionUnitShift;
00776     UCHAR ChunkShift;
00777     UCHAR ClusterShift;
00778     UCHAR Reserved;
00779     USHORT NumberOfChunks;
00780     ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
00781 } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
00782 
00783 //
00784 // RtlQueryRegistry Data
00785 //
00786 typedef struct _RTL_QUERY_REGISTRY_TABLE
00787 {
00788     PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
00789     ULONG Flags;
00790     PCWSTR Name;
00791     PVOID EntryContext;
00792     ULONG DefaultType;
00793     PVOID DefaultData;
00794     ULONG DefaultLength;
00795 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
00796 
00797 //
00798 // RTL Unicode Table Structures
00799 //
00800 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
00801 {
00802     CSHORT NodeTypeCode;
00803     CSHORT NameLength;
00804     struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
00805     struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
00806     RTL_SPLAY_LINKS Links;
00807     PUNICODE_STRING Prefix;
00808 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
00809 
00810 typedef struct _UNICODE_PREFIX_TABLE
00811 {
00812     CSHORT NodeTypeCode;
00813     CSHORT NameLength;
00814     PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
00815     PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
00816 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
00817 
00818 //
00819 // Time Structure for RTL Time calls
00820 //
00821 typedef struct _TIME_FIELDS
00822 {
00823     CSHORT Year;
00824     CSHORT Month;
00825     CSHORT Day;
00826     CSHORT Hour;
00827     CSHORT Minute;
00828     CSHORT Second;
00829     CSHORT Milliseconds;
00830     CSHORT Weekday;
00831 } TIME_FIELDS, *PTIME_FIELDS;
00832 
00833 //
00834 // Activation Context
00835 //
00836 typedef PVOID PACTIVATION_CONTEXT;
00837 
00838 //
00839 // Activation Context Frame
00840 //
00841 typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
00842 {
00843     struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous;
00844     PACTIVATION_CONTEXT ActivationContext;
00845     ULONG Flags;
00846 } RTL_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME;
00847 
00848 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC
00849 {
00850     SIZE_T Size;
00851     ULONG Format;
00852     RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame;
00853 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_BASIC;
00854 
00855 typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED
00856 {
00857     SIZE_T Size;
00858     ULONG Format;
00859     RTL_ACTIVATION_CONTEXT_STACK_FRAME Frame;
00860     PVOID Extra1;
00861     PVOID Extra2;
00862     PVOID Extra3;
00863     PVOID Extra4;
00864 } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED;
00865 
00866 typedef RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME;
00867 typedef PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME;
00868 
00869 #if (NTDDI_VERSION >= NTDDI_WS03)
00870 typedef struct _ACTIVATION_CONTEXT_STACK
00871 {
00872     PRTL_ACTIVATION_CONTEXT_STACK_FRAME ActiveFrame;
00873     LIST_ENTRY FrameListCache;
00874     ULONG Flags;
00875     ULONG NextCookieSequenceNumber;
00876     ULONG StackId;
00877 } ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK;
00878 #else
00879 typedef struct _ACTIVATION_CONTEXT_STACK
00880 {
00881     ULONG Flags;
00882     ULONG NextCookieSequenceNumber;
00883     PVOID ActiveFrame;
00884     LIST_ENTRY FrameListCache;
00885 } ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK;
00886 #endif
00887 
00888 #endif /* NTOS_MODE_USER */
00889 
00890 //
00891 // ACE Structure
00892 //
00893 typedef struct _ACE
00894 {
00895     ACE_HEADER Header;
00896     ACCESS_MASK AccessMask;
00897 } ACE, *PACE;
00898 
00899 //
00900 // Information Structures for RTL Debug Functions
00901 //
00902 typedef struct _RTL_PROCESS_MODULE_INFORMATION
00903 {
00904     ULONG Section;
00905     PVOID MappedBase;
00906     PVOID ImageBase;
00907     ULONG ImageSize;
00908     ULONG Flags;
00909     USHORT LoadOrderIndex;
00910     USHORT InitOrderIndex;
00911     USHORT LoadCount;
00912     USHORT OffsetToFileName;
00913     CHAR FullPathName[256];
00914 } RTL_PROCESS_MODULE_INFORMATION, *PRTL_PROCESS_MODULE_INFORMATION;
00915 
00916 typedef struct _RTL_PROCESS_MODULES
00917 {
00918     ULONG NumberOfModules;
00919     RTL_PROCESS_MODULE_INFORMATION Modules[1];
00920 } RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES;
00921 
00922 typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX
00923 {
00924     ULONG NextOffset;
00925     RTL_PROCESS_MODULE_INFORMATION BaseInfo;
00926     ULONG ImageCheckSum;
00927     ULONG TimeDateStamp;
00928     PVOID DefaultBase;
00929 } RTL_PROCESS_MODULE_INFORMATION_EX, *PRTL_PROCESS_MODULE_INFORMATION_EX;
00930 
00931 typedef struct _RTL_HEAP_TAG_INFO
00932 {
00933     ULONG NumberOfAllocations;
00934     ULONG NumberOfFrees;
00935     SIZE_T BytesAllocated;
00936 } RTL_HEAP_TAG_INFO, *PRTL_HEAP_TAG_INFO;
00937 
00938 typedef struct _RTL_HEAP_USAGE_ENTRY
00939 {
00940     struct _RTL_HEAP_USAGE_ENTRY *Next;
00941     PVOID Address;
00942     SIZE_T Size;
00943     USHORT AllocatorBackTraceIndex;
00944     USHORT TagIndex;
00945 } RTL_HEAP_USAGE_ENTRY, *PRTL_HEAP_USAGE_ENTRY;
00946 
00947 typedef struct _RTL_HEAP_USAGE
00948 {
00949     ULONG Length;
00950     SIZE_T BytesAllocated;
00951     SIZE_T BytesCommitted;
00952     SIZE_T BytesReserved;
00953     SIZE_T BytesReservedMaximum;
00954     PRTL_HEAP_USAGE_ENTRY Entries;
00955     PRTL_HEAP_USAGE_ENTRY AddedEntries;
00956     PRTL_HEAP_USAGE_ENTRY RemovedEntries;
00957     ULONG_PTR Reserved[8];
00958 } RTL_HEAP_USAGE, *PRTL_HEAP_USAGE;
00959 
00960 typedef struct _RTL_HEAP_WALK_ENTRY
00961 {
00962     PVOID DataAddress;
00963     SIZE_T DataSize;
00964     UCHAR OverheadBytes;
00965     UCHAR SegmentIndex;
00966     USHORT Flags;
00967     union
00968     {
00969         struct
00970         {
00971             SIZE_T Settable;
00972             USHORT TagIndex;
00973             USHORT AllocatorBackTraceIndex;
00974             ULONG Reserved[2];
00975         } Block;
00976         struct
00977         {
00978             ULONG_PTR CommittedSize;
00979             ULONG_PTR UnCommittedSize;
00980             PVOID FirstEntry;
00981             PVOID LastEntry;
00982         } Segment;
00983     };
00984 } RTL_HEAP_WALK_ENTRY, *PRTL_HEAP_WALK_ENTRY;
00985 
00986 typedef struct _RTL_HEAP_ENTRY
00987 {
00988     SIZE_T Size;
00989     USHORT Flags;
00990     USHORT AllocatorBackTraceIndex;
00991     union
00992     {
00993         struct
00994         {
00995             SIZE_T Settable;
00996             ULONG Tag;
00997         } s1;
00998         struct
00999         {
01000             SIZE_T CommittedSize;
01001             PVOID FirstBlock;
01002         } s2;
01003     } u;
01004 } RTL_HEAP_ENTRY, *PRTL_HEAP_ENTRY;
01005 
01006 typedef struct _RTL_HEAP_TAG
01007 {
01008     ULONG NumberOfAllocations;
01009     ULONG NumberOfFrees;
01010     SIZE_T BytesAllocated;
01011     USHORT TagIndex;
01012     USHORT CreatorBackTraceIndex;
01013     WCHAR TagName[24];
01014 } RTL_HEAP_TAG, *PRTL_HEAP_TAG;
01015 
01016 typedef struct _RTL_HEAP_INFORMATION
01017 {
01018     PVOID BaseAddress;
01019     ULONG Flags;
01020     USHORT EntryOverhead;
01021     USHORT CreatorBackTraceIndex;
01022     SIZE_T BytesAllocated;
01023     SIZE_T BytesCommitted;
01024     ULONG NumberOfTags;
01025     ULONG NumberOfEntries;
01026     ULONG NumberOfPseudoTags;
01027     ULONG PseudoTagGranularity;
01028     ULONG Reserved[4];
01029     PRTL_HEAP_TAG Tags;
01030     PRTL_HEAP_ENTRY Entries;
01031 } RTL_HEAP_INFORMATION, *PRTL_HEAP_INFORMATION;
01032 
01033 typedef struct _RTL_PROCESS_HEAPS
01034 {
01035     ULONG NumberOfHeaps;
01036     RTL_HEAP_INFORMATION Heaps[1];
01037 } RTL_PROCESS_HEAPS, *PRTL_PROCESS_HEAPS;
01038 
01039 typedef struct _RTL_PROCESS_LOCK_INFORMATION
01040 {
01041     PVOID Address;
01042     USHORT Type;
01043     USHORT CreatorBackTraceIndex;
01044     ULONG OwnerThreadId;
01045     ULONG ActiveCount;
01046     ULONG ContentionCount;
01047     ULONG EntryCount;
01048     ULONG RecursionCount;
01049     ULONG NumberOfSharedWaiters;
01050     ULONG NumberOfExclusiveWaiters;
01051 } RTL_PROCESS_LOCK_INFORMATION, *PRTL_PROCESS_LOCK_INFORMATION;
01052 
01053 typedef struct _RTL_PROCESS_LOCKS
01054 {
01055     ULONG NumberOfLocks;
01056     RTL_PROCESS_LOCK_INFORMATION Locks[1];
01057 } RTL_PROCESS_LOCKS, *PRTL_PROCESS_LOCKS;
01058 
01059 typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
01060 {
01061     PVOID SymbolicBackTrace;
01062     ULONG TraceCount;
01063     USHORT Index;
01064     USHORT Depth;
01065     PVOID BackTrace[16];
01066 } RTL_PROCESS_BACKTRACE_INFORMATION, *PRTL_PROCESS_BACKTRACE_INFORMATION;
01067 
01068 typedef struct _RTL_PROCESS_BACKTRACES
01069 {
01070     ULONG CommittedMemory;
01071     ULONG ReservedMemory;
01072     ULONG NumberOfBackTraceLookups;
01073     ULONG NumberOfBackTraces;
01074     RTL_PROCESS_BACKTRACE_INFORMATION BackTraces[1];
01075 } RTL_PROCESS_BACKTRACES, *PRTL_PROCESS_BACKTRACES;
01076 
01077 typedef struct _RTL_PROCESS_VERIFIER_OPTIONS
01078 {
01079     ULONG SizeStruct;
01080     ULONG Option;
01081     UCHAR OptionData[1];
01082     //
01083     // Option array continues below
01084     //
01085 } RTL_PROCESS_VERIFIER_OPTIONS, *PRTL_PROCESS_VERIFIER_OPTIONS;
01086 
01087 typedef struct _RTL_DEBUG_INFORMATION
01088 {
01089     HANDLE SectionHandleClient;
01090     PVOID ViewBaseClient;
01091     PVOID ViewBaseTarget;
01092     ULONG ViewBaseDelta;
01093     HANDLE EventPairClient;
01094     PVOID EventPairTarget;
01095     HANDLE TargetProcessId;
01096     HANDLE TargetThreadHandle;
01097     ULONG Flags;
01098     ULONG OffsetFree;
01099     ULONG CommitSize;
01100     ULONG ViewSize;
01101     union
01102     {
01103         PRTL_PROCESS_MODULES Modules;
01104         PRTL_PROCESS_MODULE_INFORMATION_EX ModulesEx;
01105     };
01106     PRTL_PROCESS_BACKTRACES BackTraces;
01107     PRTL_PROCESS_HEAPS Heaps;
01108     PRTL_PROCESS_LOCKS Locks;
01109     HANDLE SpecificHeap;
01110     HANDLE TargetProcessHandle;
01111     RTL_PROCESS_VERIFIER_OPTIONS VerifierOptions;
01112     HANDLE ProcessHeap;
01113     HANDLE CriticalSectionHandle;
01114     HANDLE CriticalSectionOwnerThread;
01115     PVOID Reserved[4];
01116 } RTL_DEBUG_INFORMATION, *PRTL_DEBUG_INFORMATION;
01117 
01118 //
01119 // Unload Event Trace Structure for RtlGetUnloadEventTrace
01120 //
01121 typedef struct _RTL_UNLOAD_EVENT_TRACE
01122 {
01123     PVOID BaseAddress;
01124     ULONG SizeOfImage;
01125     ULONG Sequence;
01126     ULONG TimeDateStamp;
01127     ULONG CheckSum;
01128     WCHAR ImageName[32];
01129 } RTL_UNLOAD_EVENT_TRACE, *PRTL_UNLOAD_EVENT_TRACE;
01130 
01131 //
01132 // RTL Handle Structures
01133 //
01134 typedef struct _RTL_HANDLE_TABLE_ENTRY
01135 {
01136     union
01137     {
01138         ULONG Flags;
01139         struct _RTL_HANDLE_TABLE_ENTRY *NextFree;
01140     };
01141 } RTL_HANDLE_TABLE_ENTRY, *PRTL_HANDLE_TABLE_ENTRY;
01142 
01143 typedef struct _RTL_HANDLE_TABLE
01144 {
01145     ULONG MaximumNumberOfHandles;
01146     ULONG SizeOfHandleTableEntry;
01147     ULONG Reserved[2];
01148     PRTL_HANDLE_TABLE_ENTRY FreeHandles;
01149     PRTL_HANDLE_TABLE_ENTRY CommittedHandles;
01150     PRTL_HANDLE_TABLE_ENTRY UnCommittedHandles;
01151     PRTL_HANDLE_TABLE_ENTRY MaxReservedHandles;
01152 } RTL_HANDLE_TABLE, *PRTL_HANDLE_TABLE;
01153 
01154 //
01155 // Exception Record
01156 //
01157 typedef struct _EXCEPTION_REGISTRATION_RECORD
01158 {
01159     struct _EXCEPTION_REGISTRATION_RECORD *Next;
01160     PEXCEPTION_ROUTINE Handler;
01161 } EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
01162 
01163 //
01164 // Current Directory Structures
01165 //
01166 typedef struct _CURDIR
01167 {
01168     UNICODE_STRING DosPath;
01169     HANDLE Handle;
01170 } CURDIR, *PCURDIR;
01171 
01172 typedef struct _RTLP_CURDIR_REF
01173 {
01174     LONG RefCount;
01175     HANDLE Handle;
01176 } RTLP_CURDIR_REF, *PRTLP_CURDIR_REF;
01177 
01178 typedef struct _RTL_RELATIVE_NAME_U
01179 {
01180     UNICODE_STRING RelativeName;
01181     HANDLE ContainingDirectory;
01182     PRTLP_CURDIR_REF CurDirRef;
01183 } RTL_RELATIVE_NAME_U, *PRTL_RELATIVE_NAME_U;
01184 
01185 typedef struct _RTL_DRIVE_LETTER_CURDIR
01186 {
01187     USHORT Flags;
01188     USHORT Length;
01189     ULONG TimeStamp;
01190     UNICODE_STRING DosPath;
01191 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
01192 
01193 typedef struct _RTL_PERTHREAD_CURDIR
01194 {
01195     PRTL_DRIVE_LETTER_CURDIR CurrentDirectories;
01196     PUNICODE_STRING ImageName;
01197     PVOID Environment;
01198 } RTL_PERTHREAD_CURDIR, *PRTL_PERTHREAD_CURDIR;
01199 
01200 //
01201 // Private State structure for RtlAcquirePrivilege/RtlReleasePrivilege
01202 //
01203 typedef struct _RTL_ACQUIRE_STATE
01204 {
01205     HANDLE Token;
01206     HANDLE OldImpersonationToken;
01207     PTOKEN_PRIVILEGES OldPrivileges;
01208     PTOKEN_PRIVILEGES NewPrivileges;
01209     ULONG Flags;
01210     UCHAR OldPrivBuffer[1024];
01211 } RTL_ACQUIRE_STATE, *PRTL_ACQUIRE_STATE;
01212 
01213 #ifndef NTOS_MODE_USER
01214 
01215 //
01216 // RTL Critical Section Structures
01217 //
01218 typedef struct _RTL_CRITICAL_SECTION_DEBUG
01219 {
01220     USHORT Type;
01221     USHORT CreatorBackTraceIndex;
01222     struct _RTL_CRITICAL_SECTION *CriticalSection;
01223     LIST_ENTRY ProcessLocksList;
01224     ULONG EntryCount;
01225     ULONG ContentionCount;
01226     ULONG Spare[2];
01227 } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
01228 
01229 typedef struct _RTL_CRITICAL_SECTION
01230 {
01231     PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
01232     LONG LockCount;
01233     LONG RecursionCount;
01234     HANDLE OwningThread;
01235     HANDLE LockSemaphore;
01236     ULONG_PTR SpinCount;
01237 } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
01238 
01239 #endif /* !NTOS_MODE_USER */
01240 
01241 //
01242 // RTL Private Heap Structures
01243 //
01244 typedef struct _HEAP_LOCK
01245 {
01246     union
01247     {
01248         RTL_CRITICAL_SECTION CriticalSection;
01249 #ifndef NTOS_MODE_USER
01250         ERESOURCE Resource;
01251 #endif
01252         UCHAR Padding[0x68]; /* Max ERESOURCE size for x64 build. Needed because RTL is built only once */
01253     };
01254 } HEAP_LOCK, *PHEAP_LOCK;
01255 
01256 //
01257 // RTL Range List Structures
01258 //
01259 typedef struct _RTL_RANGE_LIST
01260 {
01261     LIST_ENTRY ListHead;
01262     ULONG Flags;
01263     ULONG Count;
01264     ULONG Stamp;
01265 } RTL_RANGE_LIST, *PRTL_RANGE_LIST;
01266 
01267 typedef struct _RTL_RANGE
01268 {
01269     ULONGLONG Start;
01270     ULONGLONG End;
01271     PVOID UserData;
01272     PVOID Owner;
01273     UCHAR Attributes;
01274     UCHAR Flags;
01275 } RTL_RANGE, *PRTL_RANGE;
01276 
01277 typedef struct _RANGE_LIST_ITERATOR
01278 {
01279     PLIST_ENTRY RangeListHead;
01280     PLIST_ENTRY MergedHead;
01281     PVOID Current;
01282     ULONG Stamp;
01283 } RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
01284 
01285 //
01286 // RTL Resource
01287 //
01288 #define RTL_RESOURCE_FLAG_LONG_TERM ((ULONG)0x00000001)
01289 
01290 typedef struct _RTL_RESOURCE
01291 {
01292     RTL_CRITICAL_SECTION Lock;
01293     HANDLE SharedSemaphore;
01294     ULONG SharedWaiters;
01295     HANDLE ExclusiveSemaphore;
01296     ULONG ExclusiveWaiters;
01297     LONG NumberActive;
01298     HANDLE OwningThread;
01299     ULONG TimeoutBoost;
01300     PVOID DebugInfo;
01301 } RTL_RESOURCE, *PRTL_RESOURCE;
01302 
01303 //
01304 // Structures for RtlCreateUserProcess
01305 //
01306 typedef struct _RTL_USER_PROCESS_PARAMETERS
01307 {
01308     ULONG MaximumLength;
01309     ULONG Length;
01310     ULONG Flags;
01311     ULONG DebugFlags;
01312     HANDLE ConsoleHandle;
01313     ULONG ConsoleFlags;
01314     HANDLE StandardInput;
01315     HANDLE StandardOutput;
01316     HANDLE StandardError;
01317     CURDIR CurrentDirectory;
01318     UNICODE_STRING DllPath;
01319     UNICODE_STRING ImagePathName;
01320     UNICODE_STRING CommandLine;
01321     PWSTR Environment;
01322     ULONG StartingX;
01323     ULONG StartingY;
01324     ULONG CountX;
01325     ULONG CountY;
01326     ULONG CountCharsX;
01327     ULONG CountCharsY;
01328     ULONG FillAttribute;
01329     ULONG WindowFlags;
01330     ULONG ShowWindowFlags;
01331     UNICODE_STRING WindowTitle;
01332     UNICODE_STRING DesktopInfo;
01333     UNICODE_STRING ShellInfo;
01334     UNICODE_STRING RuntimeData;
01335     RTL_DRIVE_LETTER_CURDIR CurrentDirectories[RTL_MAX_DRIVE_LETTERS];
01336 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
01337     SIZE_T EnvironmentSize;
01338 #endif
01339 #if (NTDDI_VERSION >= NTDDI_WIN7)
01340     SIZE_T EnvironmentVersion;
01341 #endif
01342 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
01343 
01344 typedef struct _RTL_USER_PROCESS_INFORMATION
01345 {
01346     ULONG Size;
01347     HANDLE ProcessHandle;
01348     HANDLE ThreadHandle;
01349     CLIENT_ID ClientId;
01350     SECTION_IMAGE_INFORMATION ImageInformation;
01351 } RTL_USER_PROCESS_INFORMATION, *PRTL_USER_PROCESS_INFORMATION;
01352 
01353 //
01354 // RTL Atom Table Structures
01355 //
01356 typedef struct _RTL_ATOM_TABLE_ENTRY
01357 {
01358     struct _RTL_ATOM_TABLE_ENTRY *HashLink;
01359     USHORT HandleIndex;
01360     USHORT Atom;
01361     USHORT ReferenceCount;
01362     UCHAR Flags;
01363     UCHAR NameLength;
01364     WCHAR Name[1];
01365 } RTL_ATOM_TABLE_ENTRY, *PRTL_ATOM_TABLE_ENTRY;
01366 
01367 typedef struct _RTL_ATOM_TABLE
01368 {
01369     ULONG Signature;
01370     union
01371     {
01372 #ifdef NTOS_MODE_USER
01373         RTL_CRITICAL_SECTION CriticalSection;
01374 #else
01375         FAST_MUTEX FastMutex;
01376 #endif
01377     };
01378     union
01379     {
01380 #ifdef NTOS_MODE_USER
01381         RTL_HANDLE_TABLE RtlHandleTable;
01382 #else
01383         PHANDLE_TABLE ExHandleTable;
01384 #endif
01385     };
01386     ULONG NumberOfBuckets;
01387     PRTL_ATOM_TABLE_ENTRY Buckets[1];
01388 } RTL_ATOM_TABLE, *PRTL_ATOM_TABLE;
01389 
01390 #ifndef _WINBASE_
01391 //
01392 // System Time and Timezone Structures
01393 //
01394 typedef struct _SYSTEMTIME
01395 {
01396     USHORT wYear;
01397     USHORT wMonth;
01398     USHORT wDayOfWeek;
01399     USHORT wDay;
01400     USHORT wHour;
01401     USHORT wMinute;
01402     USHORT wSecond;
01403     USHORT wMilliseconds;
01404 } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
01405 
01406 typedef struct _TIME_ZONE_INFORMATION
01407 {
01408     LONG Bias;
01409     WCHAR StandardName[32];
01410     SYSTEMTIME StandardDate;
01411     LONG StandardBias;
01412     WCHAR DaylightName[32];
01413     SYSTEMTIME DaylightDate;
01414     LONG DaylightBias;
01415 } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
01416 #endif /* !_WINBASE_ */
01417 
01418 //
01419 // Native version of Timezone Structure
01420 //
01421 typedef LPTIME_ZONE_INFORMATION PRTL_TIME_ZONE_INFORMATION;
01422 
01423 //
01424 // Hotpatch Header
01425 //
01426 typedef struct _RTL_PATCH_HEADER
01427 {
01428     LIST_ENTRY PatchList;
01429     PVOID PatchImageBase;
01430     struct _RTL_PATCH_HEADER *NextPath;
01431     ULONG PatchFlags;
01432     LONG PatchRefCount;
01433     struct _HOTPATCH_HEADER *HotpatchHeader;
01434     UNICODE_STRING TargetDllName;
01435     PVOID TargetDllBase;
01436     PLDR_DATA_TABLE_ENTRY TargetLdrDataTableEntry;
01437     PLDR_DATA_TABLE_ENTRY PatchLdrDataTableEntry;
01438     struct _SYSTEM_HOTPATCH_CODE_INFORMATION *CodeInfo;
01439 } RTL_PATCH_HEADER, *PRTL_PATCH_HEADER;
01440 
01441 //
01442 // Header for NLS Files
01443 //
01444 typedef struct _NLS_FILE_HEADER
01445 {
01446     USHORT HeaderSize;
01447     USHORT CodePage;
01448     USHORT MaximumCharacterSize;
01449     USHORT DefaultChar;
01450     USHORT UniDefaultChar;
01451     USHORT TransDefaultChar;
01452     USHORT TransUniDefaultChar;
01453     UCHAR LeadByte[MAXIMUM_LEADBYTES];
01454 } NLS_FILE_HEADER, *PNLS_FILE_HEADER;
01455 
01456 //
01457 // Stack Traces
01458 //
01459 typedef struct _RTL_STACK_TRACE_ENTRY
01460 {
01461     struct _RTL_STACK_TRACE_ENTRY *HashChain;
01462     ULONG TraceCount;
01463     USHORT Index;
01464     USHORT Depth;
01465     PVOID BackTrace[32];
01466 } RTL_STACK_TRACE_ENTRY, *PRTL_STACK_TRACE_ENTRY;
01467 
01468 typedef struct _STACK_TRACE_DATABASE
01469 {
01470     RTL_CRITICAL_SECTION CriticalSection;
01471 } STACK_TRACE_DATABASE, *PSTACK_TRACE_DATABASE;
01472 
01473 typedef struct _RTL_TRACE_BLOCK
01474 {
01475     ULONG Magic;
01476     ULONG Count;
01477     ULONG Size;
01478     ULONG UserCount;
01479     ULONG UserSize;
01480     PVOID UserContext;
01481     struct _RTL_TRACE_BLOCK *Next;
01482     PVOID *Trace;
01483 } RTL_TRACE_BLOCK, *PRTL_TRACE_BLOCK;
01484 
01485 //
01486 // Auto-Managed Rtl* String Buffer
01487 //
01488 typedef struct _RTL_BUFFER
01489 {
01490     PUCHAR Buffer;
01491     PUCHAR StaticBuffer;
01492     SIZE_T Size;
01493     SIZE_T StaticSize;
01494     SIZE_T ReservedForAllocatedSize;
01495     PVOID ReservedForIMalloc;
01496 } RTL_BUFFER, *PRTL_BUFFER;
01497 
01498 typedef struct _RTL_UNICODE_STRING_BUFFER
01499 {
01500     UNICODE_STRING String;
01501     RTL_BUFFER ByteBuffer;
01502     WCHAR MinimumStaticBufferForTerminalNul;
01503 } RTL_UNICODE_STRING_BUFFER, *PRTL_UNICODE_STRING_BUFFER;
01504 
01505 #ifndef NTOS_MODE_USER
01506 
01507 //
01508 // Message Resource Entry, Block and Data
01509 //
01510 typedef struct _MESSAGE_RESOURCE_ENTRY
01511 {
01512     USHORT Length;
01513     USHORT Flags;
01514     UCHAR Text[ANYSIZE_ARRAY];
01515 } MESSAGE_RESOURCE_ENTRY, *PMESSAGE_RESOURCE_ENTRY;
01516 
01517 typedef struct _MESSAGE_RESOURCE_BLOCK
01518 {
01519     ULONG LowId;
01520     ULONG HighId;
01521     ULONG OffsetToEntries;
01522 } MESSAGE_RESOURCE_BLOCK, *PMESSAGE_RESOURCE_BLOCK;
01523 
01524 typedef struct _MESSAGE_RESOURCE_DATA
01525 {
01526     ULONG NumberOfBlocks;
01527     MESSAGE_RESOURCE_BLOCK Blocks[ANYSIZE_ARRAY];
01528 } MESSAGE_RESOURCE_DATA, *PMESSAGE_RESOURCE_DATA;
01529 
01530 #endif /* !NTOS_MODE_USER */
01531 #endif /* !_RTLTYPES_H */

Generated on Sat May 26 2012 04:29:45 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.