Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenrtltypes.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
1.7.6.1
|