Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenrtlfuncs.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 rtlfuncs.h 00008 00009 Abstract: 00010 00011 Function 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 _RTLFUNCS_H 00020 #define _RTLFUNCS_H 00021 00022 // 00023 // Dependencies 00024 // 00025 #include <umtypes.h> 00026 #include <ntnls.h> 00027 #include <rtltypes.h> 00028 #include <pstypes.h> 00029 #include <extypes.h> 00030 #include "in6addr.h" 00031 #include "inaddr.h" 00032 00033 #ifdef __cplusplus 00034 extern "C" { 00035 #endif 00036 00037 #ifdef NTOS_MODE_USER 00038 00039 // 00040 // List Functions 00041 // 00042 FORCEINLINE 00043 VOID 00044 InitializeListHead( 00045 IN PLIST_ENTRY ListHead 00046 ) 00047 { 00048 ListHead->Flink = ListHead->Blink = ListHead; 00049 } 00050 00051 FORCEINLINE 00052 VOID 00053 InsertHeadList( 00054 IN PLIST_ENTRY ListHead, 00055 IN PLIST_ENTRY Entry 00056 ) 00057 { 00058 PLIST_ENTRY OldFlink; 00059 OldFlink = ListHead->Flink; 00060 Entry->Flink = OldFlink; 00061 Entry->Blink = ListHead; 00062 OldFlink->Blink = Entry; 00063 ListHead->Flink = Entry; 00064 } 00065 00066 FORCEINLINE 00067 VOID 00068 InsertTailList( 00069 IN PLIST_ENTRY ListHead, 00070 IN PLIST_ENTRY Entry 00071 ) 00072 { 00073 PLIST_ENTRY OldBlink; 00074 OldBlink = ListHead->Blink; 00075 Entry->Flink = ListHead; 00076 Entry->Blink = OldBlink; 00077 OldBlink->Flink = Entry; 00078 ListHead->Blink = Entry; 00079 } 00080 00081 FORCEINLINE 00082 BOOLEAN 00083 IsListEmpty( 00084 IN const LIST_ENTRY * ListHead 00085 ) 00086 { 00087 return (BOOLEAN)(ListHead->Flink == ListHead); 00088 } 00089 00090 FORCEINLINE 00091 PSINGLE_LIST_ENTRY 00092 PopEntryList( 00093 PSINGLE_LIST_ENTRY ListHead 00094 ) 00095 { 00096 PSINGLE_LIST_ENTRY FirstEntry; 00097 FirstEntry = ListHead->Next; 00098 if (FirstEntry != NULL) { 00099 ListHead->Next = FirstEntry->Next; 00100 } 00101 00102 return FirstEntry; 00103 } 00104 00105 FORCEINLINE 00106 VOID 00107 PushEntryList( 00108 PSINGLE_LIST_ENTRY ListHead, 00109 PSINGLE_LIST_ENTRY Entry 00110 ) 00111 { 00112 Entry->Next = ListHead->Next; 00113 ListHead->Next = Entry; 00114 } 00115 00116 FORCEINLINE 00117 BOOLEAN 00118 RemoveEntryList( 00119 IN PLIST_ENTRY Entry) 00120 { 00121 PLIST_ENTRY OldFlink; 00122 PLIST_ENTRY OldBlink; 00123 00124 OldFlink = Entry->Flink; 00125 OldBlink = Entry->Blink; 00126 OldFlink->Blink = OldBlink; 00127 OldBlink->Flink = OldFlink; 00128 return (BOOLEAN)(OldFlink == OldBlink); 00129 } 00130 00131 FORCEINLINE 00132 PLIST_ENTRY 00133 RemoveHeadList( 00134 IN PLIST_ENTRY ListHead) 00135 { 00136 PLIST_ENTRY Flink; 00137 PLIST_ENTRY Entry; 00138 00139 Entry = ListHead->Flink; 00140 Flink = Entry->Flink; 00141 ListHead->Flink = Flink; 00142 Flink->Blink = ListHead; 00143 return Entry; 00144 } 00145 00146 FORCEINLINE 00147 PLIST_ENTRY 00148 RemoveTailList( 00149 IN PLIST_ENTRY ListHead) 00150 { 00151 PLIST_ENTRY Blink; 00152 PLIST_ENTRY Entry; 00153 00154 Entry = ListHead->Blink; 00155 Blink = Entry->Blink; 00156 ListHead->Blink = Blink; 00157 Blink->Flink = ListHead; 00158 return Entry; 00159 } 00160 00161 // 00162 // Unicode string macros 00163 // 00164 FORCEINLINE 00165 VOID 00166 RtlInitEmptyUnicodeString(OUT PUNICODE_STRING UnicodeString, 00167 IN PWSTR Buffer, 00168 IN USHORT BufferSize) 00169 { 00170 UnicodeString->Length = 0; 00171 UnicodeString->MaximumLength = BufferSize; 00172 UnicodeString->Buffer = Buffer; 00173 } 00174 00175 FORCEINLINE 00176 VOID 00177 RtlInitEmptyAnsiString(OUT PANSI_STRING AnsiString, 00178 IN PSTR Buffer, 00179 IN USHORT BufferSize) 00180 { 00181 AnsiString->Length = 0; 00182 AnsiString->MaximumLength = BufferSize; 00183 AnsiString->Buffer = Buffer; 00184 } 00185 00186 // 00187 // LUID Macros 00188 // 00189 #define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \ 00190 ((L1)->LowPart == (L2)->LowPart)) 00191 FORCEINLINE 00192 LUID 00193 NTAPI_INLINE 00194 RtlConvertUlongToLuid(ULONG Ulong) 00195 { 00196 LUID TempLuid; 00197 00198 TempLuid.LowPart = Ulong; 00199 TempLuid.HighPart = 0; 00200 return TempLuid; 00201 } 00202 00203 // 00204 // ASSERT Macros 00205 // 00206 #ifndef ASSERT 00207 #if DBG 00208 00209 #define ASSERT( exp ) \ 00210 ((void)((!(exp)) ? \ 00211 (RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ),FALSE) : \ 00212 TRUE)) 00213 00214 #define ASSERTMSG( msg, exp ) \ 00215 ((void)((!(exp)) ? \ 00216 (RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ),FALSE) : \ 00217 TRUE)) 00218 00219 #else 00220 00221 #define ASSERT( exp ) ((void) 0) 00222 #define ASSERTMSG( msg, exp ) ((void) 0) 00223 00224 #endif 00225 #endif 00226 00227 #ifdef NTOS_KERNEL_RUNTIME 00228 00229 // 00230 // Executing RTL functions at DISPATCH_LEVEL or higher will result in a 00231 // bugcheck. 00232 // 00233 #define RTL_PAGED_CODE PAGED_CODE 00234 00235 #else 00236 00237 // 00238 // This macro does nothing in user mode 00239 // 00240 #define RTL_PAGED_CODE NOP_FUNCTION 00241 00242 #endif 00243 00244 // 00245 // RTL Splay Tree Functions 00246 // 00247 #ifndef RTL_USE_AVL_TABLES 00248 00249 NTSYSAPI 00250 VOID 00251 NTAPI 00252 RtlInitializeGenericTable( 00253 OUT PRTL_GENERIC_TABLE Table, 00254 IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine, 00255 IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine, 00256 IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine, 00257 IN PVOID TableContext OPTIONAL 00258 ); 00259 00260 NTSYSAPI 00261 PVOID 00262 NTAPI 00263 RtlInsertElementGenericTable( 00264 IN PRTL_GENERIC_TABLE Table, 00265 IN PVOID Buffer, 00266 IN CLONG BufferSize, 00267 OUT PBOOLEAN NewElement OPTIONAL 00268 ); 00269 00270 NTSYSAPI 00271 PVOID 00272 NTAPI 00273 RtlInsertElementGenericTableFull( 00274 IN PRTL_GENERIC_TABLE Table, 00275 IN PVOID Buffer, 00276 IN CLONG BufferSize, 00277 OUT PBOOLEAN NewElement OPTIONAL, 00278 IN PVOID NodeOrParent, 00279 IN TABLE_SEARCH_RESULT SearchResult 00280 ); 00281 00282 NTSYSAPI 00283 BOOLEAN 00284 NTAPI 00285 RtlDeleteElementGenericTable( 00286 IN PRTL_GENERIC_TABLE Table, 00287 IN PVOID Buffer 00288 ); 00289 00290 NTSYSAPI 00291 PVOID 00292 NTAPI 00293 RtlLookupElementGenericTable( 00294 IN PRTL_GENERIC_TABLE Table, 00295 IN PVOID Buffer 00296 ); 00297 00298 NTSYSAPI 00299 PVOID 00300 NTAPI 00301 RtlLookupElementGenericTableFull( 00302 IN PRTL_GENERIC_TABLE Table, 00303 IN PVOID Buffer, 00304 OUT PVOID *NodeOrParent, 00305 OUT TABLE_SEARCH_RESULT *SearchResult 00306 ); 00307 00308 NTSYSAPI 00309 PVOID 00310 NTAPI 00311 RtlEnumerateGenericTable( 00312 IN PRTL_GENERIC_TABLE Table, 00313 IN BOOLEAN Restart 00314 ); 00315 00316 NTSYSAPI 00317 PVOID 00318 NTAPI 00319 RtlEnumerateGenericTableWithoutSplaying( 00320 IN PRTL_GENERIC_TABLE Table, 00321 IN OUT PVOID *RestartKey 00322 ); 00323 00324 NTSYSAPI 00325 PVOID 00326 NTAPI 00327 RtlGetElementGenericTable( 00328 IN PRTL_GENERIC_TABLE Table, 00329 IN ULONG I 00330 ); 00331 00332 NTSYSAPI 00333 ULONG 00334 NTAPI 00335 RtlNumberGenericTableElements( 00336 IN PRTL_GENERIC_TABLE Table 00337 ); 00338 00339 NTSYSAPI 00340 BOOLEAN 00341 NTAPI 00342 RtlIsGenericTableEmpty( 00343 IN PRTL_GENERIC_TABLE Table 00344 ); 00345 00346 #endif /* !RTL_USE_AVL_TABLES */ 00347 00348 NTSYSAPI 00349 PRTL_SPLAY_LINKS 00350 NTAPI 00351 RtlSplay( 00352 IN PRTL_SPLAY_LINKS Links 00353 ); 00354 00355 NTSYSAPI 00356 PRTL_SPLAY_LINKS 00357 NTAPI 00358 RtlDelete( 00359 IN PRTL_SPLAY_LINKS Links 00360 ); 00361 00362 NTSYSAPI 00363 VOID 00364 NTAPI 00365 RtlDeleteNoSplay( 00366 IN PRTL_SPLAY_LINKS Links, 00367 OUT PRTL_SPLAY_LINKS *Root 00368 ); 00369 00370 NTSYSAPI 00371 PRTL_SPLAY_LINKS 00372 NTAPI 00373 RtlSubtreeSuccessor( 00374 IN PRTL_SPLAY_LINKS Links 00375 ); 00376 00377 NTSYSAPI 00378 PRTL_SPLAY_LINKS 00379 NTAPI 00380 RtlSubtreePredecessor( 00381 IN PRTL_SPLAY_LINKS Links 00382 ); 00383 00384 NTSYSAPI 00385 PRTL_SPLAY_LINKS 00386 NTAPI 00387 RtlRealSuccessor( 00388 IN PRTL_SPLAY_LINKS Links 00389 ); 00390 00391 NTSYSAPI 00392 PRTL_SPLAY_LINKS 00393 NTAPI 00394 RtlRealPredecessor( 00395 IN PRTL_SPLAY_LINKS Links 00396 ); 00397 00398 #define RtlIsLeftChild(Links) \ 00399 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links)) 00400 00401 #define RtlIsRightChild(Links) \ 00402 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links)) 00403 00404 #define RtlRightChild(Links) \ 00405 ((PRTL_SPLAY_LINKS)(Links))->RightChild 00406 00407 #define RtlIsRoot(Links) \ 00408 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links)) 00409 00410 #define RtlLeftChild(Links) \ 00411 ((PRTL_SPLAY_LINKS)(Links))->LeftChild 00412 00413 #define RtlParent(Links) \ 00414 ((PRTL_SPLAY_LINKS)(Links))->Parent 00415 00416 #define RtlInitializeSplayLinks(Links) \ 00417 { \ 00418 PRTL_SPLAY_LINKS _SplayLinks; \ 00419 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \ 00420 _SplayLinks->Parent = _SplayLinks; \ 00421 _SplayLinks->LeftChild = NULL; \ 00422 _SplayLinks->RightChild = NULL; \ 00423 } 00424 00425 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \ 00426 { \ 00427 PRTL_SPLAY_LINKS _SplayParent; \ 00428 PRTL_SPLAY_LINKS _SplayChild; \ 00429 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \ 00430 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \ 00431 _SplayParent->LeftChild = _SplayChild; \ 00432 _SplayChild->Parent = _SplayParent; \ 00433 } 00434 00435 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \ 00436 { \ 00437 PRTL_SPLAY_LINKS _SplayParent; \ 00438 PRTL_SPLAY_LINKS _SplayChild; \ 00439 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \ 00440 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \ 00441 _SplayParent->RightChild = _SplayChild; \ 00442 _SplayChild->Parent = _SplayParent; \ 00443 } 00444 00445 // 00446 // RTL AVL Tree Functions 00447 // 00448 NTSYSAPI 00449 VOID 00450 NTAPI 00451 RtlInitializeGenericTableAvl( 00452 OUT PRTL_AVL_TABLE Table, 00453 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine, 00454 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine, 00455 IN PRTL_AVL_FREE_ROUTINE FreeRoutine, 00456 IN PVOID TableContext OPTIONAL 00457 ); 00458 00459 NTSYSAPI 00460 PVOID 00461 NTAPI 00462 RtlInsertElementGenericTableAvl( 00463 IN PRTL_AVL_TABLE Table, 00464 IN PVOID Buffer, 00465 IN CLONG BufferSize, 00466 OUT PBOOLEAN NewElement OPTIONAL 00467 ); 00468 00469 NTSYSAPI 00470 PVOID 00471 NTAPI 00472 RtlInsertElementGenericTableFullAvl( 00473 IN PRTL_AVL_TABLE Table, 00474 IN PVOID Buffer, 00475 IN CLONG BufferSize, 00476 OUT PBOOLEAN NewElement OPTIONAL, 00477 IN PVOID NodeOrParent, 00478 IN TABLE_SEARCH_RESULT SearchResult 00479 ); 00480 00481 NTSYSAPI 00482 BOOLEAN 00483 NTAPI 00484 RtlDeleteElementGenericTableAvl( 00485 IN PRTL_AVL_TABLE Table, 00486 IN PVOID Buffer 00487 ); 00488 00489 NTSYSAPI 00490 PVOID 00491 NTAPI 00492 RtlLookupElementGenericTableAvl( 00493 IN PRTL_AVL_TABLE Table, 00494 IN PVOID Buffer 00495 ); 00496 00497 NTSYSAPI 00498 PVOID 00499 NTAPI 00500 RtlLookupElementGenericTableFullAvl( 00501 IN PRTL_AVL_TABLE Table, 00502 IN PVOID Buffer, 00503 OUT PVOID *NodeOrParent, 00504 OUT TABLE_SEARCH_RESULT *SearchResult 00505 ); 00506 00507 NTSYSAPI 00508 PVOID 00509 NTAPI 00510 RtlEnumerateGenericTableAvl( 00511 IN PRTL_AVL_TABLE Table, 00512 IN BOOLEAN Restart 00513 ); 00514 00515 NTSYSAPI 00516 PVOID 00517 NTAPI 00518 RtlEnumerateGenericTableWithoutSplayingAvl( 00519 IN PRTL_AVL_TABLE Table, 00520 IN OUT PVOID *RestartKey 00521 ); 00522 00523 NTSYSAPI 00524 PVOID 00525 NTAPI 00526 RtlLookupFirstMatchingElementGenericTableAvl( 00527 IN PRTL_AVL_TABLE Table, 00528 IN PVOID Buffer, 00529 OUT PVOID *RestartKey 00530 ); 00531 00532 NTSYSAPI 00533 PVOID 00534 NTAPI 00535 RtlEnumerateGenericTableLikeADirectory( 00536 IN PRTL_AVL_TABLE Table, 00537 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL, 00538 IN PVOID MatchData OPTIONAL, 00539 IN ULONG NextFlag, 00540 IN OUT PVOID *RestartKey, 00541 IN OUT PULONG DeleteCount, 00542 IN PVOID Buffer 00543 ); 00544 00545 NTSYSAPI 00546 PVOID 00547 NTAPI 00548 RtlGetElementGenericTableAvl( 00549 IN PRTL_AVL_TABLE Table, 00550 IN ULONG I 00551 ); 00552 00553 NTSYSAPI 00554 ULONG 00555 NTAPI 00556 RtlNumberGenericTableElementsAvl( 00557 IN PRTL_AVL_TABLE Table 00558 ); 00559 00560 NTSYSAPI 00561 BOOLEAN 00562 NTAPI 00563 RtlIsGenericTableEmptyAvl( 00564 IN PRTL_AVL_TABLE Table 00565 ); 00566 00567 #ifdef RTL_USE_AVL_TABLES 00568 00569 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl 00570 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl 00571 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl 00572 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl 00573 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl 00574 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl 00575 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl 00576 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl 00577 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl 00578 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl 00579 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl 00580 00581 #endif /* RTL_USE_AVL_TABLES */ 00582 00583 #endif /* NTOS_MODE_USER */ 00584 00585 // 00586 // Error and Exception Functions 00587 // 00588 NTSYSAPI 00589 PVOID 00590 NTAPI 00591 RtlAddVectoredExceptionHandler( 00592 IN ULONG FirstHandler, 00593 IN PVECTORED_EXCEPTION_HANDLER VectoredHandler 00594 ); 00595 00596 NTSYSAPI 00597 VOID 00598 NTAPI 00599 RtlAssert( 00600 IN PVOID FailedAssertion, 00601 IN PVOID FileName, 00602 IN ULONG LineNumber, 00603 IN PCHAR Message 00604 ); 00605 00606 NTSYSAPI 00607 VOID 00608 NTAPI 00609 RtlSetUnhandledExceptionFilter( 00610 IN PRTLP_UNHANDLED_EXCEPTION_FILTER TopLevelExceptionFilter 00611 ); 00612 00613 NTSYSAPI 00614 VOID 00615 NTAPI 00616 RtlCaptureContext( 00617 OUT PCONTEXT ContextRecord 00618 ); 00619 00620 NTSYSAPI 00621 PVOID 00622 NTAPI 00623 RtlEncodePointer( 00624 IN PVOID Pointer 00625 ); 00626 00627 NTSYSAPI 00628 PVOID 00629 NTAPI 00630 RtlDecodePointer( 00631 IN PVOID Pointer 00632 ); 00633 00634 NTSYSAPI 00635 PVOID 00636 NTAPI 00637 RtlEncodeSystemPointer( 00638 IN PVOID Pointer 00639 ); 00640 00641 NTSYSAPI 00642 PVOID 00643 NTAPI 00644 RtlDecodeSystemPointer( 00645 IN PVOID Pointer 00646 ); 00647 00648 NTSYSAPI 00649 BOOLEAN 00650 NTAPI 00651 RtlDispatchException( 00652 IN PEXCEPTION_RECORD ExceptionRecord, 00653 IN PCONTEXT Context 00654 ); 00655 00656 NTSYSAPI 00657 ULONG 00658 NTAPI 00659 RtlNtStatusToDosError( 00660 IN NTSTATUS Status 00661 ); 00662 00663 NTSYSAPI 00664 ULONG 00665 NTAPI 00666 RtlNtStatusToDosErrorNoTeb( 00667 IN NTSTATUS Status 00668 ); 00669 00670 NTSYSAPI 00671 VOID 00672 NTAPI 00673 RtlSetLastWin32ErrorAndNtStatusFromNtStatus( 00674 IN NTSTATUS Status 00675 ); 00676 00677 NTSYSAPI 00678 VOID 00679 NTAPI 00680 RtlRaiseException( 00681 IN PEXCEPTION_RECORD ExceptionRecord 00682 ); 00683 00684 DECLSPEC_NORETURN 00685 NTSYSAPI 00686 VOID 00687 NTAPI 00688 RtlRaiseStatus( 00689 IN NTSTATUS Status 00690 ); 00691 00692 NTSYSAPI 00693 LONG 00694 NTAPI 00695 RtlUnhandledExceptionFilter( 00696 IN struct _EXCEPTION_POINTERS* ExceptionInfo 00697 ); 00698 00699 NTSYSAPI 00700 VOID 00701 NTAPI 00702 RtlUnwind( 00703 IN PVOID TargetFrame OPTIONAL, 00704 IN PVOID TargetIp OPTIONAL, 00705 IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL, 00706 IN PVOID ReturnValue 00707 ); 00708 00709 // 00710 // Tracing Functions 00711 // 00712 NTSYSAPI 00713 ULONG 00714 NTAPI 00715 RtlWalkFrameChain( 00716 OUT PVOID *Callers, 00717 IN ULONG Count, 00718 IN ULONG Flags 00719 ); 00720 00721 NTSYSAPI 00722 USHORT 00723 NTAPI 00724 RtlLogStackBackTrace( 00725 VOID 00726 ); 00727 00728 // 00729 // Heap Functions 00730 // 00731 NTSYSAPI 00732 PVOID 00733 NTAPI 00734 RtlAllocateHeap( 00735 IN HANDLE HeapHandle, 00736 IN ULONG Flags, 00737 IN SIZE_T Size 00738 ); 00739 00740 NTSYSAPI 00741 PVOID 00742 NTAPI 00743 RtlCreateHeap( 00744 IN ULONG Flags, 00745 IN PVOID BaseAddress OPTIONAL, 00746 IN SIZE_T SizeToReserve OPTIONAL, 00747 IN SIZE_T SizeToCommit OPTIONAL, 00748 IN PVOID Lock OPTIONAL, 00749 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL 00750 ); 00751 00752 NTSYSAPI 00753 ULONG 00754 NTAPI 00755 RtlCreateTagHeap( 00756 IN HANDLE HeapHandle, 00757 IN ULONG Flags, 00758 IN PWSTR TagName, 00759 IN PWSTR TagSubName 00760 ); 00761 00762 ULONG 00763 NTAPI 00764 RtlCompactHeap( 00765 HANDLE Heap, 00766 ULONG Flags 00767 ); 00768 00769 NTSYSAPI 00770 PVOID 00771 NTAPI 00772 RtlDebugCreateHeap( 00773 IN ULONG Flags, 00774 IN PVOID BaseAddress OPTIONAL, 00775 IN SIZE_T SizeToReserve OPTIONAL, 00776 IN SIZE_T SizeToCommit OPTIONAL, 00777 IN PVOID Lock OPTIONAL, 00778 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL 00779 ); 00780 00781 NTSYSAPI 00782 HANDLE 00783 NTAPI 00784 RtlDestroyHeap( 00785 IN HANDLE Heap 00786 ); 00787 00788 NTSYSAPI 00789 ULONG 00790 NTAPI 00791 RtlExtendHeap( 00792 IN HANDLE Heap, 00793 IN ULONG Flags, 00794 IN PVOID P, 00795 IN SIZE_T Size 00796 ); 00797 00798 NTSYSAPI 00799 BOOLEAN 00800 NTAPI 00801 RtlFreeHeap( 00802 IN HANDLE HeapHandle, 00803 IN ULONG Flags, 00804 IN PVOID P 00805 ); 00806 00807 NTSYSAPI 00808 ULONG 00809 NTAPI 00810 RtlGetNtGlobalFlags( 00811 VOID 00812 ); 00813 00814 ULONG 00815 NTAPI 00816 RtlGetProcessHeaps( 00817 ULONG HeapCount, 00818 HANDLE *HeapArray 00819 ); 00820 00821 BOOLEAN 00822 NTAPI 00823 RtlGetUserInfoHeap( 00824 IN PVOID HeapHandle, 00825 IN ULONG Flags, 00826 IN PVOID BaseAddress, 00827 OUT PVOID *UserValue, 00828 OUT PULONG UserFlags 00829 ); 00830 00831 NTSYSAPI 00832 PVOID 00833 NTAPI 00834 RtlProtectHeap( 00835 IN PVOID HeapHandle, 00836 IN BOOLEAN Protect 00837 ); 00838 00839 NTSYSAPI 00840 NTSTATUS 00841 NTAPI 00842 RtlQueryHeapInformation ( 00843 IN PVOID HeapHandle, 00844 IN HEAP_INFORMATION_CLASS HeapInformationClass, 00845 OUT PVOID HeapInformation OPTIONAL, 00846 IN SIZE_T HeapInformationLength OPTIONAL, 00847 OUT PSIZE_T ReturnLength OPTIONAL 00848 ); 00849 00850 NTSYSAPI 00851 PWSTR 00852 NTAPI 00853 RtlQueryTagHeap( 00854 IN PVOID HeapHandle, 00855 IN ULONG Flags, 00856 IN USHORT TagIndex, 00857 IN BOOLEAN ResetCounters, 00858 OUT PRTL_HEAP_TAG_INFO HeapTagInfo 00859 ); 00860 00861 NTSYSAPI 00862 PVOID 00863 NTAPI 00864 RtlReAllocateHeap( 00865 HANDLE Heap, 00866 ULONG Flags, 00867 PVOID Ptr, 00868 SIZE_T Size 00869 ); 00870 00871 NTSYSAPI 00872 NTSTATUS 00873 NTAPI 00874 RtlSetHeapInformation ( 00875 IN PVOID HeapHandle, 00876 IN HEAP_INFORMATION_CLASS HeapInformationClass, 00877 IN PVOID HeapInformation OPTIONAL, 00878 IN SIZE_T HeapInformationLength OPTIONAL 00879 ); 00880 00881 NTSYSAPI 00882 BOOLEAN 00883 NTAPI 00884 RtlLockHeap( 00885 IN HANDLE Heap 00886 ); 00887 00888 NTSYSAPI 00889 NTSTATUS 00890 NTAPI 00891 RtlMultipleAllocateHeap ( 00892 IN PVOID HeapHandle, 00893 IN ULONG Flags, 00894 IN SIZE_T Size, 00895 IN ULONG Count, 00896 OUT PVOID * Array 00897 ); 00898 00899 NTSYSAPI 00900 NTSTATUS 00901 NTAPI 00902 RtlMultipleFreeHeap ( 00903 IN PVOID HeapHandle, 00904 IN ULONG Flags, 00905 IN ULONG Count, 00906 OUT PVOID * Array 00907 ); 00908 00909 NTSYSAPI 00910 NTSTATUS 00911 NTAPI 00912 RtlUsageHeap( 00913 IN HANDLE Heap, 00914 IN ULONG Flags, 00915 OUT PRTL_HEAP_USAGE Usage 00916 ); 00917 00918 NTSYSAPI 00919 BOOLEAN 00920 NTAPI 00921 RtlUnlockHeap( 00922 IN HANDLE Heap 00923 ); 00924 00925 BOOLEAN 00926 NTAPI 00927 RtlSetUserValueHeap( 00928 IN PVOID HeapHandle, 00929 IN ULONG Flags, 00930 IN PVOID BaseAddress, 00931 IN PVOID UserValue 00932 ); 00933 00934 BOOLEAN 00935 NTAPI 00936 RtlSetUserFlagsHeap( 00937 IN PVOID HeapHandle, 00938 IN ULONG Flags, 00939 IN PVOID BaseAddress, 00940 IN ULONG UserFlagsReset, 00941 IN ULONG UserFlagsSet 00942 ); 00943 00944 NTSYSAPI 00945 SIZE_T 00946 NTAPI 00947 RtlSizeHeap( 00948 IN PVOID HeapHandle, 00949 IN ULONG Flags, 00950 IN PVOID MemoryPointer 00951 ); 00952 00953 NTSYSAPI 00954 BOOLEAN 00955 NTAPI 00956 RtlValidateHeap( 00957 HANDLE Heap, 00958 ULONG Flags, 00959 PVOID P 00960 ); 00961 00962 NTSYSAPI 00963 NTSTATUS 00964 NTAPI 00965 RtlWalkHeap( 00966 IN HANDLE HeapHandle, 00967 IN PVOID HeapEntry 00968 ); 00969 00970 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap) 00971 00972 // 00973 // Security Functions 00974 // 00975 NTSYSAPI 00976 NTSTATUS 00977 NTAPI 00978 RtlAbsoluteToSelfRelativeSD( 00979 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor, 00980 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor, 00981 IN PULONG BufferLength 00982 ); 00983 00984 NTSYSAPI 00985 NTSTATUS 00986 NTAPI 00987 RtlAddAccessAllowedAce( 00988 PACL Acl, 00989 ULONG Revision, 00990 ACCESS_MASK AccessMask, 00991 PSID Sid 00992 ); 00993 00994 NTSYSAPI 00995 NTSTATUS 00996 NTAPI 00997 RtlAddAccessAllowedAceEx( 00998 IN OUT PACL pAcl, 00999 IN ULONG dwAceRevision, 01000 IN ULONG AceFlags, 01001 IN ACCESS_MASK AccessMask, 01002 IN PSID pSid 01003 ); 01004 01005 NTSYSAPI 01006 NTSTATUS 01007 NTAPI 01008 RtlAddAccessAllowedObjectAce( 01009 IN OUT PACL pAcl, 01010 IN ULONG dwAceRevision, 01011 IN ULONG AceFlags, 01012 IN ACCESS_MASK AccessMask, 01013 IN GUID *ObjectTypeGuid OPTIONAL, 01014 IN GUID *InheritedObjectTypeGuid OPTIONAL, 01015 IN PSID pSid 01016 ); 01017 01018 NTSYSAPI 01019 NTSTATUS 01020 NTAPI 01021 RtlAddAccessDeniedAce( 01022 PACL Acl, 01023 ULONG Revision, 01024 ACCESS_MASK AccessMask, 01025 PSID Sid 01026 ); 01027 01028 NTSYSAPI 01029 NTSTATUS 01030 NTAPI 01031 RtlAddAccessDeniedAceEx( 01032 IN OUT PACL Acl, 01033 IN ULONG Revision, 01034 IN ULONG Flags, 01035 IN ACCESS_MASK AccessMask, 01036 IN PSID Sid 01037 ); 01038 01039 NTSYSAPI 01040 NTSTATUS 01041 NTAPI 01042 RtlAddAccessDeniedObjectAce( 01043 IN OUT PACL pAcl, 01044 IN ULONG dwAceRevision, 01045 IN ULONG AceFlags, 01046 IN ACCESS_MASK AccessMask, 01047 IN GUID *ObjectTypeGuid OPTIONAL, 01048 IN GUID *InheritedObjectTypeGuid OPTIONAL, 01049 IN PSID pSid 01050 ); 01051 01052 NTSYSAPI 01053 NTSTATUS 01054 NTAPI 01055 RtlAddAce( 01056 PACL Acl, 01057 ULONG AceRevision, 01058 ULONG StartingAceIndex, 01059 PVOID AceList, 01060 ULONG AceListLength 01061 ); 01062 01063 NTSYSAPI 01064 NTSTATUS 01065 NTAPI 01066 RtlAddAuditAccessAce( 01067 PACL Acl, 01068 ULONG Revision, 01069 ACCESS_MASK AccessMask, 01070 PSID Sid, 01071 BOOLEAN Success, 01072 BOOLEAN Failure 01073 ); 01074 01075 NTSYSAPI 01076 NTSTATUS 01077 NTAPI 01078 RtlAcquirePrivilege( 01079 IN PULONG Privilege, 01080 IN ULONG NumPriv, 01081 IN ULONG Flags, 01082 OUT PVOID *ReturnedState 01083 ); 01084 01085 NTSYSAPI 01086 NTSTATUS 01087 NTAPI 01088 RtlAddAuditAccessAceEx( 01089 IN OUT PACL Acl, 01090 IN ULONG Revision, 01091 IN ULONG Flags, 01092 IN ACCESS_MASK AccessMask, 01093 IN PSID Sid, 01094 IN BOOLEAN Success, 01095 IN BOOLEAN Failure 01096 ); 01097 01098 NTSYSAPI 01099 NTSTATUS 01100 NTAPI 01101 RtlAddAuditAccessObjectAce( 01102 IN OUT PACL Acl, 01103 IN ULONG Revision, 01104 IN ULONG Flags, 01105 IN ACCESS_MASK AccessMask, 01106 IN GUID *ObjectTypeGuid OPTIONAL, 01107 IN GUID *InheritedObjectTypeGuid OPTIONAL, 01108 IN PSID Sid, 01109 IN BOOLEAN Success, 01110 IN BOOLEAN Failure 01111 ); 01112 01113 NTSYSAPI 01114 NTSTATUS 01115 NTAPI 01116 RtlAddMandatoryAce( 01117 IN OUT PACL Acl, 01118 IN ULONG Revision, 01119 IN ULONG Flags, 01120 IN ULONG MandatoryFlags, 01121 IN UCHAR AceType, 01122 IN PSID LabelSid); 01123 01124 NTSYSAPI 01125 NTSTATUS 01126 NTAPI 01127 RtlAdjustPrivilege( 01128 IN ULONG Privilege, 01129 IN BOOLEAN NewValue, 01130 IN BOOLEAN ForThread, 01131 OUT PBOOLEAN OldValue 01132 ); 01133 01134 NTSYSAPI 01135 NTSTATUS 01136 NTAPI 01137 RtlAllocateAndInitializeSid( 01138 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, 01139 IN UCHAR SubAuthorityCount, 01140 IN ULONG SubAuthority0, 01141 IN ULONG SubAuthority1, 01142 IN ULONG SubAuthority2, 01143 IN ULONG SubAuthority3, 01144 IN ULONG SubAuthority4, 01145 IN ULONG SubAuthority5, 01146 IN ULONG SubAuthority6, 01147 IN ULONG SubAuthority7, 01148 OUT PSID *Sid 01149 ); 01150 01151 NTSYSAPI 01152 BOOLEAN 01153 NTAPI 01154 RtlAreAllAccessesGranted( 01155 ACCESS_MASK GrantedAccess, 01156 ACCESS_MASK DesiredAccess 01157 ); 01158 01159 NTSYSAPI 01160 BOOLEAN 01161 NTAPI 01162 RtlAreAnyAccessesGranted( 01163 ACCESS_MASK GrantedAccess, 01164 ACCESS_MASK DesiredAccess 01165 ); 01166 01167 NTSYSAPI 01168 VOID 01169 NTAPI 01170 RtlCopyLuid( 01171 IN PLUID LuidDest, 01172 IN PLUID LuidSrc 01173 ); 01174 01175 NTSYSAPI 01176 VOID 01177 NTAPI 01178 RtlCopyLuidAndAttributesArray( 01179 ULONG Count, 01180 PLUID_AND_ATTRIBUTES Src, 01181 PLUID_AND_ATTRIBUTES Dest 01182 ); 01183 01184 NTSYSAPI 01185 NTSTATUS 01186 NTAPI 01187 RtlCopySidAndAttributesArray( 01188 ULONG Count, 01189 PSID_AND_ATTRIBUTES Src, 01190 ULONG SidAreaSize, 01191 PSID_AND_ATTRIBUTES Dest, 01192 PVOID SidArea, 01193 PVOID* RemainingSidArea, 01194 PULONG RemainingSidAreaSize 01195 ); 01196 01197 NTSYSAPI 01198 NTSTATUS 01199 NTAPI 01200 RtlConvertSidToUnicodeString( 01201 OUT PUNICODE_STRING DestinationString, 01202 IN PSID Sid, 01203 IN BOOLEAN AllocateDestinationString 01204 ); 01205 01206 NTSYSAPI 01207 NTSTATUS 01208 NTAPI 01209 RtlCopySid( 01210 IN ULONG Length, 01211 IN PSID Destination, 01212 IN PSID Source 01213 ); 01214 01215 NTSYSAPI 01216 NTSTATUS 01217 NTAPI 01218 RtlCreateAcl( 01219 PACL Acl, 01220 ULONG AclSize, 01221 ULONG AclRevision 01222 ); 01223 01224 NTSYSAPI 01225 NTSTATUS 01226 NTAPI 01227 RtlCreateSecurityDescriptor( 01228 OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 01229 IN ULONG Revision 01230 ); 01231 01232 NTSYSAPI 01233 NTSTATUS 01234 NTAPI 01235 RtlCreateSecurityDescriptorRelative( 01236 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor, 01237 IN ULONG Revision 01238 ); 01239 01240 NTSYSAPI 01241 NTSTATUS 01242 NTAPI 01243 RtlCopySecurityDescriptor( 01244 IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor, 01245 OUT PSECURITY_DESCRIPTOR pDestinationSecurityDescriptor 01246 ); 01247 01248 NTSYSAPI 01249 NTSTATUS 01250 NTAPI 01251 RtlDeleteAce( 01252 PACL Acl, 01253 ULONG AceIndex 01254 ); 01255 01256 NTSYSAPI 01257 BOOLEAN 01258 NTAPI 01259 RtlEqualPrefixSid( 01260 PSID Sid1, 01261 PSID Sid2 01262 ); 01263 01264 NTSYSAPI 01265 BOOLEAN 01266 NTAPI 01267 RtlEqualSid ( 01268 IN PSID Sid1, 01269 IN PSID Sid2 01270 ); 01271 01272 NTSYSAPI 01273 BOOLEAN 01274 NTAPI 01275 RtlFirstFreeAce( 01276 PACL Acl, 01277 PACE* Ace 01278 ); 01279 01280 NTSYSAPI 01281 PVOID 01282 NTAPI 01283 RtlFreeSid ( 01284 IN PSID Sid 01285 ); 01286 01287 NTSYSAPI 01288 NTSTATUS 01289 NTAPI 01290 RtlGetAce( 01291 PACL Acl, 01292 ULONG AceIndex, 01293 PVOID *Ace 01294 ); 01295 01296 NTSYSAPI 01297 NTSTATUS 01298 NTAPI 01299 RtlGetControlSecurityDescriptor( 01300 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 01301 OUT PSECURITY_DESCRIPTOR_CONTROL Control, 01302 OUT PULONG Revision 01303 ); 01304 01305 NTSYSAPI 01306 NTSTATUS 01307 NTAPI 01308 RtlGetDaclSecurityDescriptor( 01309 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 01310 OUT PBOOLEAN DaclPresent, 01311 OUT PACL *Dacl, 01312 OUT PBOOLEAN DaclDefaulted 01313 ); 01314 01315 NTSYSAPI 01316 NTSTATUS 01317 NTAPI 01318 RtlGetSaclSecurityDescriptor( 01319 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 01320 OUT PBOOLEAN SaclPresent, 01321 OUT PACL* Sacl, 01322 OUT PBOOLEAN SaclDefaulted 01323 ); 01324 01325 NTSYSAPI 01326 NTSTATUS 01327 NTAPI 01328 RtlGetGroupSecurityDescriptor( 01329 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 01330 OUT PSID *Group, 01331 OUT PBOOLEAN GroupDefaulted 01332 ); 01333 01334 NTSYSAPI 01335 NTSTATUS 01336 NTAPI 01337 RtlGetOwnerSecurityDescriptor( 01338 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 01339 OUT PSID *Owner, 01340 OUT PBOOLEAN OwnerDefaulted 01341 ); 01342 01343 NTSYSAPI 01344 BOOLEAN 01345 NTAPI 01346 RtlGetSecurityDescriptorRMControl( 01347 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 01348 OUT PUCHAR RMControl 01349 ); 01350 01351 NTSYSAPI 01352 PSID_IDENTIFIER_AUTHORITY 01353 NTAPI 01354 RtlIdentifierAuthoritySid(PSID Sid); 01355 01356 NTSYSAPI 01357 NTSTATUS 01358 NTAPI 01359 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel); 01360 01361 NTSYSAPI 01362 NTSTATUS 01363 NTAPI 01364 RtlInitializeSid( 01365 IN OUT PSID Sid, 01366 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, 01367 IN UCHAR SubAuthorityCount 01368 ); 01369 01370 NTSYSAPI 01371 ULONG 01372 NTAPI 01373 RtlLengthRequiredSid(IN ULONG SubAuthorityCount); 01374 01375 NTSYSAPI 01376 ULONG 01377 NTAPI 01378 RtlLengthSid(IN PSID Sid); 01379 01380 NTSYSAPI 01381 NTSTATUS 01382 NTAPI 01383 RtlMakeSelfRelativeSD( 01384 IN PSECURITY_DESCRIPTOR AbsoluteSD, 01385 OUT PSECURITY_DESCRIPTOR SelfRelativeSD, 01386 IN OUT PULONG BufferLength); 01387 01388 NTSYSAPI 01389 VOID 01390 NTAPI 01391 RtlMapGenericMask( 01392 PACCESS_MASK AccessMask, 01393 PGENERIC_MAPPING GenericMapping 01394 ); 01395 01396 #ifdef NTOS_MODE_USER 01397 01398 NTSYSAPI 01399 NTSTATUS 01400 NTAPI 01401 RtlQueryInformationAcl( 01402 PACL Acl, 01403 PVOID Information, 01404 ULONG InformationLength, 01405 ACL_INFORMATION_CLASS InformationClass 01406 ); 01407 01408 #endif 01409 01410 NTSYSAPI 01411 VOID 01412 NTAPI 01413 RtlReleasePrivilege( 01414 IN PVOID ReturnedState 01415 ); 01416 01417 NTSYSAPI 01418 NTSTATUS 01419 NTAPI 01420 RtlSelfRelativeToAbsoluteSD( 01421 IN PSECURITY_DESCRIPTOR SelfRelativeSD, 01422 OUT PSECURITY_DESCRIPTOR AbsoluteSD, 01423 IN PULONG AbsoluteSDSize, 01424 IN PACL Dacl, 01425 IN PULONG DaclSize, 01426 IN PACL Sacl, 01427 IN PULONG SaclSize, 01428 IN PSID Owner, 01429 IN PULONG OwnerSize, 01430 IN PSID PrimaryGroup, 01431 IN PULONG PrimaryGroupSize 01432 ); 01433 01434 NTSYSAPI 01435 NTSTATUS 01436 NTAPI 01437 RtlSelfRelativeToAbsoluteSD2( 01438 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD, 01439 OUT PULONG BufferSize 01440 ); 01441 01442 NTSYSAPI 01443 NTSTATUS 01444 NTAPI 01445 RtlSetAttributesSecurityDescriptor( 01446 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 01447 IN SECURITY_DESCRIPTOR_CONTROL Control, 01448 OUT PULONG Revision 01449 ); 01450 01451 NTSYSAPI 01452 NTSTATUS 01453 NTAPI 01454 RtlSetControlSecurityDescriptor( 01455 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 01456 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest, 01457 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet 01458 ); 01459 01460 NTSYSAPI 01461 NTSTATUS 01462 NTAPI 01463 RtlSetDaclSecurityDescriptor ( 01464 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 01465 IN BOOLEAN DaclPresent, 01466 IN PACL Dacl, 01467 IN BOOLEAN DaclDefaulted 01468 ); 01469 01470 NTSYSAPI 01471 NTSTATUS 01472 NTAPI 01473 RtlSetGroupSecurityDescriptor( 01474 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 01475 IN PSID Group, 01476 IN BOOLEAN GroupDefaulted 01477 ); 01478 01479 #ifdef NTOS_MODE_USER 01480 01481 NTSYSAPI 01482 NTSTATUS 01483 NTAPI 01484 RtlSetInformationAcl( 01485 PACL Acl, 01486 PVOID Information, 01487 ULONG InformationLength, 01488 ACL_INFORMATION_CLASS InformationClass 01489 ); 01490 01491 #endif 01492 01493 NTSYSAPI 01494 NTSTATUS 01495 NTAPI 01496 RtlSetOwnerSecurityDescriptor( 01497 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 01498 IN PSID Owner, 01499 IN BOOLEAN OwnerDefaulted 01500 ); 01501 01502 NTSYSAPI 01503 NTSTATUS 01504 NTAPI 01505 RtlSetSaclSecurityDescriptor( 01506 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 01507 IN BOOLEAN SaclPresent, 01508 IN PACL Sacl, 01509 IN BOOLEAN SaclDefaulted 01510 ); 01511 01512 NTSYSAPI 01513 VOID 01514 NTAPI 01515 RtlSetSecurityDescriptorRMControl( 01516 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 01517 IN PUCHAR RMControl 01518 ); 01519 01520 NTSYSAPI 01521 PUCHAR 01522 NTAPI 01523 RtlSubAuthorityCountSid( 01524 IN PSID Sid 01525 ); 01526 01527 NTSYSAPI 01528 PULONG 01529 NTAPI 01530 RtlSubAuthoritySid( 01531 IN PSID Sid, 01532 IN ULONG SubAuthority 01533 ); 01534 01535 NTSYSAPI 01536 BOOLEAN 01537 NTAPI 01538 RtlValidRelativeSecurityDescriptor( 01539 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput, 01540 IN ULONG SecurityDescriptorLength, 01541 IN SECURITY_INFORMATION RequiredInformation 01542 ); 01543 01544 NTSYSAPI 01545 BOOLEAN 01546 NTAPI 01547 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor); 01548 01549 NTSYSAPI 01550 BOOLEAN 01551 NTAPI 01552 RtlValidSid(IN PSID Sid); 01553 01554 NTSYSAPI 01555 BOOLEAN 01556 NTAPI 01557 RtlValidAcl(PACL Acl); 01558 01559 NTSYSAPI 01560 NTSTATUS 01561 NTAPI 01562 RtlDeleteSecurityObject( 01563 IN PSECURITY_DESCRIPTOR *ObjectDescriptor 01564 ); 01565 01566 NTSYSAPI 01567 NTSTATUS 01568 NTAPI 01569 RtlNewSecurityObject( 01570 IN PSECURITY_DESCRIPTOR ParentDescriptor, 01571 IN PSECURITY_DESCRIPTOR CreatorDescriptor, 01572 OUT PSECURITY_DESCRIPTOR *NewDescriptor, 01573 IN BOOLEAN IsDirectoryObject, 01574 IN HANDLE Token, 01575 IN PGENERIC_MAPPING GenericMapping 01576 ); 01577 01578 NTSYSAPI 01579 NTSTATUS 01580 NTAPI 01581 RtlQuerySecurityObject( 01582 IN PSECURITY_DESCRIPTOR ObjectDescriptor, 01583 IN SECURITY_INFORMATION SecurityInformation, 01584 OUT PSECURITY_DESCRIPTOR ResultantDescriptor, 01585 IN ULONG DescriptorLength, 01586 OUT PULONG ReturnLength 01587 ); 01588 01589 NTSYSAPI 01590 NTSTATUS 01591 NTAPI 01592 RtlSetSecurityObject( 01593 IN SECURITY_INFORMATION SecurityInformation, 01594 IN PSECURITY_DESCRIPTOR ModificationDescriptor, 01595 OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, 01596 IN PGENERIC_MAPPING GenericMapping, 01597 IN HANDLE Token 01598 ); 01599 01600 // 01601 // Single-Character Functions 01602 // 01603 NTSYSAPI 01604 NTSTATUS 01605 NTAPI 01606 RtlLargeIntegerToChar( 01607 IN PLARGE_INTEGER Value, 01608 IN ULONG Base, 01609 IN ULONG Length, 01610 IN OUT PCHAR String 01611 ); 01612 01613 NTSYSAPI 01614 CHAR 01615 NTAPI 01616 RtlUpperChar(CHAR Source); 01617 01618 NTSYSAPI 01619 WCHAR 01620 NTAPI 01621 RtlUpcaseUnicodeChar(WCHAR Source); 01622 01623 NTSYSAPI 01624 WCHAR 01625 NTAPI 01626 RtlDowncaseUnicodeChar(IN WCHAR Source); 01627 01628 NTSYSAPI 01629 NTSTATUS 01630 NTAPI 01631 RtlIntegerToChar( 01632 IN ULONG Value, 01633 IN ULONG Base, 01634 IN ULONG Length, 01635 IN OUT PCHAR String 01636 ); 01637 01638 NTSYSAPI 01639 NTSTATUS 01640 NTAPI 01641 RtlIntegerToUnicode( 01642 IN ULONG Value, 01643 IN ULONG Base OPTIONAL, 01644 IN ULONG Length OPTIONAL, 01645 IN OUT LPWSTR String 01646 ); 01647 01648 NTSYSAPI 01649 NTSTATUS 01650 NTAPI 01651 RtlIntegerToUnicodeString( 01652 IN ULONG Value, 01653 IN ULONG Base, 01654 IN OUT PUNICODE_STRING String 01655 ); 01656 01657 NTSYSAPI 01658 NTSTATUS 01659 NTAPI 01660 RtlCharToInteger( 01661 PCSZ String, 01662 ULONG Base, 01663 PULONG Value 01664 ); 01665 01666 // 01667 // Byte Swap Functions 01668 // 01669 #ifdef NTOS_MODE_USER 01670 01671 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \ 01672 ((defined(_M_AMD64) || \ 01673 defined(_M_IA64)) && (_MSC_FULL_VER > 13009175)) 01674 01675 unsigned short __cdecl _byteswap_ushort(unsigned short); 01676 unsigned long __cdecl _byteswap_ulong (unsigned long); 01677 unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64); 01678 #pragma intrinsic(_byteswap_ushort) 01679 #pragma intrinsic(_byteswap_ulong) 01680 #pragma intrinsic(_byteswap_uint64) 01681 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x)) 01682 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x)) 01683 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x)) 01684 01685 #elif defined (__GNUC__) 01686 01687 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x)) 01688 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x)) 01689 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x)) 01690 01691 #else 01692 01693 #if (NTDDI_VERSION >= NTDDI_WIN2K) 01694 NTSYSAPI 01695 USHORT 01696 FASTCALL 01697 RtlUshortByteSwap(IN USHORT Source); 01698 01699 NTSYSAPI 01700 ULONG 01701 FASTCALL 01702 RtlUlongByteSwap(IN ULONG Source); 01703 01704 NTSYSAPI 01705 ULONGLONG 01706 FASTCALL 01707 RtlUlonglongByteSwap(IN ULONGLONG Source); 01708 #endif 01709 01710 #endif 01711 #endif // NTOS_MODE_USER 01712 01713 // 01714 // Unicode->Ansi String Functions 01715 // 01716 NTSYSAPI 01717 ULONG 01718 NTAPI 01719 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString); 01720 01721 #ifdef NTOS_MODE_USER 01722 01723 #define RtlUnicodeStringToAnsiSize(STRING) ( \ 01724 NLS_MB_CODE_PAGE_TAG ? \ 01725 RtlxUnicodeStringToAnsiSize(STRING) : \ 01726 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \ 01727 ) 01728 01729 #endif 01730 01731 NTSYSAPI 01732 NTSTATUS 01733 NTAPI 01734 RtlUnicodeStringToAnsiString( 01735 PANSI_STRING DestinationString, 01736 PCUNICODE_STRING SourceString, 01737 BOOLEAN AllocateDestinationString 01738 ); 01739 01740 // 01741 // Unicode->OEM String Functions 01742 // 01743 NTSYSAPI 01744 NTSTATUS 01745 NTAPI 01746 RtlUpcaseUnicodeStringToOemString( 01747 POEM_STRING DestinationString, 01748 PCUNICODE_STRING SourceString, 01749 BOOLEAN AllocateDestinationString 01750 ); 01751 01752 NTSYSAPI 01753 NTSTATUS 01754 NTAPI 01755 RtlUpcaseUnicodeStringToCountedOemString( 01756 IN OUT POEM_STRING DestinationString, 01757 IN PCUNICODE_STRING SourceString, 01758 IN BOOLEAN AllocateDestinationString 01759 ); 01760 01761 NTSYSAPI 01762 NTSTATUS 01763 NTAPI 01764 RtlUnicodeStringToOemString( 01765 POEM_STRING DestinationString, 01766 PCUNICODE_STRING SourceString, 01767 BOOLEAN AllocateDestinationString 01768 ); 01769 01770 NTSYSAPI 01771 NTSTATUS 01772 NTAPI 01773 RtlUpcaseUnicodeToOemN( 01774 PCHAR OemString, 01775 ULONG OemSize, 01776 PULONG ResultSize, 01777 PCWCH UnicodeString, 01778 ULONG UnicodeSize 01779 ); 01780 01781 NTSYSAPI 01782 ULONG 01783 NTAPI 01784 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString); 01785 01786 #ifdef NTOS_MODE_USER 01787 01788 #define RtlUnicodeStringToOemSize(STRING) ( \ 01789 NLS_MB_OEM_CODE_PAGE_TAG ? \ 01790 RtlxUnicodeStringToOemSize(STRING) : \ 01791 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \ 01792 ) 01793 01794 #define RtlUnicodeStringToCountedOemSize(STRING) ( \ 01795 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \ 01796 ) 01797 01798 #endif 01799 01800 NTSYSAPI 01801 NTSTATUS 01802 NTAPI 01803 RtlUnicodeToOemN( 01804 PCHAR OemString, 01805 ULONG OemSize, 01806 PULONG ResultSize, 01807 PCWCH UnicodeString, 01808 ULONG UnicodeSize 01809 ); 01810 01811 // 01812 // Unicode->MultiByte String Functions 01813 // 01814 NTSYSAPI 01815 NTSTATUS 01816 NTAPI 01817 RtlUnicodeToMultiByteN( 01818 PCHAR MbString, 01819 ULONG MbSize, 01820 PULONG ResultSize, 01821 PCWCH UnicodeString, 01822 ULONG UnicodeSize 01823 ); 01824 01825 NTSYSAPI 01826 NTSTATUS 01827 NTAPI 01828 RtlUpcaseUnicodeToMultiByteN( 01829 PCHAR MbString, 01830 ULONG MbSize, 01831 PULONG ResultSize, 01832 PCWCH UnicodeString, 01833 ULONG UnicodeSize 01834 ); 01835 01836 NTSYSAPI 01837 NTSTATUS 01838 NTAPI 01839 RtlUnicodeToMultiByteSize( 01840 PULONG MbSize, 01841 PCWCH UnicodeString, 01842 ULONG UnicodeSize 01843 ); 01844 01845 NTSYSAPI 01846 ULONG 01847 NTAPI 01848 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString); 01849 01850 // 01851 // OEM to Unicode Functions 01852 // 01853 NTSYSAPI 01854 NTSTATUS 01855 NTAPI 01856 RtlOemStringToUnicodeString( 01857 PUNICODE_STRING DestinationString, 01858 PCOEM_STRING SourceString, 01859 BOOLEAN AllocateDestinationString 01860 ); 01861 01862 NTSYSAPI 01863 NTSTATUS 01864 NTAPI 01865 RtlOemToUnicodeN( 01866 PWSTR UnicodeString, 01867 ULONG MaxBytesInUnicodeString, 01868 PULONG BytesInUnicodeString, 01869 IN PCCH OemString, 01870 ULONG BytesInOemString 01871 ); 01872 01873 #ifdef NTOS_MODE_USER 01874 01875 #define RtlOemStringToUnicodeSize(STRING) ( \ 01876 NLS_MB_OEM_CODE_PAGE_TAG ? \ 01877 RtlxOemStringToUnicodeSize(STRING) : \ 01878 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \ 01879 ) 01880 01881 #define RtlOemStringToCountedUnicodeSize(STRING) ( \ 01882 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \ 01883 ) 01884 01885 #endif 01886 01887 // 01888 // Ansi->Unicode String Functions 01889 // 01890 NTSYSAPI 01891 ULONG 01892 NTAPI 01893 RtlxAnsiStringToUnicodeSize( 01894 PCANSI_STRING AnsiString 01895 ); 01896 01897 NTSYSAPI 01898 NTSTATUS 01899 NTAPI 01900 RtlAnsiStringToUnicodeString( 01901 PUNICODE_STRING DestinationString, 01902 PCANSI_STRING SourceString, 01903 BOOLEAN AllocateDestinationString 01904 ); 01905 01906 #ifdef NTOS_MODE_USER 01907 01908 #define RtlAnsiStringToUnicodeSize(STRING) ( \ 01909 NLS_MB_CODE_PAGE_TAG ? \ 01910 RtlxAnsiStringToUnicodeSize(STRING) : \ 01911 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \ 01912 ) 01913 01914 #endif 01915 01916 NTSYSAPI 01917 BOOLEAN 01918 NTAPI 01919 RtlCreateUnicodeStringFromAsciiz( 01920 OUT PUNICODE_STRING Destination, 01921 IN PCSZ Source 01922 ); 01923 01924 // 01925 // Unicode String Functions 01926 // 01927 NTSYSAPI 01928 NTSTATUS 01929 NTAPI 01930 RtlAppendUnicodeToString( 01931 PUNICODE_STRING Destination, 01932 PCWSTR Source 01933 ); 01934 01935 NTSYSAPI 01936 NTSTATUS 01937 NTAPI 01938 RtlAppendUnicodeStringToString( 01939 PUNICODE_STRING Destination, 01940 PCUNICODE_STRING Source 01941 ); 01942 01943 NTSYSAPI 01944 LONG 01945 NTAPI 01946 RtlCompareUnicodeString( 01947 PCUNICODE_STRING String1, 01948 PCUNICODE_STRING String2, 01949 BOOLEAN CaseInsensitive 01950 ); 01951 01952 NTSYSAPI 01953 VOID 01954 NTAPI 01955 RtlCopyUnicodeString( 01956 PUNICODE_STRING DestinationString, 01957 PCUNICODE_STRING SourceString 01958 ); 01959 01960 NTSYSAPI 01961 BOOLEAN 01962 NTAPI 01963 RtlCreateUnicodeString( 01964 PUNICODE_STRING DestinationString, 01965 PCWSTR SourceString 01966 ); 01967 01968 #ifdef NTOS_MODE_USER 01969 01970 NTSYSAPI 01971 NTSTATUS 01972 NTAPI 01973 RtlDowncaseUnicodeString( 01974 IN OUT PUNICODE_STRING UniDest, 01975 IN PCUNICODE_STRING UniSource, 01976 IN BOOLEAN AllocateDestinationString 01977 ); 01978 01979 NTSYSAPI 01980 NTSTATUS 01981 NTAPI 01982 RtlDuplicateUnicodeString( 01983 IN ULONG Flags, 01984 IN PCUNICODE_STRING SourceString, 01985 OUT PUNICODE_STRING DestinationString 01986 ); 01987 01988 // 01989 // Memory Functions 01990 // 01991 NTSYSAPI 01992 VOID 01993 NTAPI 01994 RtlFillMemoryUlong( 01995 IN PVOID Destination, 01996 IN SIZE_T Length, 01997 IN ULONG Fill 01998 ); 01999 02000 NTSYSAPI 02001 VOID 02002 NTAPI 02003 RtlFillMemoryUlonglong( 02004 OUT PVOID Destination, 02005 IN SIZE_T Length, 02006 IN ULONGLONG Pattern 02007 ); 02008 02009 02010 NTSYSAPI 02011 SIZE_T 02012 NTAPI 02013 RtlCompareMemoryUlong( 02014 IN PVOID Source, 02015 IN SIZE_T Length, 02016 IN ULONG Pattern 02017 ); 02018 02019 #define RtlCopyBytes RtlCopyMemory 02020 #define RtlFillBytes RtlFillMemory 02021 #define RtlZeroBytes RtlZeroMemory 02022 02023 #endif 02024 02025 NTSYSAPI 02026 BOOLEAN 02027 NTAPI 02028 RtlEqualUnicodeString( 02029 PCUNICODE_STRING String1, 02030 PCUNICODE_STRING String2, 02031 BOOLEAN CaseInsensitive 02032 ); 02033 02034 NTSYSAPI 02035 NTSTATUS 02036 NTAPI 02037 RtlFindCharInUnicodeString( 02038 IN ULONG Flags, 02039 IN PCUNICODE_STRING SearchString, 02040 IN PCUNICODE_STRING MatchString, 02041 OUT PUSHORT Position 02042 ); 02043 02044 NTSYSAPI 02045 VOID 02046 NTAPI 02047 RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString); 02048 02049 NTSYSAPI 02050 NTSTATUS 02051 NTAPI 02052 RtlHashUnicodeString( 02053 IN CONST UNICODE_STRING *String, 02054 IN BOOLEAN CaseInSensitive, 02055 IN ULONG HashAlgorithm, 02056 OUT PULONG HashValue 02057 ); 02058 02059 NTSYSAPI 02060 VOID 02061 NTAPI 02062 RtlInitUnicodeString( 02063 IN OUT PUNICODE_STRING DestinationString, 02064 IN PCWSTR SourceString 02065 ); 02066 02067 NTSYSAPI 02068 NTSTATUS 02069 NTAPI 02070 RtlInitUnicodeStringEx( 02071 OUT PUNICODE_STRING DestinationString, 02072 IN PCWSTR SourceString OPTIONAL 02073 ); 02074 02075 NTSYSAPI 02076 BOOLEAN 02077 NTAPI 02078 RtlIsTextUnicode( 02079 PVOID Buffer, 02080 INT Length, 02081 INT *Flags 02082 ); 02083 02084 NTSYSAPI 02085 BOOLEAN 02086 NTAPI 02087 RtlPrefixString( 02088 PCANSI_STRING String1, 02089 PCANSI_STRING String2, 02090 BOOLEAN CaseInsensitive 02091 ); 02092 02093 NTSYSAPI 02094 BOOLEAN 02095 NTAPI 02096 RtlPrefixUnicodeString( 02097 PCUNICODE_STRING String1, 02098 PCUNICODE_STRING String2, 02099 BOOLEAN CaseInsensitive 02100 ); 02101 02102 NTSYSAPI 02103 NTSTATUS 02104 NTAPI 02105 RtlUpcaseUnicodeString( 02106 PUNICODE_STRING DestinationString, 02107 PCUNICODE_STRING SourceString, 02108 BOOLEAN AllocateDestinationString 02109 ); 02110 02111 NTSYSAPI 02112 NTSTATUS 02113 NTAPI 02114 RtlUnicodeStringToInteger( 02115 PCUNICODE_STRING String, 02116 ULONG Base, 02117 PULONG Value 02118 ); 02119 02120 NTSYSAPI 02121 NTSTATUS 02122 NTAPI 02123 RtlValidateUnicodeString( 02124 IN ULONG Flags, 02125 IN PCUNICODE_STRING String 02126 ); 02127 02128 // 02129 // Ansi String Functions 02130 // 02131 NTSYSAPI 02132 VOID 02133 NTAPI 02134 RtlFreeAnsiString(IN PANSI_STRING AnsiString); 02135 02136 NTSYSAPI 02137 VOID 02138 NTAPI 02139 RtlInitAnsiString( 02140 PANSI_STRING DestinationString, 02141 PCSZ SourceString 02142 ); 02143 02144 NTSYSAPI 02145 NTSTATUS 02146 NTAPI 02147 RtlInitAnsiStringEx( 02148 PANSI_STRING DestinationString, 02149 PCSZ SourceString 02150 ); 02151 02152 // 02153 // OEM String Functions 02154 // 02155 NTSYSAPI 02156 VOID 02157 NTAPI 02158 RtlFreeOemString(IN POEM_STRING OemString); 02159 02160 // 02161 // MultiByte->Unicode String Functions 02162 // 02163 NTSYSAPI 02164 NTSTATUS 02165 NTAPI 02166 RtlMultiByteToUnicodeN( 02167 PWCHAR UnicodeString, 02168 ULONG UnicodeSize, 02169 PULONG ResultSize, 02170 PCSTR MbString, 02171 ULONG MbSize 02172 ); 02173 02174 NTSYSAPI 02175 NTSTATUS 02176 NTAPI 02177 RtlMultiByteToUnicodeSize( 02178 PULONG UnicodeSize, 02179 PCSTR MbString, 02180 ULONG MbSize 02181 ); 02182 02183 // 02184 // Atom Functions 02185 // 02186 NTSYSAPI 02187 NTSTATUS 02188 NTAPI 02189 RtlAddAtomToAtomTable( 02190 IN PRTL_ATOM_TABLE AtomTable, 02191 IN PWSTR AtomName, 02192 OUT PRTL_ATOM Atom 02193 ); 02194 02195 NTSYSAPI 02196 NTSTATUS 02197 NTAPI 02198 RtlCreateAtomTable( 02199 IN ULONG TableSize, 02200 IN OUT PRTL_ATOM_TABLE *AtomTable 02201 ); 02202 02203 NTSYSAPI 02204 NTSTATUS 02205 NTAPI 02206 RtlDeleteAtomFromAtomTable( 02207 IN PRTL_ATOM_TABLE AtomTable, 02208 IN RTL_ATOM Atom 02209 ); 02210 02211 NTSYSAPI 02212 NTSTATUS 02213 NTAPI 02214 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable); 02215 02216 NTSYSAPI 02217 NTSTATUS 02218 NTAPI 02219 RtlQueryAtomInAtomTable( 02220 IN PRTL_ATOM_TABLE AtomTable, 02221 IN RTL_ATOM Atom, 02222 IN OUT PULONG RefCount OPTIONAL, 02223 IN OUT PULONG PinCount OPTIONAL, 02224 IN OUT PWSTR AtomName OPTIONAL, 02225 IN OUT PULONG NameLength OPTIONAL 02226 ); 02227 02228 NTSYSAPI 02229 NTSTATUS 02230 NTAPI 02231 RtlPinAtomInAtomTable( 02232 IN PRTL_ATOM_TABLE AtomTable, 02233 IN RTL_ATOM Atom 02234 ); 02235 02236 NTSYSAPI 02237 NTSTATUS 02238 NTAPI 02239 RtlLookupAtomInAtomTable( 02240 IN PRTL_ATOM_TABLE AtomTable, 02241 IN PWSTR AtomName, 02242 OUT PRTL_ATOM Atom 02243 ); 02244 02245 // 02246 // Process Management Functions 02247 // 02248 NTSYSAPI 02249 PPEB 02250 NTAPI 02251 RtlGetCurrentPeb( 02252 VOID 02253 ); 02254 02255 NTSYSAPI 02256 VOID 02257 NTAPI 02258 RtlAcquirePebLock(VOID); 02259 02260 NTSYSAPI 02261 NTSTATUS 02262 NTAPI 02263 RtlCreateProcessParameters ( 02264 OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters, 02265 IN PUNICODE_STRING ImagePathName OPTIONAL, 02266 IN PUNICODE_STRING DllPath OPTIONAL, 02267 IN PUNICODE_STRING CurrentDirectory OPTIONAL, 02268 IN PUNICODE_STRING CommandLine OPTIONAL, 02269 IN PWSTR Environment OPTIONAL, 02270 IN PUNICODE_STRING WindowTitle OPTIONAL, 02271 IN PUNICODE_STRING DesktopInfo OPTIONAL, 02272 IN PUNICODE_STRING ShellInfo OPTIONAL, 02273 IN PUNICODE_STRING RuntimeInfo OPTIONAL 02274 ); 02275 02276 NTSYSAPI 02277 NTSTATUS 02278 NTAPI 02279 RtlCreateUserProcess( 02280 IN PUNICODE_STRING ImageFileName, 02281 IN ULONG Attributes, 02282 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters, 02283 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL, 02284 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL, 02285 IN HANDLE ParentProcess OPTIONAL, 02286 IN BOOLEAN CurrentDirectory, 02287 IN HANDLE DebugPort OPTIONAL, 02288 IN HANDLE ExceptionPort OPTIONAL, 02289 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo 02290 ); 02291 02292 NTSYSAPI 02293 NTSTATUS 02294 NTAPI 02295 RtlCreateUserThread( 02296 IN HANDLE ProcessHandle, 02297 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 02298 IN BOOLEAN CreateSuspended, 02299 IN ULONG StackZeroBits, 02300 IN SIZE_T StackReserve, 02301 IN SIZE_T StackCommit, 02302 IN PTHREAD_START_ROUTINE StartAddress, 02303 IN PVOID Parameter, 02304 IN OUT PHANDLE ThreadHandle, 02305 IN OUT PCLIENT_ID ClientId 02306 ); 02307 02308 NTSYSAPI 02309 PRTL_USER_PROCESS_PARAMETERS 02310 NTAPI 02311 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters); 02312 02313 NTSYSAPI 02314 NTSTATUS 02315 NTAPI 02316 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters); 02317 02318 NTSYSAPI 02319 VOID 02320 NTAPI 02321 RtlExitUserThread(NTSTATUS Status); 02322 02323 NTSYSAPI 02324 VOID 02325 NTAPI 02326 RtlInitializeContext( 02327 IN HANDLE ProcessHandle, 02328 OUT PCONTEXT ThreadContext, 02329 IN PVOID ThreadStartParam OPTIONAL, 02330 IN PTHREAD_START_ROUTINE ThreadStartAddress, 02331 IN PINITIAL_TEB InitialTeb 02332 ); 02333 02334 #ifdef _M_AMD64 02335 typedef struct _WOW64_CONTEXT *PWOW64_CONTEXT; 02336 02337 NTSYSAPI 02338 NTSTATUS 02339 NTAPI 02340 RtlWow64GetThreadContext( 02341 IN HANDLE ThreadHandle, 02342 IN OUT PWOW64_CONTEXT ThreadContext 02343 ); 02344 02345 02346 NTSYSAPI 02347 NTSTATUS 02348 NTAPI 02349 RtlWow64SetThreadContext( 02350 IN HANDLE ThreadHandle, 02351 IN PWOW64_CONTEXT ThreadContext 02352 ); 02353 #endif 02354 02355 NTSYSAPI 02356 BOOLEAN 02357 NTAPI 02358 RtlIsThreadWithinLoaderCallout(VOID); 02359 02360 NTSYSAPI 02361 PRTL_USER_PROCESS_PARAMETERS 02362 NTAPI 02363 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters); 02364 02365 NTSYSAPI 02366 VOID 02367 NTAPI 02368 RtlReleasePebLock(VOID); 02369 02370 NTSYSAPI 02371 NTSTATUS 02372 NTAPI 02373 RtlRemoteCall( 02374 IN HANDLE Process, 02375 IN HANDLE Thread, 02376 IN PVOID CallSite, 02377 IN ULONG ArgumentCount, 02378 IN PULONG Arguments, 02379 IN BOOLEAN PassContext, 02380 IN BOOLEAN AlreadySuspended 02381 ); 02382 02383 NTSYSAPI 02384 NTSTATUS 02385 NTAPI 02386 RtlSetProcessIsCritical( 02387 IN BOOLEAN NewValue, 02388 OUT PBOOLEAN OldValue OPTIONAL, 02389 IN BOOLEAN NeedBreaks 02390 ); 02391 02392 NTSYSAPI 02393 NTSTATUS 02394 NTAPI 02395 RtlSetThreadIsCritical( 02396 IN BOOLEAN NewValue, 02397 OUT PBOOLEAN OldValue OPTIONAL, 02398 IN BOOLEAN NeedBreaks 02399 ); 02400 02401 NTSYSAPI 02402 ULONG 02403 NTAPI 02404 RtlGetCurrentProcessorNumber( 02405 VOID 02406 ); 02407 02408 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock) 02409 02410 // 02411 // Thread Pool Functions 02412 // 02413 // 02414 NTSTATUS 02415 NTAPI 02416 RtlSetThreadPoolStartFunc( 02417 IN PRTL_START_POOL_THREAD StartPoolThread, 02418 IN PRTL_EXIT_POOL_THREAD ExitPoolThread 02419 ); 02420 02421 NTSYSAPI 02422 NTSTATUS 02423 NTAPI 02424 RtlDeregisterWaitEx( 02425 IN HANDLE hWaitHandle, 02426 IN HANDLE hCompletionEvent 02427 ); 02428 02429 NTSYSAPI 02430 NTSTATUS 02431 NTAPI 02432 RtlDeregisterWait( 02433 IN HANDLE hWaitHandle 02434 ); 02435 02436 NTSYSAPI 02437 NTSTATUS 02438 NTAPI 02439 RtlQueueWorkItem( 02440 IN WORKERCALLBACKFUNC Function, 02441 IN PVOID Context OPTIONAL, 02442 IN ULONG Flags 02443 ); 02444 02445 NTSYSAPI 02446 NTSTATUS 02447 NTAPI 02448 RtlSetIoCompletionCallback( 02449 IN HANDLE FileHandle, 02450 IN PIO_APC_ROUTINE Callback, 02451 IN ULONG Flags 02452 ); 02453 02454 NTSYSAPI 02455 NTSTATUS 02456 NTAPI 02457 RtlRegisterWait( 02458 IN PHANDLE phNewWaitObject, 02459 IN HANDLE hObject, 02460 IN WAITORTIMERCALLBACKFUNC Callback, 02461 IN PVOID pvContext, 02462 IN ULONG ulMilliseconds, 02463 IN ULONG ulFlags 02464 ); 02465 02466 // 02467 // Environment/Path Functions 02468 // 02469 NTSYSAPI 02470 NTSTATUS 02471 NTAPI 02472 RtlCreateEnvironment( 02473 BOOLEAN Inherit, 02474 PWSTR *Environment 02475 ); 02476 02477 NTSYSAPI 02478 NTSTATUS 02479 NTAPI 02480 RtlComputePrivatizedDllName_U( 02481 IN PUNICODE_STRING DllName, 02482 OUT PUNICODE_STRING RealName, 02483 OUT PUNICODE_STRING LocalName 02484 ); 02485 02486 NTSYSAPI 02487 VOID 02488 NTAPI 02489 RtlDestroyEnvironment( 02490 IN PWSTR Environment 02491 ); 02492 02493 NTSYSAPI 02494 BOOLEAN 02495 NTAPI 02496 RtlDoesFileExists_U( 02497 IN PCWSTR FileName 02498 ); 02499 02500 NTSYSAPI 02501 ULONG 02502 NTAPI 02503 RtlDetermineDosPathNameType_U( 02504 IN PCWSTR Path 02505 ); 02506 02507 NTSYSAPI 02508 ULONG 02509 NTAPI 02510 RtlDosSearchPath_U( 02511 IN PCWSTR Path, 02512 IN PCWSTR FileName, 02513 IN PCWSTR Extension, 02514 IN ULONG BufferSize, 02515 OUT PWSTR Buffer, 02516 OUT PWSTR *PartName 02517 ); 02518 02519 NTSYSAPI 02520 NTSTATUS 02521 NTAPI 02522 RtlDosSearchPath_Ustr( 02523 IN ULONG Flags, 02524 IN PUNICODE_STRING PathString, 02525 IN PUNICODE_STRING FileNameString, 02526 IN PUNICODE_STRING ExtensionString, 02527 IN PUNICODE_STRING CallerBuffer, 02528 IN OUT PUNICODE_STRING DynamicString OPTIONAL, 02529 OUT PUNICODE_STRING* FullNameOut OPTIONAL, 02530 OUT PSIZE_T FilePartSize OPTIONAL, 02531 OUT PSIZE_T LengthNeeded OPTIONAL 02532 ); 02533 02534 NTSYSAPI 02535 BOOLEAN 02536 NTAPI 02537 RtlDosPathNameToNtPathName_U( 02538 IN PCWSTR DosPathName, 02539 OUT PUNICODE_STRING NtPathName, 02540 OUT PCWSTR *NtFileNamePart, 02541 OUT PRTL_RELATIVE_NAME_U DirectoryInfo 02542 ); 02543 02544 NTSYSAPI 02545 BOOLEAN 02546 NTAPI 02547 RtlDosPathNameToRelativeNtPathName_U( 02548 IN PCWSTR DosName, 02549 OUT PUNICODE_STRING NtName, 02550 OUT PCWSTR *PartName, 02551 OUT PRTL_RELATIVE_NAME_U RelativeName 02552 ); 02553 02554 NTSYSAPI 02555 NTSTATUS 02556 NTAPI 02557 RtlExpandEnvironmentStrings_U( 02558 PWSTR Environment, 02559 PUNICODE_STRING Source, 02560 PUNICODE_STRING Destination, 02561 PULONG Length 02562 ); 02563 02564 NTSYSAPI 02565 ULONG 02566 NTAPI 02567 RtlGetCurrentDirectory_U( 02568 ULONG MaximumLength, 02569 PWSTR Buffer 02570 ); 02571 02572 NTSYSAPI 02573 ULONG 02574 NTAPI 02575 RtlGetFullPathName_U( 02576 IN PCWSTR FileName, 02577 IN ULONG Size, 02578 IN PWSTR Buffer, 02579 OUT PWSTR *ShortName 02580 ); 02581 02582 #if (NTDDI_VERSION >= NTDDI_WIN7) 02583 NTSYSAPI 02584 NTSTATUS 02585 NTAPI 02586 RtlGetFullPathName_UEx( 02587 IN PWSTR FileName, 02588 IN ULONG BufferLength, 02589 OUT PWSTR Buffer, 02590 OUT OPTIONAL PWSTR *FilePart, 02591 OUT OPTIONAL RTL_PATH_TYPE *InputPathType 02592 ); 02593 #endif 02594 02595 NTSTATUS 02596 NTAPI 02597 RtlGetFullPathName_UstrEx( 02598 IN PUNICODE_STRING FileName, 02599 IN PUNICODE_STRING StaticString, 02600 IN PUNICODE_STRING DynamicString, 02601 IN PUNICODE_STRING *StringUsed, 02602 IN PSIZE_T FilePartSize, 02603 OUT PBOOLEAN NameInvalid, 02604 OUT RTL_PATH_TYPE* PathType, 02605 OUT PSIZE_T LengthNeeded 02606 ); 02607 02608 NTSYSAPI 02609 ULONG 02610 NTAPI 02611 RtlGetLongestNtPathLength( 02612 VOID 02613 ); 02614 02615 NTSYSAPI 02616 ULONG 02617 NTAPI 02618 RtlIsDosDeviceName_U( 02619 IN PCWSTR Name 02620 ); 02621 02622 NTSYSAPI 02623 ULONG 02624 NTAPI 02625 RtlIsDosDeviceName_Ustr( 02626 IN PCUNICODE_STRING Name 02627 ); 02628 02629 02630 NTSYSAPI 02631 BOOLEAN 02632 NTAPI 02633 RtlIsNameLegalDOS8Dot3( 02634 IN PCUNICODE_STRING Name, 02635 IN OUT POEM_STRING OemName OPTIONAL, 02636 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL 02637 ); 02638 02639 NTSYSAPI 02640 NTSTATUS 02641 NTAPI 02642 RtlQueryEnvironmentVariable_U( 02643 IN OPTIONAL PWSTR Environment, 02644 IN PUNICODE_STRING Name, 02645 OUT PUNICODE_STRING Value 02646 ); 02647 02648 VOID 02649 NTAPI 02650 RtlReleaseRelativeName( 02651 IN PRTL_RELATIVE_NAME_U RelativeName 02652 ); 02653 02654 NTSYSAPI 02655 NTSTATUS 02656 NTAPI 02657 RtlSetCurrentDirectory_U( 02658 IN PUNICODE_STRING name 02659 ); 02660 02661 NTSYSAPI 02662 NTSTATUS 02663 NTAPI 02664 RtlSetEnvironmentVariable( 02665 PWSTR *Environment, 02666 PUNICODE_STRING Name, 02667 PUNICODE_STRING Value 02668 ); 02669 02670 // 02671 // Critical Section/Resource Functions 02672 // 02673 NTSYSAPI 02674 NTSTATUS 02675 NTAPI 02676 RtlDeleteCriticalSection ( 02677 IN PRTL_CRITICAL_SECTION CriticalSection 02678 ); 02679 02680 NTSYSAPI 02681 NTSTATUS 02682 NTAPI 02683 RtlEnterCriticalSection( 02684 IN PRTL_CRITICAL_SECTION CriticalSection 02685 ); 02686 02687 NTSYSAPI 02688 NTSTATUS 02689 NTAPI 02690 RtlInitializeCriticalSection( 02691 IN PRTL_CRITICAL_SECTION CriticalSection 02692 ); 02693 02694 NTSYSAPI 02695 NTSTATUS 02696 NTAPI 02697 RtlInitializeCriticalSectionAndSpinCount( 02698 IN PRTL_CRITICAL_SECTION CriticalSection, 02699 IN ULONG SpinCount 02700 ); 02701 02702 NTSYSAPI 02703 NTSTATUS 02704 NTAPI 02705 RtlLeaveCriticalSection( 02706 IN PRTL_CRITICAL_SECTION CriticalSection 02707 ); 02708 02709 NTSYSAPI 02710 BOOLEAN 02711 NTAPI 02712 RtlTryEnterCriticalSection( 02713 IN PRTL_CRITICAL_SECTION CriticalSection 02714 ); 02715 02716 NTSYSAPI 02717 VOID 02718 NTAPI 02719 RtlpUnWaitCriticalSection( 02720 IN PRTL_CRITICAL_SECTION CriticalSection 02721 ); 02722 02723 NTSYSAPI 02724 NTSTATUS 02725 NTAPI 02726 RtlpWaitForCriticalSection( 02727 IN PRTL_CRITICAL_SECTION CriticalSection 02728 ); 02729 02730 NTSYSAPI 02731 BOOLEAN 02732 NTAPI 02733 RtlAcquireResourceExclusive( 02734 IN PRTL_RESOURCE Resource, 02735 IN BOOLEAN Wait 02736 ); 02737 02738 NTSYSAPI 02739 BOOLEAN 02740 NTAPI 02741 RtlAcquireResourceShared( 02742 IN PRTL_RESOURCE Resource, 02743 IN BOOLEAN Wait 02744 ); 02745 02746 NTSYSAPI 02747 VOID 02748 NTAPI 02749 RtlConvertExclusiveToShared( 02750 IN PRTL_RESOURCE Resource 02751 ); 02752 02753 NTSYSAPI 02754 VOID 02755 NTAPI 02756 RtlConvertSharedToExclusive( 02757 IN PRTL_RESOURCE Resource 02758 ); 02759 02760 NTSYSAPI 02761 VOID 02762 NTAPI 02763 RtlDeleteResource( 02764 IN PRTL_RESOURCE Resource 02765 ); 02766 02767 NTSYSAPI 02768 VOID 02769 NTAPI 02770 RtlDumpResource( 02771 IN PRTL_RESOURCE Resource 02772 ); 02773 02774 NTSYSAPI 02775 VOID 02776 NTAPI 02777 RtlInitializeResource( 02778 IN PRTL_RESOURCE Resource 02779 ); 02780 02781 NTSYSAPI 02782 VOID 02783 NTAPI 02784 RtlReleaseResource( 02785 IN PRTL_RESOURCE Resource 02786 ); 02787 02788 // 02789 // Compression Functions 02790 // 02791 NTSYSAPI 02792 NTSTATUS 02793 NTAPI 02794 RtlCompressBuffer( 02795 IN USHORT CompressionFormatAndEngine, 02796 IN PUCHAR UncompressedBuffer, 02797 IN ULONG UncompressedBufferSize, 02798 OUT PUCHAR CompressedBuffer, 02799 IN ULONG CompressedBufferSize, 02800 IN ULONG UncompressedChunkSize, 02801 OUT PULONG FinalCompressedSize, 02802 IN PVOID WorkSpace 02803 ); 02804 02805 NTSYSAPI 02806 NTSTATUS 02807 NTAPI 02808 RtlDecompressBuffer( 02809 IN USHORT CompressionFormat, 02810 OUT PUCHAR UncompressedBuffer, 02811 IN ULONG UncompressedBufferSize, 02812 IN PUCHAR CompressedBuffer, 02813 IN ULONG CompressedBufferSize, 02814 OUT PULONG FinalUncompressedSize 02815 ); 02816 02817 NTSYSAPI 02818 NTSTATUS 02819 NTAPI 02820 RtlGetCompressionWorkSpaceSize( 02821 IN USHORT CompressionFormatAndEngine, 02822 OUT PULONG CompressBufferWorkSpaceSize, 02823 OUT PULONG CompressFragmentWorkSpaceSize 02824 ); 02825 02826 // 02827 // Debug Info Functions 02828 // 02829 NTSYSAPI 02830 PRTL_DEBUG_INFORMATION 02831 NTAPI 02832 RtlCreateQueryDebugBuffer( 02833 IN ULONG Size, 02834 IN BOOLEAN EventPair 02835 ); 02836 02837 NTSYSAPI 02838 NTSTATUS 02839 NTAPI 02840 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer); 02841 02842 NTSYSAPI 02843 NTSTATUS 02844 NTAPI 02845 RtlQueryProcessDebugInformation( 02846 IN ULONG ProcessId, 02847 IN ULONG DebugInfoClassMask, 02848 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer 02849 ); 02850 02851 // 02852 // Bitmap Functions 02853 // 02854 NTSYSAPI 02855 BOOLEAN 02856 NTAPI 02857 RtlAreBitsClear( 02858 IN PRTL_BITMAP BitMapHeader, 02859 IN ULONG StartingIndex, 02860 IN ULONG Length 02861 ); 02862 02863 NTSYSAPI 02864 BOOLEAN 02865 NTAPI 02866 RtlAreBitsSet( 02867 IN PRTL_BITMAP BitMapHeader, 02868 IN ULONG StartingIndex, 02869 IN ULONG Length 02870 ); 02871 02872 NTSYSAPI 02873 VOID 02874 NTAPI 02875 RtlClearBits( 02876 IN PRTL_BITMAP BitMapHeader, 02877 IN ULONG StartingIndex, 02878 IN ULONG NumberToClear 02879 ); 02880 02881 NTSYSAPI 02882 ULONG 02883 NTAPI 02884 RtlFindClearBits( 02885 IN PRTL_BITMAP BitMapHeader, 02886 IN ULONG NumberToFind, 02887 IN ULONG HintIndex 02888 ); 02889 02890 NTSYSAPI 02891 ULONG 02892 NTAPI 02893 RtlFindClearBitsAndSet( 02894 IN PRTL_BITMAP BitMapHeader, 02895 IN ULONG NumberToFind, 02896 IN ULONG HintIndex 02897 ); 02898 02899 NTSYSAPI 02900 ULONG 02901 NTAPI 02902 RtlFindNextForwardRunClear( 02903 IN PRTL_BITMAP BitMapHeader, 02904 IN ULONG FromIndex, 02905 IN PULONG StartingRunIndex 02906 ); 02907 02908 NTSYSAPI 02909 VOID 02910 NTAPI 02911 RtlInitializeBitMap( 02912 IN PRTL_BITMAP BitMapHeader, 02913 IN PULONG BitMapBuffer, 02914 IN ULONG SizeOfBitMap 02915 ); 02916 02917 NTSYSAPI 02918 ULONG 02919 NTAPI 02920 RtlNumberOfSetBits( 02921 IN PRTL_BITMAP BitMapHeader 02922 ); 02923 02924 NTSYSAPI 02925 VOID 02926 NTAPI 02927 RtlSetBit( 02928 PRTL_BITMAP BitMapHeader, 02929 ULONG BitNumber 02930 ); 02931 02932 NTSYSAPI 02933 VOID 02934 NTAPI 02935 RtlSetBits( 02936 IN PRTL_BITMAP BitMapHeader, 02937 IN ULONG StartingIndex, 02938 IN ULONG NumberToSet 02939 ); 02940 02941 NTSYSAPI 02942 VOID 02943 NTAPI 02944 RtlSetAllBits( 02945 PRTL_BITMAP BitMapHeader 02946 ); 02947 02948 NTSYSAPI 02949 BOOLEAN 02950 NTAPI 02951 RtlTestBit( 02952 PRTL_BITMAP BitMapHeader, 02953 ULONG BitNumber 02954 ); 02955 02956 // 02957 // Timer Functions 02958 // 02959 NTSYSAPI 02960 NTSTATUS 02961 NTAPI 02962 RtlCreateTimer( 02963 HANDLE TimerQueue, 02964 PHANDLE phNewTimer, 02965 WAITORTIMERCALLBACKFUNC Callback, 02966 PVOID Parameter, 02967 ULONG DueTime, 02968 ULONG Period, 02969 ULONG Flags 02970 ); 02971 02972 NTSYSAPI 02973 NTSTATUS 02974 NTAPI 02975 RtlCreateTimerQueue(PHANDLE TimerQueue); 02976 02977 NTSYSAPI 02978 NTSTATUS 02979 NTAPI 02980 RtlDeleteTimer( 02981 HANDLE TimerQueue, 02982 HANDLE Timer, 02983 HANDLE CompletionEvent 02984 ); 02985 02986 NTSYSAPI 02987 NTSTATUS 02988 NTAPI 02989 RtlUpdateTimer( 02990 HANDLE TimerQueue, 02991 HANDLE Timer, 02992 ULONG DueTime, 02993 ULONG Period 02994 ); 02995 02996 NTSYSAPI 02997 NTSTATUS 02998 NTAPI 02999 RtlDeleteTimerQueueEx( 03000 HANDLE TimerQueue, 03001 HANDLE CompletionEvent 03002 ); 03003 03004 NTSYSAPI 03005 NTSTATUS 03006 NTAPI 03007 RtlDeleteTimerQueue(HANDLE TimerQueue); 03008 03009 // 03010 // SList functions 03011 // 03012 PSLIST_ENTRY 03013 FASTCALL 03014 InterlockedPushListSList( 03015 IN PSLIST_HEADER ListHead, 03016 IN PSLIST_ENTRY List, 03017 IN PSLIST_ENTRY ListEnd, 03018 IN ULONG Count 03019 ); 03020 03021 // 03022 // Range List functions 03023 // 03024 NTSYSAPI 03025 VOID 03026 NTAPI 03027 RtlInitializeRangeList( 03028 IN OUT PRTL_RANGE_LIST RangeList 03029 ); 03030 03031 NTSYSAPI 03032 VOID 03033 NTAPI 03034 RtlFreeRangeList( 03035 IN PRTL_RANGE_LIST RangeList 03036 ); 03037 03038 NTSYSAPI 03039 NTSTATUS 03040 NTAPI 03041 RtlAddRange( 03042 IN OUT PRTL_RANGE_LIST RangeList, 03043 IN ULONGLONG Start, 03044 IN ULONGLONG End, 03045 IN UCHAR Attributes, 03046 IN ULONG Flags, 03047 IN PVOID UserData OPTIONAL, 03048 IN PVOID Owner OPTIONAL 03049 ); 03050 03051 // 03052 // Debug Functions 03053 // 03054 ULONG 03055 __cdecl 03056 DbgPrint( 03057 IN PCCH Format, 03058 IN ... 03059 ); 03060 03061 NTSYSAPI 03062 ULONG 03063 __cdecl 03064 DbgPrintEx( 03065 IN ULONG ComponentId, 03066 IN ULONG Level, 03067 IN PCCH Format, 03068 IN ... 03069 ); 03070 03071 NTSYSAPI 03072 ULONG 03073 NTAPI 03074 DbgPrompt( 03075 IN PCCH Prompt, 03076 OUT PCH Response, 03077 IN ULONG MaximumResponseLength 03078 ); 03079 03080 VOID 03081 NTAPI 03082 DbgBreakPoint( 03083 VOID 03084 ); 03085 03086 VOID 03087 NTAPI 03088 DbgLoadImageSymbols( 03089 IN PSTRING Name, 03090 IN PVOID Base, 03091 IN ULONG_PTR ProcessId 03092 ); 03093 03094 VOID 03095 NTAPI 03096 DbgUnLoadImageSymbols( 03097 IN PSTRING Name, 03098 IN PVOID Base, 03099 IN ULONG_PTR ProcessId 03100 ); 03101 03102 VOID 03103 NTAPI 03104 DbgCommandString( 03105 IN PCCH Name, 03106 IN PCCH Command 03107 ); 03108 03109 // 03110 // Generic Table Functions 03111 // 03112 #if defined(NTOS_MODE_USER) || defined(_NTIFS_) 03113 NTSYSAPI 03114 PVOID 03115 NTAPI 03116 RtlInsertElementGenericTable( 03117 IN PRTL_GENERIC_TABLE Table, 03118 IN PVOID Buffer, 03119 IN ULONG BufferSize, 03120 OUT PBOOLEAN NewElement OPTIONAL 03121 ); 03122 03123 NTSYSAPI 03124 PVOID 03125 NTAPI 03126 RtlInsertElementGenericTableFull( 03127 IN PRTL_GENERIC_TABLE Table, 03128 IN PVOID Buffer, 03129 IN ULONG BufferSize, 03130 OUT PBOOLEAN NewElement OPTIONAL, 03131 IN PVOID NodeOrParent, 03132 IN TABLE_SEARCH_RESULT SearchResult 03133 ); 03134 03135 NTSYSAPI 03136 BOOLEAN 03137 NTAPI 03138 RtlIsGenericTableEmpty( 03139 IN PRTL_GENERIC_TABLE Table 03140 ); 03141 03142 NTSYSAPI 03143 PVOID 03144 NTAPI 03145 RtlLookupElementGenericTableFull( 03146 IN PRTL_GENERIC_TABLE Table, 03147 IN PVOID Buffer, 03148 OUT PVOID *NodeOrParent, 03149 OUT TABLE_SEARCH_RESULT *SearchResult 03150 ); 03151 #endif 03152 03153 // 03154 // Handle Table Functions 03155 // 03156 NTSYSAPI 03157 PRTL_HANDLE_TABLE_ENTRY 03158 NTAPI 03159 RtlAllocateHandle( 03160 IN PRTL_HANDLE_TABLE HandleTable, 03161 IN OUT PULONG Index 03162 ); 03163 03164 NTSYSAPI 03165 VOID 03166 NTAPI 03167 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable); 03168 03169 NTSYSAPI 03170 BOOLEAN 03171 NTAPI 03172 RtlFreeHandle( 03173 IN PRTL_HANDLE_TABLE HandleTable, 03174 IN PRTL_HANDLE_TABLE_ENTRY Handle 03175 ); 03176 03177 NTSYSAPI 03178 VOID 03179 NTAPI 03180 RtlInitializeHandleTable( 03181 IN ULONG TableSize, 03182 IN ULONG HandleSize, 03183 IN PRTL_HANDLE_TABLE HandleTable 03184 ); 03185 03186 NTSYSAPI 03187 BOOLEAN 03188 NTAPI 03189 RtlIsValidHandle( 03190 IN PRTL_HANDLE_TABLE HandleTable, 03191 IN PRTL_HANDLE_TABLE_ENTRY Handle 03192 ); 03193 03194 NTSYSAPI 03195 BOOLEAN 03196 NTAPI 03197 RtlIsValidIndexHandle( 03198 IN PRTL_HANDLE_TABLE HandleTable, 03199 IN ULONG Index, 03200 OUT PRTL_HANDLE_TABLE_ENTRY *Handle 03201 ); 03202 03203 // 03204 // PE Functions 03205 // 03206 NTSYSAPI 03207 NTSTATUS 03208 NTAPI 03209 RtlFindMessage( 03210 IN PVOID BaseAddress, 03211 IN ULONG Type, 03212 IN ULONG Language, 03213 IN ULONG MessageId, 03214 OUT PMESSAGE_RESOURCE_ENTRY *MessageResourceEntry 03215 ); 03216 03217 NTSYSAPI 03218 ULONG 03219 NTAPI 03220 RtlGetNtGlobalFlags(VOID); 03221 03222 NTSYSAPI 03223 PVOID 03224 NTAPI 03225 RtlImageDirectoryEntryToData( 03226 PVOID BaseAddress, 03227 BOOLEAN MappedAsImage, 03228 USHORT Directory, 03229 PULONG Size 03230 ); 03231 03232 NTSYSAPI 03233 PVOID 03234 NTAPI 03235 RtlImageRvaToVa( 03236 PIMAGE_NT_HEADERS NtHeader, 03237 PVOID BaseAddress, 03238 ULONG Rva, 03239 PIMAGE_SECTION_HEADER *SectionHeader 03240 ); 03241 03242 NTSYSAPI 03243 PIMAGE_NT_HEADERS 03244 NTAPI 03245 RtlImageNtHeader(IN PVOID BaseAddress); 03246 03247 NTSYSAPI 03248 NTSTATUS 03249 NTAPI 03250 RtlImageNtHeaderEx( 03251 IN ULONG Flags, 03252 IN PVOID BaseAddress, 03253 IN ULONGLONG Size, 03254 IN PIMAGE_NT_HEADERS *NtHeader 03255 ); 03256 03257 NTSYSAPI 03258 PIMAGE_SECTION_HEADER 03259 NTAPI 03260 RtlImageRvaToSection( 03261 PIMAGE_NT_HEADERS NtHeader, 03262 PVOID BaseAddress, 03263 ULONG Rva 03264 ); 03265 03266 NTSYSAPI 03267 ULONG 03268 NTAPI 03269 LdrRelocateImageWithBias( 03270 IN PVOID NewAddress, 03271 IN LONGLONG AdditionalBias, 03272 IN PCCH LoaderName, 03273 IN ULONG Success, 03274 IN ULONG Conflict, 03275 IN ULONG Invalid 03276 ); 03277 03278 // 03279 // Activation Context Functions 03280 // 03281 #ifdef NTOS_MODE_USER 03282 NTSYSAPI 03283 NTSTATUS 03284 NTAPI 03285 RtlActivateActivationContextEx( 03286 IN ULONG Flags, 03287 IN PTEB Teb, 03288 IN PVOID Context, 03289 IN PULONG_PTR Cookie 03290 ); 03291 03292 NTSYSAPI 03293 NTSTATUS 03294 NTAPI 03295 RtlActivateActivationContext( 03296 IN ULONG Flags, 03297 IN HANDLE Handle, 03298 OUT PULONG_PTR Cookie 03299 ); 03300 03301 NTSYSAPI 03302 VOID 03303 NTAPI 03304 RtlAddRefActivationContext( 03305 PVOID Context 03306 ); 03307 03308 NTSYSAPI 03309 PRTL_ACTIVATION_CONTEXT_STACK_FRAME 03310 FASTCALL 03311 RtlActivateActivationContextUnsafeFast( 03312 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame, 03313 IN PVOID Context 03314 ); 03315 03316 NTSYSAPI 03317 NTSTATUS 03318 NTAPI 03319 RtlAllocateActivationContextStack( 03320 IN PVOID *Context 03321 ); 03322 03323 NTSYSAPI 03324 NTSTATUS 03325 NTAPI 03326 RtlCreateActivationContext( 03327 OUT PHANDLE Handle, 03328 IN OUT PVOID ReturnedData 03329 ); 03330 03331 NTSYSAPI 03332 NTSTATUS 03333 NTAPI 03334 RtlGetActiveActivationContext( 03335 IN PVOID *Context 03336 ); 03337 03338 NTSYSAPI 03339 VOID 03340 NTAPI 03341 RtlReleaseActivationContext( 03342 IN HANDLE handle 03343 ); 03344 03345 NTSYSAPI 03346 NTSTATUS 03347 NTAPI 03348 RtlDeactivateActivationContext( 03349 ULONG dwFlags, 03350 ULONG_PTR ulCookie 03351 ); 03352 03353 NTSYSAPI 03354 VOID 03355 NTAPI 03356 RtlFreeThreadActivationContextStack(void); 03357 03358 NTSYSAPI 03359 PRTL_ACTIVATION_CONTEXT_STACK_FRAME 03360 FASTCALL 03361 RtlDeactivateActivationContextUnsafeFast( 03362 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame 03363 ); 03364 03365 NTSYSAPI 03366 NTSTATUS 03367 NTAPI 03368 RtlDosApplyFileIsolationRedirection_Ustr( 03369 IN ULONG Flags, 03370 IN PUNICODE_STRING OriginalName, 03371 IN PUNICODE_STRING Extension, 03372 IN OUT PUNICODE_STRING StaticString, 03373 IN OUT PUNICODE_STRING DynamicString, 03374 IN OUT PUNICODE_STRING *NewName, 03375 IN PULONG NewFlags, 03376 IN PSIZE_T FileNameSize, 03377 IN PSIZE_T RequiredLength 03378 ); 03379 03380 NTSYSAPI 03381 NTSTATUS 03382 NTAPI 03383 RtlFindActivationContextSectionString( 03384 IN ULONG dwFlags, 03385 IN const GUID *ExtensionGuid, 03386 IN ULONG SectionType, 03387 IN PUNICODE_STRING SectionName, 03388 IN OUT PVOID ReturnedData 03389 ); 03390 03391 NTSYSAPI 03392 NTSTATUS 03393 NTAPI 03394 RtlQueryInformationActivationContext( 03395 DWORD dwFlags, 03396 PVOID Context, 03397 PVOID pvSubInstance, 03398 ULONG ulInfoClass, 03399 PVOID pvBuffer, 03400 SIZE_T cbBuffer OPTIONAL, 03401 SIZE_T *pcbWrittenOrRequired OPTIONAL 03402 ); 03403 03404 NTSYSAPI 03405 NTSTATUS 03406 NTAPI 03407 RtlZombifyActivationContext( 03408 PVOID Context 03409 ); 03410 03411 // 03412 // WOW64 Functions 03413 // 03414 NTSYSAPI 03415 NTSTATUS 03416 NTAPI 03417 RtlWow64EnableFsRedirection( 03418 IN BOOLEAN Wow64FsEnableRedirection 03419 ); 03420 03421 NTSYSAPI 03422 NTSTATUS 03423 NTAPI 03424 RtlWow64EnableFsRedirectionEx( 03425 IN PVOID Wow64FsEnableRedirection, 03426 OUT PVOID *OldFsRedirectionLevel 03427 ); 03428 03429 #endif 03430 03431 // 03432 // Registry Functions 03433 // 03434 NTSYSAPI 03435 NTSTATUS 03436 NTAPI 03437 RtlCheckRegistryKey( 03438 ULONG RelativeTo, 03439 PWSTR Path 03440 ); 03441 03442 NTSYSAPI 03443 NTSTATUS 03444 NTAPI 03445 RtlCreateRegistryKey( 03446 IN ULONG RelativeTo, 03447 IN PWSTR Path 03448 ); 03449 03450 NTSYSAPI 03451 NTSTATUS 03452 NTAPI 03453 RtlFormatCurrentUserKeyPath( 03454 IN OUT PUNICODE_STRING KeyPath 03455 ); 03456 03457 NTSYSAPI 03458 NTSTATUS 03459 NTAPI 03460 RtlOpenCurrentUser( 03461 IN ACCESS_MASK DesiredAccess, 03462 OUT PHANDLE KeyHandle 03463 ); 03464 03465 NTSYSAPI 03466 NTSTATUS 03467 NTAPI 03468 RtlQueryRegistryValues( 03469 IN ULONG RelativeTo, 03470 IN PCWSTR Path, 03471 IN PRTL_QUERY_REGISTRY_TABLE QueryTable, 03472 IN PVOID Context, 03473 IN PVOID Environment 03474 ); 03475 03476 NTSYSAPI 03477 NTSTATUS 03478 NTAPI 03479 RtlWriteRegistryValue( 03480 ULONG RelativeTo, 03481 PCWSTR Path, 03482 PCWSTR ValueName, 03483 ULONG ValueType, 03484 PVOID ValueData, 03485 ULONG ValueLength 03486 ); 03487 03488 #ifdef NTOS_MODE_USER 03489 NTSYSAPI 03490 NTSTATUS 03491 NTAPI 03492 RtlpNtCreateKey( 03493 OUT HANDLE KeyHandle, 03494 IN ACCESS_MASK DesiredAccess, 03495 IN POBJECT_ATTRIBUTES ObjectAttributes, 03496 IN ULONG TitleIndex, 03497 IN PUNICODE_STRING Class, 03498 OUT PULONG Disposition 03499 ); 03500 03501 NTSYSAPI 03502 NTSTATUS 03503 NTAPI 03504 RtlpNtEnumerateSubKey( 03505 IN HANDLE KeyHandle, 03506 OUT PUNICODE_STRING SubKeyName, 03507 IN ULONG Index, 03508 IN ULONG Unused 03509 ); 03510 03511 NTSYSAPI 03512 NTSTATUS 03513 NTAPI 03514 RtlpNtMakeTemporaryKey( 03515 IN HANDLE KeyHandle 03516 ); 03517 03518 NTSYSAPI 03519 NTSTATUS 03520 NTAPI 03521 RtlpNtOpenKey( 03522 OUT HANDLE KeyHandle, 03523 IN ACCESS_MASK DesiredAccess, 03524 IN POBJECT_ATTRIBUTES ObjectAttributes, 03525 IN ULONG Unused 03526 ); 03527 03528 NTSYSAPI 03529 NTSTATUS 03530 NTAPI 03531 RtlpNtQueryValueKey( 03532 IN HANDLE KeyHandle, 03533 OUT PULONG Type OPTIONAL, 03534 OUT PVOID Data OPTIONAL, 03535 IN OUT PULONG DataLength OPTIONAL, 03536 IN ULONG Unused 03537 ); 03538 03539 NTSYSAPI 03540 NTSTATUS 03541 NTAPI 03542 RtlpNtSetValueKey( 03543 IN HANDLE KeyHandle, 03544 IN ULONG Type, 03545 IN PVOID Data, 03546 IN ULONG DataLength 03547 ); 03548 #endif 03549 03550 // 03551 // NLS Functions 03552 // 03553 NTSYSAPI 03554 VOID 03555 NTAPI 03556 RtlGetDefaultCodePage( 03557 OUT PUSHORT AnsiCodePage, 03558 OUT PUSHORT OemCodePage 03559 ); 03560 03561 NTSYSAPI 03562 VOID 03563 NTAPI 03564 RtlInitNlsTables( 03565 IN PUSHORT AnsiTableBase, 03566 IN PUSHORT OemTableBase, 03567 IN PUSHORT CaseTableBase, 03568 OUT PNLSTABLEINFO NlsTable 03569 ); 03570 03571 NTSYSAPI 03572 VOID 03573 NTAPI 03574 RtlInitCodePageTable( 03575 IN PUSHORT TableBase, 03576 OUT PCPTABLEINFO CodePageTable 03577 ); 03578 03579 NTSYSAPI 03580 VOID 03581 NTAPI 03582 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable); 03583 03584 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES) 03585 03586 // 03587 // Misc conversion functions 03588 // 03589 static __inline 03590 LARGE_INTEGER 03591 NTAPI_INLINE 03592 RtlConvertLongToLargeInteger( 03593 LONG SignedInteger 03594 ) 03595 { 03596 LARGE_INTEGER Result; 03597 03598 Result.QuadPart = SignedInteger; 03599 return Result; 03600 } 03601 03602 static __inline 03603 LARGE_INTEGER 03604 NTAPI_INLINE 03605 RtlEnlargedIntegerMultiply( 03606 LONG Multiplicand, 03607 LONG Multiplier 03608 ) 03609 { 03610 LARGE_INTEGER Product; 03611 03612 Product.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier; 03613 return Product; 03614 } 03615 03616 static __inline 03617 ULONG 03618 NTAPI_INLINE 03619 RtlEnlargedUnsignedDivide( 03620 IN ULARGE_INTEGER Dividend, 03621 IN ULONG Divisor, 03622 IN PULONG Remainder OPTIONAL 03623 ) 03624 { 03625 ULONG Quotient; 03626 03627 Quotient = (ULONG)(Dividend.QuadPart / Divisor); 03628 if (Remainder) { 03629 *Remainder = (ULONG)(Dividend.QuadPart % Divisor); 03630 } 03631 03632 return Quotient; 03633 } 03634 03635 static __inline 03636 LARGE_INTEGER 03637 NTAPI_INLINE 03638 RtlEnlargedUnsignedMultiply( 03639 ULONG Multiplicand, 03640 ULONG Multiplier 03641 ) 03642 { 03643 LARGE_INTEGER Product; 03644 03645 Product.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier; 03646 return Product; 03647 } 03648 03649 #if defined(_AMD64_) || defined(_IA64_) 03650 static __inline 03651 LARGE_INTEGER 03652 NTAPI_INLINE 03653 RtlExtendedLargeIntegerDivide( 03654 IN LARGE_INTEGER Dividend, 03655 IN ULONG Divisor, 03656 OUT PULONG Remainder OPTIONAL) 03657 { 03658 LARGE_INTEGER ret; 03659 ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor; 03660 if (Remainder) 03661 *Remainder = (ULONG)(Dividend.QuadPart % Divisor); 03662 return ret; 03663 } 03664 03665 #else 03666 NTSYSAPI 03667 LARGE_INTEGER 03668 NTAPI 03669 RtlExtendedLargeIntegerDivide( 03670 IN LARGE_INTEGER Dividend, 03671 IN ULONG Divisor, 03672 OUT PULONG Remainder OPTIONAL 03673 ); 03674 03675 #endif /* defined(_AMD64_) || defined(_IA64_) */ 03676 03677 #endif 03678 03679 03680 NTSYSAPI 03681 ULONG 03682 NTAPI 03683 RtlUniform( 03684 IN PULONG Seed 03685 ); 03686 03687 NTSYSAPI 03688 ULONG 03689 NTAPI 03690 RtlRandom( 03691 IN OUT PULONG Seed 03692 ); 03693 03694 NTSYSAPI 03695 ULONG 03696 NTAPI 03697 RtlComputeCrc32( 03698 IN ULONG InitialCrc, 03699 IN PUCHAR Buffer, 03700 IN ULONG Length 03701 ); 03702 03703 // 03704 // Network Functions 03705 // 03706 NTSYSAPI 03707 NTSTATUS 03708 NTAPI 03709 RtlIpv4StringToAddressW( 03710 IN PCWSTR String, 03711 IN BOOLEAN Strict, 03712 OUT LPWSTR *Terminator, 03713 OUT struct in_addr *Addr 03714 ); 03715 03716 NTSYSAPI 03717 NTSTATUS 03718 NTAPI 03719 RtlIpv6StringToAddressA( 03720 IN PCHAR Name, 03721 OUT PCHAR *Terminator, 03722 OUT struct in6_addr *Addr 03723 ); 03724 03725 NTSYSAPI 03726 NTSTATUS 03727 NTAPI 03728 RtlIpv6StringToAddressW( 03729 IN PWCHAR Name, 03730 OUT PCHAR *Terminator, 03731 OUT struct in6_addr *Addr 03732 ); 03733 03734 NTSYSAPI 03735 NTSTATUS 03736 NTAPI 03737 RtlIpv6StringToAddressExA( 03738 IN PCHAR AddressString, 03739 IN struct in6_addr *Address, 03740 IN PULONG ScopeId, 03741 IN PUSHORT Port 03742 ); 03743 03744 NTSYSAPI 03745 NTSTATUS 03746 NTAPI 03747 RtlIpv6StringToAddressExW( 03748 IN PWCHAR AddressName, 03749 IN struct in6_addr *Address, 03750 IN PULONG ScopeId, 03751 IN PUSHORT Port 03752 ); 03753 03754 03755 // 03756 // Time Functions 03757 // 03758 NTSYSAPI 03759 NTSTATUS 03760 NTAPI 03761 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation); 03762 03763 NTSYSAPI 03764 VOID 03765 NTAPI 03766 RtlSecondsSince1970ToTime( 03767 IN ULONG SecondsSince1970, 03768 OUT PLARGE_INTEGER Time 03769 ); 03770 03771 NTSYSAPI 03772 NTSTATUS 03773 NTAPI 03774 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation); 03775 03776 NTSYSAPI 03777 BOOLEAN 03778 NTAPI 03779 RtlTimeFieldsToTime( 03780 PTIME_FIELDS TimeFields, 03781 PLARGE_INTEGER Time 03782 ); 03783 03784 NTSYSAPI 03785 BOOLEAN 03786 NTAPI 03787 RtlTimeToSecondsSince1970( 03788 PLARGE_INTEGER Time, 03789 OUT PULONG SecondsSince1970 03790 ); 03791 03792 NTSYSAPI 03793 VOID 03794 NTAPI 03795 RtlTimeToTimeFields( 03796 PLARGE_INTEGER Time, 03797 PTIME_FIELDS TimeFields 03798 ); 03799 03800 NTSYSAPI 03801 NTSTATUS 03802 NTAPI 03803 RtlSystemTimeToLocalTime( 03804 IN PLARGE_INTEGER SystemTime, 03805 OUT PLARGE_INTEGER LocalTime 03806 ); 03807 03808 // 03809 // Version Functions 03810 // 03811 NTSYSAPI 03812 NTSTATUS 03813 NTAPI 03814 RtlVerifyVersionInfo( 03815 IN PRTL_OSVERSIONINFOEXW VersionInfo, 03816 IN ULONG TypeMask, 03817 IN ULONGLONG ConditionMask 03818 ); 03819 03820 NTSYSAPI 03821 NTSTATUS 03822 NTAPI 03823 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation); 03824 03825 NTSYSAPI 03826 BOOLEAN 03827 NTAPI 03828 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType); 03829 03830 // 03831 // Secure Memory Functions 03832 // 03833 #ifdef NTOS_MODE_USER 03834 NTSYSAPI 03835 NTSTATUS 03836 NTAPI 03837 RtlRegisterSecureMemoryCacheCallback( 03838 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback); 03839 03840 NTSYSAPI 03841 BOOLEAN 03842 NTAPI 03843 RtlFlushSecureMemoryCache( 03844 IN PVOID MemoryCache, 03845 IN OPTIONAL SIZE_T MemoryLength 03846 ); 03847 #endif 03848 03849 // 03850 // Boot Status Data Functions 03851 // 03852 #ifdef NTOS_MODE_USER 03853 NTSYSAPI 03854 NTSTATUS 03855 NTAPI 03856 RtlCreateBootStatusDataFile( 03857 VOID 03858 ); 03859 03860 NTSYSAPI 03861 NTSTATUS 03862 NTAPI 03863 RtlGetSetBootStatusData( 03864 IN HANDLE FileHandle, 03865 IN BOOLEAN WriteMode, 03866 IN RTL_BSD_ITEM_TYPE DataClass, 03867 IN PVOID Buffer, 03868 IN ULONG BufferSize, 03869 OUT PULONG ReturnLength OPTIONAL 03870 ); 03871 03872 NTSYSAPI 03873 NTSTATUS 03874 NTAPI 03875 RtlLockBootStatusData( 03876 OUT PHANDLE FileHandle 03877 ); 03878 03879 NTSYSAPI 03880 NTSTATUS 03881 NTAPI 03882 RtlUnlockBootStatusData( 03883 IN HANDLE FileHandle 03884 ); 03885 #endif 03886 03887 #ifdef NTOS_MODE_USER 03888 NTSYSAPI 03889 NTSTATUS 03890 NTAPI 03891 RtlGUIDFromString( 03892 IN PUNICODE_STRING GuidString, 03893 OUT GUID *Guid); 03894 03895 NTSYSAPI 03896 NTSTATUS 03897 NTAPI 03898 RtlComputeImportTableHash( 03899 IN HANDLE hFile, 03900 OUT PCHAR Hash, 03901 IN ULONG ImportTableHashRevision 03902 ); 03903 #endif 03904 03905 #ifdef __cplusplus 03906 } 03907 #endif 03908 03909 #endif Generated on Sat May 26 2012 04:29:43 for ReactOS by
1.7.6.1
|