3 Copyright (c) Alex Ionescu. All rights reserved.
11 Function definitions for the Run-Time Library
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
45 IN PLIST_ENTRY ListHead
48 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
54 IN PLIST_ENTRY ListHead
,
59 OldFlink
= ListHead
->Flink
;
60 Entry
->Flink
= OldFlink
;
61 Entry
->Blink
= ListHead
;
62 OldFlink
->Blink
= Entry
;
63 ListHead
->Flink
= Entry
;
69 IN PLIST_ENTRY ListHead
,
74 OldBlink
= ListHead
->Blink
;
75 Entry
->Flink
= ListHead
;
76 Entry
->Blink
= OldBlink
;
77 OldBlink
->Flink
= Entry
;
78 ListHead
->Blink
= Entry
;
84 IN
const LIST_ENTRY
* ListHead
87 return (BOOLEAN
)(ListHead
->Flink
== ListHead
);
93 PSINGLE_LIST_ENTRY ListHead
96 PSINGLE_LIST_ENTRY FirstEntry
;
97 FirstEntry
= ListHead
->Next
;
98 if (FirstEntry
!= NULL
) {
99 ListHead
->Next
= FirstEntry
->Next
;
108 PSINGLE_LIST_ENTRY ListHead
,
109 PSINGLE_LIST_ENTRY Entry
112 Entry
->Next
= ListHead
->Next
;
113 ListHead
->Next
= Entry
;
119 IN PLIST_ENTRY Entry
)
121 PLIST_ENTRY OldFlink
;
122 PLIST_ENTRY OldBlink
;
124 OldFlink
= Entry
->Flink
;
125 OldBlink
= Entry
->Blink
;
126 OldFlink
->Blink
= OldBlink
;
127 OldBlink
->Flink
= OldFlink
;
128 return (BOOLEAN
)(OldFlink
== OldBlink
);
134 IN PLIST_ENTRY ListHead
)
139 Entry
= ListHead
->Flink
;
140 Flink
= Entry
->Flink
;
141 ListHead
->Flink
= Flink
;
142 Flink
->Blink
= ListHead
;
149 IN PLIST_ENTRY ListHead
)
154 Entry
= ListHead
->Blink
;
155 Blink
= Entry
->Blink
;
156 ListHead
->Blink
= Blink
;
157 Blink
->Flink
= ListHead
;
162 // Unicode string macros
166 RtlInitEmptyUnicodeString(OUT PUNICODE_STRING UnicodeString
,
168 IN USHORT BufferSize
)
170 UnicodeString
->Length
= 0;
171 UnicodeString
->MaximumLength
= BufferSize
;
172 UnicodeString
->Buffer
= Buffer
;
177 RtlInitEmptyAnsiString(OUT PANSI_STRING AnsiString
,
179 IN USHORT BufferSize
)
181 AnsiString
->Length
= 0;
182 AnsiString
->MaximumLength
= BufferSize
;
183 AnsiString
->Buffer
= Buffer
;
189 #define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \
190 ((L1)->LowPart == (L2)->LowPart))
194 RtlConvertUlongToLuid(ULONG Ulong
)
198 TempLuid
.LowPart
= Ulong
;
199 TempLuid
.HighPart
= 0;
209 #define ASSERT( exp ) \
211 (RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ),FALSE) : \
214 #define ASSERTMSG( msg, exp ) \
216 (RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ),FALSE) : \
221 #define ASSERT( exp ) ((void) 0)
222 #define ASSERTMSG( msg, exp ) ((void) 0)
227 #ifdef NTOS_KERNEL_RUNTIME
230 // Executing RTL functions at DISPATCH_LEVEL or higher will result in a
233 #define RTL_PAGED_CODE PAGED_CODE
238 // This macro does nothing in user mode
240 #define RTL_PAGED_CODE NOP_FUNCTION
245 // RTL Splay Tree Functions
247 #ifndef RTL_USE_AVL_TABLES
252 RtlInitializeGenericTable(
253 OUT PRTL_GENERIC_TABLE Table
,
254 IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
,
255 IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
,
256 IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine
,
257 IN PVOID TableContext OPTIONAL
263 RtlInsertElementGenericTable(
264 IN PRTL_GENERIC_TABLE Table
,
267 OUT PBOOLEAN NewElement OPTIONAL
273 RtlInsertElementGenericTableFull(
274 IN PRTL_GENERIC_TABLE Table
,
277 OUT PBOOLEAN NewElement OPTIONAL
,
278 IN PVOID NodeOrParent
,
279 IN TABLE_SEARCH_RESULT SearchResult
285 RtlDeleteElementGenericTable(
286 IN PRTL_GENERIC_TABLE Table
,
293 RtlLookupElementGenericTable(
294 IN PRTL_GENERIC_TABLE Table
,
301 RtlLookupElementGenericTableFull(
302 IN PRTL_GENERIC_TABLE Table
,
304 OUT PVOID
*NodeOrParent
,
305 OUT TABLE_SEARCH_RESULT
*SearchResult
311 RtlEnumerateGenericTable(
312 IN PRTL_GENERIC_TABLE Table
,
319 RtlEnumerateGenericTableWithoutSplaying(
320 IN PRTL_GENERIC_TABLE Table
,
321 IN OUT PVOID
*RestartKey
327 RtlGetElementGenericTable(
328 IN PRTL_GENERIC_TABLE Table
,
335 RtlNumberGenericTableElements(
336 IN PRTL_GENERIC_TABLE Table
342 RtlIsGenericTableEmpty(
343 IN PRTL_GENERIC_TABLE Table
346 #endif /* !RTL_USE_AVL_TABLES */
352 IN PRTL_SPLAY_LINKS Links
359 IN PRTL_SPLAY_LINKS Links
366 IN PRTL_SPLAY_LINKS Links
,
367 OUT PRTL_SPLAY_LINKS
*Root
374 IN PRTL_SPLAY_LINKS Links
380 RtlSubtreePredecessor(
381 IN PRTL_SPLAY_LINKS Links
388 IN PRTL_SPLAY_LINKS Links
395 IN PRTL_SPLAY_LINKS Links
398 #define RtlIsLeftChild(Links) \
399 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
401 #define RtlIsRightChild(Links) \
402 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
404 #define RtlRightChild(Links) \
405 ((PRTL_SPLAY_LINKS)(Links))->RightChild
407 #define RtlIsRoot(Links) \
408 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
410 #define RtlLeftChild(Links) \
411 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
413 #define RtlParent(Links) \
414 ((PRTL_SPLAY_LINKS)(Links))->Parent
416 #define RtlInitializeSplayLinks(Links) \
418 PRTL_SPLAY_LINKS _SplayLinks; \
419 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
420 _SplayLinks->Parent = _SplayLinks; \
421 _SplayLinks->LeftChild = NULL; \
422 _SplayLinks->RightChild = NULL; \
425 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
427 PRTL_SPLAY_LINKS _SplayParent; \
428 PRTL_SPLAY_LINKS _SplayChild; \
429 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
430 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
431 _SplayParent->LeftChild = _SplayChild; \
432 _SplayChild->Parent = _SplayParent; \
435 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
437 PRTL_SPLAY_LINKS _SplayParent; \
438 PRTL_SPLAY_LINKS _SplayChild; \
439 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
440 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
441 _SplayParent->RightChild = _SplayChild; \
442 _SplayChild->Parent = _SplayParent; \
446 // RTL AVL Tree Functions
451 RtlInitializeGenericTableAvl(
452 OUT PRTL_AVL_TABLE Table
,
453 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
454 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
455 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
456 IN PVOID TableContext OPTIONAL
462 RtlInsertElementGenericTableAvl(
463 IN PRTL_AVL_TABLE Table
,
466 OUT PBOOLEAN NewElement OPTIONAL
472 RtlInsertElementGenericTableFullAvl(
473 IN PRTL_AVL_TABLE Table
,
476 OUT PBOOLEAN NewElement OPTIONAL
,
477 IN PVOID NodeOrParent
,
478 IN TABLE_SEARCH_RESULT SearchResult
484 RtlDeleteElementGenericTableAvl(
485 IN PRTL_AVL_TABLE Table
,
492 RtlLookupElementGenericTableAvl(
493 IN PRTL_AVL_TABLE Table
,
500 RtlLookupElementGenericTableFullAvl(
501 IN PRTL_AVL_TABLE Table
,
503 OUT PVOID
*NodeOrParent
,
504 OUT TABLE_SEARCH_RESULT
*SearchResult
510 RtlEnumerateGenericTableAvl(
511 IN PRTL_AVL_TABLE Table
,
518 RtlEnumerateGenericTableWithoutSplayingAvl(
519 IN PRTL_AVL_TABLE Table
,
520 IN OUT PVOID
*RestartKey
526 RtlLookupFirstMatchingElementGenericTableAvl(
527 IN PRTL_AVL_TABLE Table
,
529 OUT PVOID
*RestartKey
535 RtlEnumerateGenericTableLikeADirectory(
536 IN PRTL_AVL_TABLE Table
,
537 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL
,
538 IN PVOID MatchData OPTIONAL
,
540 IN OUT PVOID
*RestartKey
,
541 IN OUT PULONG DeleteCount
,
548 RtlGetElementGenericTableAvl(
549 IN PRTL_AVL_TABLE Table
,
556 RtlNumberGenericTableElementsAvl(
557 IN PRTL_AVL_TABLE Table
563 RtlIsGenericTableEmptyAvl(
564 IN PRTL_AVL_TABLE Table
567 #ifdef RTL_USE_AVL_TABLES
569 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
570 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
571 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
572 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
573 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
574 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
575 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
576 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
577 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
578 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
579 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
581 #endif /* RTL_USE_AVL_TABLES */
583 #endif /* NTOS_MODE_USER */
586 // Error and Exception Functions
591 RtlAddVectoredExceptionHandler(
592 IN ULONG FirstHandler
,
593 IN PVECTORED_EXCEPTION_HANDLER VectoredHandler
600 IN PVOID FailedAssertion
,
609 RtlSetUnhandledExceptionFilter(
610 IN PRTLP_UNHANDLED_EXCEPTION_FILTER TopLevelExceptionFilter
617 OUT PCONTEXT ContextRecord
637 RtlEncodeSystemPointer(
644 RtlDecodeSystemPointer(
651 RtlDispatchException(
652 IN PEXCEPTION_RECORD ExceptionRecord
,
659 RtlNtStatusToDosError(
666 RtlNtStatusToDosErrorNoTeb(
673 RtlSetLastWin32ErrorAndNtStatusFromNtStatus(
681 IN PEXCEPTION_RECORD ExceptionRecord
695 RtlUnhandledExceptionFilter(
696 IN
struct _EXCEPTION_POINTERS
* ExceptionInfo
703 IN PVOID TargetFrame OPTIONAL
,
704 IN PVOID TargetIp OPTIONAL
,
705 IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL
,
724 RtlLogStackBackTrace(
735 IN HANDLE HeapHandle
,
745 IN PVOID BaseAddress OPTIONAL
,
746 IN SIZE_T SizeToReserve OPTIONAL
,
747 IN SIZE_T SizeToCommit OPTIONAL
,
748 IN PVOID Lock OPTIONAL
,
749 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
756 IN HANDLE HeapHandle
,
774 IN PVOID BaseAddress OPTIONAL
,
775 IN SIZE_T SizeToReserve OPTIONAL
,
776 IN SIZE_T SizeToCommit OPTIONAL
,
777 IN PVOID Lock OPTIONAL
,
778 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
802 IN HANDLE HeapHandle
,
826 IN PVOID BaseAddress
,
827 OUT PVOID
*UserValue
,
842 RtlQueryHeapInformation (
844 IN HEAP_INFORMATION_CLASS HeapInformationClass
,
845 OUT PVOID HeapInformation OPTIONAL
,
846 IN SIZE_T HeapInformationLength OPTIONAL
,
847 OUT PSIZE_T ReturnLength OPTIONAL
857 IN BOOLEAN ResetCounters
,
858 OUT PRTL_HEAP_TAG_INFO HeapTagInfo
874 RtlSetHeapInformation (
876 IN HEAP_INFORMATION_CLASS HeapInformationClass
,
877 IN PVOID HeapInformation OPTIONAL
,
878 IN SIZE_T HeapInformationLength OPTIONAL
891 RtlMultipleAllocateHeap (
902 RtlMultipleFreeHeap (
915 OUT PRTL_HEAP_USAGE Usage
930 IN PVOID BaseAddress
,
939 IN PVOID BaseAddress
,
940 IN ULONG UserFlagsReset
,
941 IN ULONG UserFlagsSet
950 IN PVOID MemoryPointer
966 IN HANDLE HeapHandle
,
970 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
973 // Security Functions
978 RtlAbsoluteToSelfRelativeSD(
979 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
980 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
981 IN PULONG BufferLength
987 RtlAddAccessAllowedAce(
990 ACCESS_MASK AccessMask
,
997 RtlAddAccessAllowedAceEx(
999 IN ULONG dwAceRevision
,
1001 IN ACCESS_MASK AccessMask
,
1008 RtlAddAccessAllowedObjectAce(
1010 IN ULONG dwAceRevision
,
1012 IN ACCESS_MASK AccessMask
,
1013 IN GUID
*ObjectTypeGuid OPTIONAL
,
1014 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
1021 RtlAddAccessDeniedAce(
1024 ACCESS_MASK AccessMask
,
1031 RtlAddAccessDeniedAceEx(
1035 IN ACCESS_MASK AccessMask
,
1042 RtlAddAccessDeniedObjectAce(
1044 IN ULONG dwAceRevision
,
1046 IN ACCESS_MASK AccessMask
,
1047 IN GUID
*ObjectTypeGuid OPTIONAL
,
1048 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
1058 ULONG StartingAceIndex
,
1066 RtlAddAuditAccessAce(
1069 ACCESS_MASK AccessMask
,
1078 RtlAcquirePrivilege(
1079 IN PULONG Privilege
,
1082 OUT PVOID
*ReturnedState
1088 RtlAddAuditAccessAceEx(
1092 IN ACCESS_MASK AccessMask
,
1101 RtlAddAuditAccessObjectAce(
1105 IN ACCESS_MASK AccessMask
,
1106 IN GUID
*ObjectTypeGuid OPTIONAL
,
1107 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
1120 IN ULONG MandatoryFlags
,
1129 IN BOOLEAN NewValue
,
1130 IN BOOLEAN ForThread
,
1131 OUT PBOOLEAN OldValue
1137 RtlAllocateAndInitializeSid(
1138 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1139 IN UCHAR SubAuthorityCount
,
1140 IN ULONG SubAuthority0
,
1141 IN ULONG SubAuthority1
,
1142 IN ULONG SubAuthority2
,
1143 IN ULONG SubAuthority3
,
1144 IN ULONG SubAuthority4
,
1145 IN ULONG SubAuthority5
,
1146 IN ULONG SubAuthority6
,
1147 IN ULONG SubAuthority7
,
1154 RtlAreAllAccessesGranted(
1155 ACCESS_MASK GrantedAccess
,
1156 ACCESS_MASK DesiredAccess
1162 RtlAreAnyAccessesGranted(
1163 ACCESS_MASK GrantedAccess
,
1164 ACCESS_MASK DesiredAccess
1178 RtlCopyLuidAndAttributesArray(
1180 PLUID_AND_ATTRIBUTES Src
,
1181 PLUID_AND_ATTRIBUTES Dest
1187 RtlCopySidAndAttributesArray(
1189 PSID_AND_ATTRIBUTES Src
,
1191 PSID_AND_ATTRIBUTES Dest
,
1193 PVOID
* RemainingSidArea
,
1194 PULONG RemainingSidAreaSize
1200 RtlConvertSidToUnicodeString(
1201 OUT PUNICODE_STRING DestinationString
,
1203 IN BOOLEAN AllocateDestinationString
1211 IN PSID Destination
,
1227 RtlCreateSecurityDescriptor(
1228 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1235 RtlCreateSecurityDescriptorRelative(
1236 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor
,
1243 RtlCopySecurityDescriptor(
1244 IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor
,
1245 OUT PSECURITY_DESCRIPTOR pDestinationSecurityDescriptor
1299 RtlGetControlSecurityDescriptor(
1300 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1301 OUT PSECURITY_DESCRIPTOR_CONTROL Control
,
1308 RtlGetDaclSecurityDescriptor(
1309 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1310 OUT PBOOLEAN DaclPresent
,
1312 OUT PBOOLEAN DaclDefaulted
1318 RtlGetSaclSecurityDescriptor(
1319 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1320 OUT PBOOLEAN SaclPresent
,
1322 OUT PBOOLEAN SaclDefaulted
1328 RtlGetGroupSecurityDescriptor(
1329 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1331 OUT PBOOLEAN GroupDefaulted
1337 RtlGetOwnerSecurityDescriptor(
1338 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1340 OUT PBOOLEAN OwnerDefaulted
1346 RtlGetSecurityDescriptorRMControl(
1347 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1348 OUT PUCHAR RMControl
1352 PSID_IDENTIFIER_AUTHORITY
1354 RtlIdentifierAuthoritySid(PSID Sid
);
1359 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
1366 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1367 IN UCHAR SubAuthorityCount
1373 RtlLengthRequiredSid(IN ULONG SubAuthorityCount
);
1378 RtlLengthSid(IN PSID Sid
);
1383 RtlMakeSelfRelativeSD(
1384 IN PSECURITY_DESCRIPTOR AbsoluteSD
,
1385 OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1386 IN OUT PULONG BufferLength
);
1392 PACCESS_MASK AccessMask
,
1393 PGENERIC_MAPPING GenericMapping
1396 #ifdef NTOS_MODE_USER
1401 RtlQueryInformationAcl(
1404 ULONG InformationLength
,
1405 ACL_INFORMATION_CLASS InformationClass
1413 RtlReleasePrivilege(
1414 IN PVOID ReturnedState
1420 RtlSelfRelativeToAbsoluteSD(
1421 IN PSECURITY_DESCRIPTOR SelfRelativeSD
,
1422 OUT PSECURITY_DESCRIPTOR AbsoluteSD
,
1423 IN PULONG AbsoluteSDSize
,
1429 IN PULONG OwnerSize
,
1430 IN PSID PrimaryGroup
,
1431 IN PULONG PrimaryGroupSize
1437 RtlSelfRelativeToAbsoluteSD2(
1438 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1439 OUT PULONG BufferSize
1445 RtlSetAttributesSecurityDescriptor(
1446 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1447 IN SECURITY_DESCRIPTOR_CONTROL Control
,
1454 RtlSetControlSecurityDescriptor(
1455 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1456 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest
,
1457 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
1463 RtlSetDaclSecurityDescriptor (
1464 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1465 IN BOOLEAN DaclPresent
,
1467 IN BOOLEAN DaclDefaulted
1473 RtlSetGroupSecurityDescriptor(
1474 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1476 IN BOOLEAN GroupDefaulted
1479 #ifdef NTOS_MODE_USER
1484 RtlSetInformationAcl(
1487 ULONG InformationLength
,
1488 ACL_INFORMATION_CLASS InformationClass
1496 RtlSetOwnerSecurityDescriptor(
1497 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1499 IN BOOLEAN OwnerDefaulted
1505 RtlSetSaclSecurityDescriptor(
1506 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1507 IN BOOLEAN SaclPresent
,
1509 IN BOOLEAN SaclDefaulted
1515 RtlSetSecurityDescriptorRMControl(
1516 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1523 RtlSubAuthorityCountSid(
1532 IN ULONG SubAuthority
1538 RtlValidRelativeSecurityDescriptor(
1539 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
1540 IN ULONG SecurityDescriptorLength
,
1541 IN SECURITY_INFORMATION RequiredInformation
1547 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
1552 RtlValidSid(IN PSID Sid
);
1557 RtlValidAcl(PACL Acl
);
1562 RtlDeleteSecurityObject(
1563 IN PSECURITY_DESCRIPTOR
*ObjectDescriptor
1569 RtlNewSecurityObject(
1570 IN PSECURITY_DESCRIPTOR ParentDescriptor
,
1571 IN PSECURITY_DESCRIPTOR CreatorDescriptor
,
1572 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
1573 IN BOOLEAN IsDirectoryObject
,
1575 IN PGENERIC_MAPPING GenericMapping
1581 RtlQuerySecurityObject(
1582 IN PSECURITY_DESCRIPTOR ObjectDescriptor
,
1583 IN SECURITY_INFORMATION SecurityInformation
,
1584 OUT PSECURITY_DESCRIPTOR ResultantDescriptor
,
1585 IN ULONG DescriptorLength
,
1586 OUT PULONG ReturnLength
1592 RtlSetSecurityObject(
1593 IN SECURITY_INFORMATION SecurityInformation
,
1594 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
1595 OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
1596 IN PGENERIC_MAPPING GenericMapping
,
1601 // Single-Character Functions
1606 RtlLargeIntegerToChar(
1607 IN PLARGE_INTEGER Value
,
1616 RtlUpperChar(CHAR Source
);
1621 RtlUpcaseUnicodeChar(WCHAR Source
);
1626 RtlDowncaseUnicodeChar(IN WCHAR Source
);
1641 RtlIntegerToUnicode(
1643 IN ULONG Base OPTIONAL
,
1644 IN ULONG Length OPTIONAL
,
1645 IN OUT LPWSTR String
1651 RtlIntegerToUnicodeString(
1654 IN OUT PUNICODE_STRING String
1667 // Byte Swap Functions
1669 #ifdef NTOS_MODE_USER
1671 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
1672 ((defined(_M_AMD64) || \
1673 defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
1675 unsigned short __cdecl
_byteswap_ushort(unsigned short);
1676 unsigned long __cdecl
_byteswap_ulong (unsigned long);
1677 unsigned __int64 __cdecl
_byteswap_uint64(unsigned __int64
);
1678 #pragma intrinsic(_byteswap_ushort)
1679 #pragma intrinsic(_byteswap_ulong)
1680 #pragma intrinsic(_byteswap_uint64)
1681 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1682 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1683 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1685 #elif defined (__GNUC__)
1687 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1688 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1689 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1693 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1697 RtlUshortByteSwap(IN USHORT Source
);
1702 RtlUlongByteSwap(IN ULONG Source
);
1707 RtlUlonglongByteSwap(IN ULONGLONG Source
);
1711 #endif // NTOS_MODE_USER
1714 // Unicode->Ansi String Functions
1719 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString
);
1721 #ifdef NTOS_MODE_USER
1723 #define RtlUnicodeStringToAnsiSize(STRING) ( \
1724 NLS_MB_CODE_PAGE_TAG ? \
1725 RtlxUnicodeStringToAnsiSize(STRING) : \
1726 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1734 RtlUnicodeStringToAnsiString(
1735 PANSI_STRING DestinationString
,
1736 PCUNICODE_STRING SourceString
,
1737 BOOLEAN AllocateDestinationString
1741 // Unicode->OEM String Functions
1746 RtlUpcaseUnicodeStringToOemString(
1747 POEM_STRING DestinationString
,
1748 PCUNICODE_STRING SourceString
,
1749 BOOLEAN AllocateDestinationString
1755 RtlUpcaseUnicodeStringToCountedOemString(
1756 IN OUT POEM_STRING DestinationString
,
1757 IN PCUNICODE_STRING SourceString
,
1758 IN BOOLEAN AllocateDestinationString
1764 RtlUnicodeStringToOemString(
1765 POEM_STRING DestinationString
,
1766 PCUNICODE_STRING SourceString
,
1767 BOOLEAN AllocateDestinationString
1773 RtlUpcaseUnicodeToOemN(
1777 PCWCH UnicodeString
,
1784 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString
);
1786 #ifdef NTOS_MODE_USER
1788 #define RtlUnicodeStringToOemSize(STRING) ( \
1789 NLS_MB_OEM_CODE_PAGE_TAG ? \
1790 RtlxUnicodeStringToOemSize(STRING) : \
1791 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1794 #define RtlUnicodeStringToCountedOemSize(STRING) ( \
1795 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
1807 PCWCH UnicodeString
,
1812 // Unicode->MultiByte String Functions
1817 RtlUnicodeToMultiByteN(
1821 PCWCH UnicodeString
,
1828 RtlUpcaseUnicodeToMultiByteN(
1832 PCWCH UnicodeString
,
1839 RtlUnicodeToMultiByteSize(
1841 PCWCH UnicodeString
,
1848 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString
);
1851 // OEM to Unicode Functions
1856 RtlOemStringToUnicodeString(
1857 PUNICODE_STRING DestinationString
,
1858 PCOEM_STRING SourceString
,
1859 BOOLEAN AllocateDestinationString
1866 PWSTR UnicodeString
,
1867 ULONG MaxBytesInUnicodeString
,
1868 PULONG BytesInUnicodeString
,
1870 ULONG BytesInOemString
1873 #ifdef NTOS_MODE_USER
1875 #define RtlOemStringToUnicodeSize(STRING) ( \
1876 NLS_MB_OEM_CODE_PAGE_TAG ? \
1877 RtlxOemStringToUnicodeSize(STRING) : \
1878 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1881 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1882 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1888 // Ansi->Unicode String Functions
1893 RtlxAnsiStringToUnicodeSize(
1894 PCANSI_STRING AnsiString
1900 RtlAnsiStringToUnicodeString(
1901 PUNICODE_STRING DestinationString
,
1902 PCANSI_STRING SourceString
,
1903 BOOLEAN AllocateDestinationString
1906 #ifdef NTOS_MODE_USER
1908 #define RtlAnsiStringToUnicodeSize(STRING) ( \
1909 NLS_MB_CODE_PAGE_TAG ? \
1910 RtlxAnsiStringToUnicodeSize(STRING) : \
1911 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1919 RtlCreateUnicodeStringFromAsciiz(
1920 OUT PUNICODE_STRING Destination
,
1925 // Unicode String Functions
1930 RtlAppendUnicodeToString(
1931 PUNICODE_STRING Destination
,
1938 RtlAppendUnicodeStringToString(
1939 PUNICODE_STRING Destination
,
1940 PCUNICODE_STRING Source
1946 RtlCompareUnicodeString(
1947 PCUNICODE_STRING String1
,
1948 PCUNICODE_STRING String2
,
1949 BOOLEAN CaseInsensitive
1955 RtlCopyUnicodeString(
1956 PUNICODE_STRING DestinationString
,
1957 PCUNICODE_STRING SourceString
1963 RtlCreateUnicodeString(
1964 PUNICODE_STRING DestinationString
,
1968 #ifdef NTOS_MODE_USER
1973 RtlDowncaseUnicodeString(
1974 IN OUT PUNICODE_STRING UniDest
,
1975 IN PCUNICODE_STRING UniSource
,
1976 IN BOOLEAN AllocateDestinationString
1982 RtlDuplicateUnicodeString(
1984 IN PCUNICODE_STRING SourceString
,
1985 OUT PUNICODE_STRING DestinationString
1995 IN PVOID Destination
,
2003 RtlFillMemoryUlonglong(
2004 OUT PVOID Destination
,
2006 IN ULONGLONG Pattern
2013 RtlCompareMemoryUlong(
2019 #define RtlCopyBytes RtlCopyMemory
2020 #define RtlFillBytes RtlFillMemory
2021 #define RtlZeroBytes RtlZeroMemory
2028 RtlEqualUnicodeString(
2029 PCUNICODE_STRING String1
,
2030 PCUNICODE_STRING String2
,
2031 BOOLEAN CaseInsensitive
2037 RtlFindCharInUnicodeString(
2039 IN PCUNICODE_STRING SearchString
,
2040 IN PCUNICODE_STRING MatchString
,
2041 OUT PUSHORT Position
2047 RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString
);
2052 RtlHashUnicodeString(
2053 IN CONST UNICODE_STRING
*String
,
2054 IN BOOLEAN CaseInSensitive
,
2055 IN ULONG HashAlgorithm
,
2056 OUT PULONG HashValue
2062 RtlInitUnicodeString(
2063 IN OUT PUNICODE_STRING DestinationString
,
2064 IN PCWSTR SourceString
2070 RtlInitUnicodeStringEx(
2071 OUT PUNICODE_STRING DestinationString
,
2072 IN PCWSTR SourceString OPTIONAL
2088 PCANSI_STRING String1
,
2089 PCANSI_STRING String2
,
2090 BOOLEAN CaseInsensitive
2096 RtlPrefixUnicodeString(
2097 PCUNICODE_STRING String1
,
2098 PCUNICODE_STRING String2
,
2099 BOOLEAN CaseInsensitive
2105 RtlUpcaseUnicodeString(
2106 PUNICODE_STRING DestinationString
,
2107 PCUNICODE_STRING SourceString
,
2108 BOOLEAN AllocateDestinationString
2114 RtlUnicodeStringToInteger(
2115 PCUNICODE_STRING String
,
2123 RtlValidateUnicodeString(
2125 IN PCUNICODE_STRING String
2129 // Ansi String Functions
2134 RtlFreeAnsiString(IN PANSI_STRING AnsiString
);
2140 PANSI_STRING DestinationString
,
2147 RtlInitAnsiStringEx(
2148 PANSI_STRING DestinationString
,
2153 // OEM String Functions
2158 RtlFreeOemString(IN POEM_STRING OemString
);
2161 // MultiByte->Unicode String Functions
2166 RtlMultiByteToUnicodeN(
2167 PWCHAR UnicodeString
,
2177 RtlMultiByteToUnicodeSize(
2189 RtlAddAtomToAtomTable(
2190 IN PRTL_ATOM_TABLE AtomTable
,
2200 IN OUT PRTL_ATOM_TABLE
*AtomTable
2206 RtlDeleteAtomFromAtomTable(
2207 IN PRTL_ATOM_TABLE AtomTable
,
2214 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable
);
2219 RtlQueryAtomInAtomTable(
2220 IN PRTL_ATOM_TABLE AtomTable
,
2222 IN OUT PULONG RefCount OPTIONAL
,
2223 IN OUT PULONG PinCount OPTIONAL
,
2224 IN OUT PWSTR AtomName OPTIONAL
,
2225 IN OUT PULONG NameLength OPTIONAL
2231 RtlPinAtomInAtomTable(
2232 IN PRTL_ATOM_TABLE AtomTable
,
2239 RtlLookupAtomInAtomTable(
2240 IN PRTL_ATOM_TABLE AtomTable
,
2246 // Process Management Functions
2258 RtlAcquirePebLock(VOID
);
2263 RtlCreateProcessParameters (
2264 OUT PRTL_USER_PROCESS_PARAMETERS
*ProcessParameters
,
2265 IN PUNICODE_STRING ImagePathName OPTIONAL
,
2266 IN PUNICODE_STRING DllPath OPTIONAL
,
2267 IN PUNICODE_STRING CurrentDirectory OPTIONAL
,
2268 IN PUNICODE_STRING CommandLine OPTIONAL
,
2269 IN PWSTR Environment OPTIONAL
,
2270 IN PUNICODE_STRING WindowTitle OPTIONAL
,
2271 IN PUNICODE_STRING DesktopInfo OPTIONAL
,
2272 IN PUNICODE_STRING ShellInfo OPTIONAL
,
2273 IN PUNICODE_STRING RuntimeInfo OPTIONAL
2279 RtlCreateUserProcess(
2280 IN PUNICODE_STRING ImageFileName
,
2281 IN ULONG Attributes
,
2282 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
,
2283 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL
,
2284 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL
,
2285 IN HANDLE ParentProcess OPTIONAL
,
2286 IN BOOLEAN CurrentDirectory
,
2287 IN HANDLE DebugPort OPTIONAL
,
2288 IN HANDLE ExceptionPort OPTIONAL
,
2289 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
2295 RtlCreateUserThread(
2296 IN HANDLE ProcessHandle
,
2297 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
2298 IN BOOLEAN CreateSuspended
,
2299 IN ULONG StackZeroBits
,
2300 IN SIZE_T StackReserve
,
2301 IN SIZE_T StackCommit
,
2302 IN PTHREAD_START_ROUTINE StartAddress
,
2304 IN OUT PHANDLE ThreadHandle
,
2305 IN OUT PCLIENT_ID ClientId
2309 PRTL_USER_PROCESS_PARAMETERS
2311 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2316 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2321 RtlExitUserThread(NTSTATUS Status
);
2326 RtlInitializeContext(
2327 IN HANDLE ProcessHandle
,
2328 OUT PCONTEXT ThreadContext
,
2329 IN PVOID ThreadStartParam OPTIONAL
,
2330 IN PTHREAD_START_ROUTINE ThreadStartAddress
,
2331 IN PINITIAL_TEB InitialTeb
2335 typedef struct _WOW64_CONTEXT
*PWOW64_CONTEXT
;
2340 RtlWow64GetThreadContext(
2341 IN HANDLE ThreadHandle
,
2342 IN OUT PWOW64_CONTEXT ThreadContext
2349 RtlWow64SetThreadContext(
2350 IN HANDLE ThreadHandle
,
2351 IN PWOW64_CONTEXT ThreadContext
2358 RtlIsThreadWithinLoaderCallout(VOID
);
2361 PRTL_USER_PROCESS_PARAMETERS
2363 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2368 RtlReleasePebLock(VOID
);
2377 IN ULONG ArgumentCount
,
2378 IN PULONG Arguments
,
2379 IN BOOLEAN PassContext
,
2380 IN BOOLEAN AlreadySuspended
2386 RtlSetProcessIsCritical(
2387 IN BOOLEAN NewValue
,
2388 OUT PBOOLEAN OldValue OPTIONAL
,
2389 IN BOOLEAN NeedBreaks
2395 RtlSetThreadIsCritical(
2396 IN BOOLEAN NewValue
,
2397 OUT PBOOLEAN OldValue OPTIONAL
,
2398 IN BOOLEAN NeedBreaks
2404 RtlGetCurrentProcessorNumber(
2408 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
2411 // Thread Pool Functions
2416 RtlDeregisterWaitEx(
2417 IN HANDLE hWaitHandle
,
2418 IN HANDLE hCompletionEvent
2425 IN HANDLE hWaitHandle
2432 IN WORKERCALLBACKFUNC Function
,
2433 IN PVOID Context OPTIONAL
,
2440 RtlSetIoCompletionCallback(
2441 IN HANDLE FileHandle
,
2442 IN PIO_APC_ROUTINE Callback
,
2450 IN PHANDLE phNewWaitObject
,
2452 IN WAITORTIMERCALLBACKFUNC Callback
,
2454 IN ULONG ulMilliseconds
,
2459 // Environment/Path Functions
2464 RtlCreateEnvironment(
2472 RtlComputePrivatizedDllName_U(
2473 IN PUNICODE_STRING DllName
,
2474 OUT PUNICODE_STRING RealName
,
2475 OUT PUNICODE_STRING LocalName
2481 RtlDestroyEnvironment(
2482 IN PWSTR Environment
2488 RtlDoesFileExists_U(
2495 RtlDoesFileExists_UstrEx(
2496 IN PCUNICODE_STRING FileName
,
2497 IN BOOLEAN SucceedIfBusy
2503 RtlDetermineDosPathNameType_U(
2510 RtlDetermineDosPathNameType_Ustr(
2511 IN PCUNICODE_STRING Path
2520 IN PCWSTR Extension
,
2521 IN ULONG BufferSize
,
2528 RtlDosSearchPath_Ustr(
2530 IN PUNICODE_STRING PathString
,
2531 IN PUNICODE_STRING FileNameString
,
2532 IN PUNICODE_STRING ExtensionString
,
2533 IN PUNICODE_STRING CallerBuffer
,
2534 IN OUT PUNICODE_STRING DynamicString OPTIONAL
,
2535 OUT PUNICODE_STRING
* FullNameOut OPTIONAL
,
2536 OUT PULONG FilePartSize OPTIONAL
,
2537 OUT PULONG LengthNeeded OPTIONAL
2543 RtlDosPathNameToNtPathName_U(
2544 IN PCWSTR DosPathName
,
2545 OUT PUNICODE_STRING NtPathName
,
2546 OUT PCWSTR
*NtFileNamePart
,
2547 OUT PRTL_RELATIVE_NAME_U DirectoryInfo
2553 RtlDosPathNameToRelativeNtPathName_U(
2555 OUT PUNICODE_STRING NtName
,
2556 OUT PCWSTR
*PartName
,
2557 OUT PRTL_RELATIVE_NAME_U RelativeName
2563 RtlExpandEnvironmentStrings_U(
2565 PUNICODE_STRING Source
,
2566 PUNICODE_STRING Destination
,
2573 RtlGetCurrentDirectory_U(
2574 ULONG MaximumLength
,
2581 RtlGetFullPathName_U(
2585 OUT PWSTR
*ShortName
2588 #if (NTDDI_VERSION >= NTDDI_WIN7)
2592 RtlGetFullPathName_UEx(
2594 IN ULONG BufferLength
,
2596 OUT OPTIONAL PWSTR
*FilePart
,
2597 OUT OPTIONAL RTL_PATH_TYPE
*InputPathType
2603 RtlGetFullPathName_UstrEx(
2604 IN PUNICODE_STRING FileName
,
2605 IN PUNICODE_STRING StaticString
,
2606 IN PUNICODE_STRING DynamicString
,
2607 IN PUNICODE_STRING
*StringUsed
,
2608 IN PSIZE_T FilePartSize
,
2609 OUT PBOOLEAN NameInvalid
,
2610 OUT RTL_PATH_TYPE
* PathType
,
2611 OUT PULONG LengthNeeded
2617 RtlIsDosDeviceName_U(
2624 RtlIsDosDeviceName_Ustr(
2625 IN PCUNICODE_STRING Name
2632 RtlIsNameLegalDOS8Dot3(
2633 IN PCUNICODE_STRING Name
,
2634 IN OUT POEM_STRING OemName OPTIONAL
,
2635 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2641 RtlQueryEnvironmentVariable_U(
2642 IN OPTIONAL PWSTR Environment
,
2643 IN PUNICODE_STRING Name
,
2644 OUT PUNICODE_STRING Value
2649 RtlReleaseRelativeName(
2650 IN PRTL_RELATIVE_NAME_U RelativeName
2656 RtlSetCurrentDirectory_U(
2657 IN PUNICODE_STRING name
2663 RtlSetEnvironmentVariable(
2665 PUNICODE_STRING Name
,
2666 PUNICODE_STRING Value
2670 // Critical Section/Resource Functions
2675 RtlDeleteCriticalSection (
2676 IN PRTL_CRITICAL_SECTION CriticalSection
2682 RtlEnterCriticalSection(
2683 IN PRTL_CRITICAL_SECTION CriticalSection
2689 RtlInitializeCriticalSection(
2690 IN PRTL_CRITICAL_SECTION CriticalSection
2696 RtlInitializeCriticalSectionAndSpinCount(
2697 IN PRTL_CRITICAL_SECTION CriticalSection
,
2704 RtlLeaveCriticalSection(
2705 IN PRTL_CRITICAL_SECTION CriticalSection
2711 RtlTryEnterCriticalSection(
2712 IN PRTL_CRITICAL_SECTION CriticalSection
2718 RtlpUnWaitCriticalSection(
2719 IN PRTL_CRITICAL_SECTION CriticalSection
2725 RtlpWaitForCriticalSection(
2726 IN PRTL_CRITICAL_SECTION CriticalSection
2732 RtlAcquireResourceExclusive(
2733 IN PRTL_RESOURCE Resource
,
2740 RtlAcquireResourceShared(
2741 IN PRTL_RESOURCE Resource
,
2748 RtlConvertExclusiveToShared(
2749 IN PRTL_RESOURCE Resource
2755 RtlConvertSharedToExclusive(
2756 IN PRTL_RESOURCE Resource
2763 IN PRTL_RESOURCE Resource
2770 IN PRTL_RESOURCE Resource
2776 RtlInitializeResource(
2777 IN PRTL_RESOURCE Resource
2784 IN PRTL_RESOURCE Resource
2788 // Compression Functions
2794 IN USHORT CompressionFormatAndEngine
,
2795 IN PUCHAR UncompressedBuffer
,
2796 IN ULONG UncompressedBufferSize
,
2797 OUT PUCHAR CompressedBuffer
,
2798 IN ULONG CompressedBufferSize
,
2799 IN ULONG UncompressedChunkSize
,
2800 OUT PULONG FinalCompressedSize
,
2807 RtlDecompressBuffer(
2808 IN USHORT CompressionFormat
,
2809 OUT PUCHAR UncompressedBuffer
,
2810 IN ULONG UncompressedBufferSize
,
2811 IN PUCHAR CompressedBuffer
,
2812 IN ULONG CompressedBufferSize
,
2813 OUT PULONG FinalUncompressedSize
2819 RtlGetCompressionWorkSpaceSize(
2820 IN USHORT CompressionFormatAndEngine
,
2821 OUT PULONG CompressBufferWorkSpaceSize
,
2822 OUT PULONG CompressFragmentWorkSpaceSize
2826 // Debug Info Functions
2829 PRTL_DEBUG_INFORMATION
2831 RtlCreateQueryDebugBuffer(
2833 IN BOOLEAN EventPair
2839 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer
);
2844 RtlQueryProcessDebugInformation(
2846 IN ULONG DebugInfoClassMask
,
2847 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2857 IN PRTL_BITMAP BitMapHeader
,
2858 IN ULONG StartingIndex
,
2866 IN PRTL_BITMAP BitMapHeader
,
2867 IN ULONG StartingIndex
,
2875 IN PRTL_BITMAP BitMapHeader
,
2876 IN ULONG StartingIndex
,
2877 IN ULONG NumberToClear
2884 IN PRTL_BITMAP BitMapHeader
,
2885 IN ULONG NumberToFind
,
2892 RtlFindClearBitsAndSet(
2893 IN PRTL_BITMAP BitMapHeader
,
2894 IN ULONG NumberToFind
,
2901 RtlFindNextForwardRunClear(
2902 IN PRTL_BITMAP BitMapHeader
,
2904 IN PULONG StartingRunIndex
2910 RtlInitializeBitMap(
2911 IN PRTL_BITMAP BitMapHeader
,
2912 IN PULONG BitMapBuffer
,
2913 IN ULONG SizeOfBitMap
2920 IN PRTL_BITMAP BitMapHeader
2927 PRTL_BITMAP BitMapHeader
,
2935 IN PRTL_BITMAP BitMapHeader
,
2936 IN ULONG StartingIndex
,
2937 IN ULONG NumberToSet
2944 PRTL_BITMAP BitMapHeader
2951 PRTL_BITMAP BitMapHeader
,
2964 WAITORTIMERCALLBACKFUNC Callback
,
2974 RtlCreateTimerQueue(PHANDLE TimerQueue
);
2982 HANDLE CompletionEvent
2998 RtlDeleteTimerQueueEx(
3000 HANDLE CompletionEvent
3006 RtlDeleteTimerQueue(HANDLE TimerQueue
);
3013 InterlockedPushListSList(
3014 IN PSLIST_HEADER ListHead
,
3015 IN PSLIST_ENTRY List
,
3016 IN PSLIST_ENTRY ListEnd
,
3021 // Range List functions
3026 RtlInitializeRangeList(
3027 IN OUT PRTL_RANGE_LIST RangeList
3034 IN PRTL_RANGE_LIST RangeList
3041 IN OUT PRTL_RANGE_LIST RangeList
,
3044 IN UCHAR Attributes
,
3046 IN PVOID UserData OPTIONAL
,
3047 IN PVOID Owner OPTIONAL
3064 IN ULONG ComponentId
,
3076 IN ULONG MaximumResponseLength
3087 DbgLoadImageSymbols(
3090 IN ULONG_PTR ProcessId
3095 DbgUnLoadImageSymbols(
3098 IN ULONG_PTR ProcessId
3109 // Generic Table Functions
3111 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
3115 RtlInsertElementGenericTable(
3116 IN PRTL_GENERIC_TABLE Table
,
3118 IN ULONG BufferSize
,
3119 OUT PBOOLEAN NewElement OPTIONAL
3125 RtlInsertElementGenericTableFull(
3126 IN PRTL_GENERIC_TABLE Table
,
3128 IN ULONG BufferSize
,
3129 OUT PBOOLEAN NewElement OPTIONAL
,
3130 IN PVOID NodeOrParent
,
3131 IN TABLE_SEARCH_RESULT SearchResult
3137 RtlIsGenericTableEmpty(
3138 IN PRTL_GENERIC_TABLE Table
3144 RtlLookupElementGenericTableFull(
3145 IN PRTL_GENERIC_TABLE Table
,
3147 OUT PVOID
*NodeOrParent
,
3148 OUT TABLE_SEARCH_RESULT
*SearchResult
3153 // Handle Table Functions
3156 PRTL_HANDLE_TABLE_ENTRY
3159 IN PRTL_HANDLE_TABLE HandleTable
,
3166 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable
);
3172 IN PRTL_HANDLE_TABLE HandleTable
,
3173 IN PRTL_HANDLE_TABLE_ENTRY Handle
3179 RtlInitializeHandleTable(
3181 IN ULONG HandleSize
,
3182 IN PRTL_HANDLE_TABLE HandleTable
3189 IN PRTL_HANDLE_TABLE HandleTable
,
3190 IN PRTL_HANDLE_TABLE_ENTRY Handle
3196 RtlIsValidIndexHandle(
3197 IN PRTL_HANDLE_TABLE HandleTable
,
3199 OUT PRTL_HANDLE_TABLE_ENTRY
*Handle
3209 IN PVOID BaseAddress
,
3213 OUT PMESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
3219 RtlGetNtGlobalFlags(VOID
);
3224 RtlImageDirectoryEntryToData(
3226 BOOLEAN MappedAsImage
,
3235 PIMAGE_NT_HEADERS NtHeader
,
3238 PIMAGE_SECTION_HEADER
*SectionHeader
3244 RtlImageNtHeader(IN PVOID BaseAddress
);
3251 IN PVOID BaseAddress
,
3253 IN PIMAGE_NT_HEADERS
*NtHeader
3257 PIMAGE_SECTION_HEADER
3259 RtlImageRvaToSection(
3260 PIMAGE_NT_HEADERS NtHeader
,
3268 LdrRelocateImageWithBias(
3269 IN PVOID NewAddress
,
3270 IN LONGLONG AdditionalBias
,
3278 // Activation Context Functions
3280 #ifdef NTOS_MODE_USER
3284 RtlActivateActivationContextEx(
3288 IN PULONG_PTR Cookie
3294 RtlActivateActivationContext(
3297 OUT PULONG_PTR Cookie
3303 RtlAddRefActivationContext(
3308 PRTL_ACTIVATION_CONTEXT_STACK_FRAME
3310 RtlActivateActivationContextUnsafeFast(
3311 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
,
3318 RtlAllocateActivationContextStack(
3325 RtlCreateActivationContext(
3327 IN OUT PVOID ReturnedData
3333 RtlGetActiveActivationContext(
3340 RtlReleaseActivationContext(
3347 RtlDeactivateActivationContext(
3355 RtlFreeThreadActivationContextStack(void);
3358 PRTL_ACTIVATION_CONTEXT_STACK_FRAME
3360 RtlDeactivateActivationContextUnsafeFast(
3361 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
3367 RtlDosApplyFileIsolationRedirection_Ustr(
3369 IN PUNICODE_STRING OriginalName
,
3370 IN PUNICODE_STRING Extension
,
3371 IN OUT PUNICODE_STRING StaticString
,
3372 IN OUT PUNICODE_STRING DynamicString
,
3373 IN OUT PUNICODE_STRING
*NewName
,
3375 IN PSIZE_T FileNameSize
,
3376 IN PSIZE_T RequiredLength
3382 RtlFindActivationContextSectionString(
3384 IN
const GUID
*ExtensionGuid
,
3385 IN ULONG SectionType
,
3386 IN PUNICODE_STRING SectionName
,
3387 IN OUT PVOID ReturnedData
3393 RtlQueryInformationActivationContext(
3396 PVOID pvSubInstance
,
3399 SIZE_T cbBuffer OPTIONAL
,
3400 SIZE_T
*pcbWrittenOrRequired OPTIONAL
3406 RtlZombifyActivationContext(
3416 RtlWow64EnableFsRedirection(
3417 IN BOOLEAN Wow64FsEnableRedirection
3423 RtlWow64EnableFsRedirectionEx(
3424 IN PVOID Wow64FsEnableRedirection
,
3425 OUT PVOID
*OldFsRedirectionLevel
3431 // Registry Functions
3436 RtlCheckRegistryKey(
3444 RtlCreateRegistryKey(
3445 IN ULONG RelativeTo
,
3452 RtlFormatCurrentUserKeyPath(
3453 IN OUT PUNICODE_STRING KeyPath
3460 IN ACCESS_MASK DesiredAccess
,
3461 OUT PHANDLE KeyHandle
3467 RtlQueryRegistryValues(
3468 IN ULONG RelativeTo
,
3470 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
3472 IN PVOID Environment
3478 RtlWriteRegistryValue(
3487 #ifdef NTOS_MODE_USER
3492 OUT HANDLE KeyHandle
,
3493 IN ACCESS_MASK DesiredAccess
,
3494 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3495 IN ULONG TitleIndex
,
3496 IN PUNICODE_STRING Class
,
3497 OUT PULONG Disposition
3503 RtlpNtEnumerateSubKey(
3504 IN HANDLE KeyHandle
,
3505 OUT PUNICODE_STRING SubKeyName
,
3513 RtlpNtMakeTemporaryKey(
3521 OUT HANDLE KeyHandle
,
3522 IN ACCESS_MASK DesiredAccess
,
3523 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3530 RtlpNtQueryValueKey(
3531 IN HANDLE KeyHandle
,
3532 OUT PULONG Type OPTIONAL
,
3533 OUT PVOID Data OPTIONAL
,
3534 IN OUT PULONG DataLength OPTIONAL
,
3542 IN HANDLE KeyHandle
,
3555 RtlGetDefaultCodePage(
3556 OUT PUSHORT AnsiCodePage
,
3557 OUT PUSHORT OemCodePage
3564 IN PUSHORT AnsiTableBase
,
3565 IN PUSHORT OemTableBase
,
3566 IN PUSHORT CaseTableBase
,
3567 OUT PNLSTABLEINFO NlsTable
3573 RtlInitCodePageTable(
3574 IN PUSHORT TableBase
,
3575 OUT PCPTABLEINFO CodePageTable
3581 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable
);
3583 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
3586 // Misc conversion functions
3591 RtlConvertLongToLargeInteger(
3595 LARGE_INTEGER Result
;
3597 Result
.QuadPart
= SignedInteger
;
3604 RtlEnlargedIntegerMultiply(
3609 LARGE_INTEGER Product
;
3611 Product
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3618 RtlEnlargedUnsignedDivide(
3619 IN ULARGE_INTEGER Dividend
,
3621 IN PULONG Remainder OPTIONAL
3626 Quotient
= (ULONG
)(Dividend
.QuadPart
/ Divisor
);
3628 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
3637 RtlEnlargedUnsignedMultiply(
3642 LARGE_INTEGER Product
;
3644 Product
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3648 #if defined(_AMD64_) || defined(_IA64_)
3652 RtlExtendedLargeIntegerDivide(
3653 IN LARGE_INTEGER Dividend
,
3655 OUT PULONG Remainder OPTIONAL
)
3658 ret
.QuadPart
= (ULONG64
)Dividend
.QuadPart
/ Divisor
;
3660 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
3668 RtlExtendedLargeIntegerDivide(
3669 IN LARGE_INTEGER Dividend
,
3671 OUT PULONG Remainder OPTIONAL
3674 #endif /* defined(_AMD64_) || defined(_IA64_) */
3697 IN ULONG InitialCrc
,
3703 // Network Functions
3708 RtlIpv4StringToAddressW(
3711 OUT LPWSTR
*Terminator
,
3712 OUT
struct in_addr
*Addr
3718 RtlIpv6StringToAddressA(
3720 OUT PCHAR
*Terminator
,
3721 OUT
struct in6_addr
*Addr
3727 RtlIpv6StringToAddressW(
3729 OUT PCHAR
*Terminator
,
3730 OUT
struct in6_addr
*Addr
3736 RtlIpv6StringToAddressExA(
3737 IN PCHAR AddressString
,
3738 IN
struct in6_addr
*Address
,
3746 RtlIpv6StringToAddressExW(
3747 IN PWCHAR AddressName
,
3748 IN
struct in6_addr
*Address
,
3760 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3765 RtlSecondsSince1970ToTime(
3766 IN ULONG SecondsSince1970
,
3767 OUT PLARGE_INTEGER Time
3773 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3778 RtlTimeFieldsToTime(
3779 PTIME_FIELDS TimeFields
,
3786 RtlTimeToSecondsSince1970(
3787 PLARGE_INTEGER Time
,
3788 OUT PULONG SecondsSince1970
3794 RtlTimeToTimeFields(
3795 PLARGE_INTEGER Time
,
3796 PTIME_FIELDS TimeFields
3802 RtlSystemTimeToLocalTime(
3803 IN PLARGE_INTEGER SystemTime
,
3804 OUT PLARGE_INTEGER LocalTime
3808 // Version Functions
3813 RtlVerifyVersionInfo(
3814 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3816 IN ULONGLONG ConditionMask
3822 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3827 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType
);
3830 // Secure Memory Functions
3832 #ifdef NTOS_MODE_USER
3836 RtlRegisterSecureMemoryCacheCallback(
3837 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback
);
3842 RtlFlushSecureMemoryCache(
3843 IN PVOID MemoryCache
,
3844 IN OPTIONAL SIZE_T MemoryLength
3849 // Boot Status Data Functions
3851 #ifdef NTOS_MODE_USER
3855 RtlCreateBootStatusDataFile(
3862 RtlGetSetBootStatusData(
3863 IN HANDLE FileHandle
,
3864 IN BOOLEAN WriteMode
,
3865 IN RTL_BSD_ITEM_TYPE DataClass
,
3867 IN ULONG BufferSize
,
3868 OUT PULONG ReturnLength OPTIONAL
3874 RtlLockBootStatusData(
3875 OUT PHANDLE FileHandle
3881 RtlUnlockBootStatusData(
3882 IN HANDLE FileHandle
3886 #ifdef NTOS_MODE_USER
3891 IN PUNICODE_STRING GuidString
,
3897 RtlComputeImportTableHash(
3900 IN ULONG ImportTableHashRevision