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 RtlSetThreadPoolStartFunc(
2417 IN PRTL_START_POOL_THREAD StartPoolThread
,
2418 IN PRTL_EXIT_POOL_THREAD ExitPoolThread
2424 RtlDeregisterWaitEx(
2425 IN HANDLE hWaitHandle
,
2426 IN HANDLE hCompletionEvent
2433 IN HANDLE hWaitHandle
2440 IN WORKERCALLBACKFUNC Function
,
2441 IN PVOID Context OPTIONAL
,
2448 RtlSetIoCompletionCallback(
2449 IN HANDLE FileHandle
,
2450 IN PIO_APC_ROUTINE Callback
,
2458 IN PHANDLE phNewWaitObject
,
2460 IN WAITORTIMERCALLBACKFUNC Callback
,
2462 IN ULONG ulMilliseconds
,
2467 // Environment/Path Functions
2472 RtlCreateEnvironment(
2480 RtlComputePrivatizedDllName_U(
2481 IN PUNICODE_STRING DllName
,
2482 OUT PUNICODE_STRING RealName
,
2483 OUT PUNICODE_STRING LocalName
2489 RtlDestroyEnvironment(
2490 IN PWSTR Environment
2496 RtlDoesFileExists_U(
2503 RtlDetermineDosPathNameType_U(
2513 IN PCWSTR Extension
,
2514 IN ULONG BufferSize
,
2522 RtlDosSearchPath_Ustr(
2524 IN PUNICODE_STRING PathString
,
2525 IN PUNICODE_STRING FileNameString
,
2526 IN PUNICODE_STRING ExtensionString
,
2527 IN PUNICODE_STRING CallerBuffer
,
2528 IN OUT PUNICODE_STRING DynamicString OPTIONAL
,
2529 OUT PUNICODE_STRING
* FullNameOut OPTIONAL
,
2530 OUT PSIZE_T FilePartSize OPTIONAL
,
2531 OUT PSIZE_T LengthNeeded OPTIONAL
2537 RtlDosPathNameToNtPathName_U(
2538 IN PCWSTR DosPathName
,
2539 OUT PUNICODE_STRING NtPathName
,
2540 OUT PCWSTR
*NtFileNamePart
,
2541 OUT PRTL_RELATIVE_NAME_U DirectoryInfo
2547 RtlDosPathNameToRelativeNtPathName_U(
2549 OUT PUNICODE_STRING NtName
,
2550 OUT PCWSTR
*PartName
,
2551 OUT PRTL_RELATIVE_NAME_U RelativeName
2557 RtlExpandEnvironmentStrings_U(
2559 PUNICODE_STRING Source
,
2560 PUNICODE_STRING Destination
,
2567 RtlGetCurrentDirectory_U(
2568 ULONG MaximumLength
,
2575 RtlGetFullPathName_U(
2579 OUT PWSTR
*ShortName
2582 #if (NTDDI_VERSION >= NTDDI_WIN7)
2586 RtlGetFullPathName_UEx(
2588 IN ULONG BufferLength
,
2590 OUT OPTIONAL PWSTR
*FilePart
,
2591 OUT OPTIONAL RTL_PATH_TYPE
*InputPathType
2597 RtlGetFullPathName_UstrEx(
2598 IN PUNICODE_STRING FileName
,
2599 IN PUNICODE_STRING StaticString
,
2600 IN PUNICODE_STRING DynamicString
,
2601 IN PUNICODE_STRING
*StringUsed
,
2602 IN PSIZE_T FilePartSize
,
2603 OUT PBOOLEAN NameInvalid
,
2604 OUT RTL_PATH_TYPE
* PathType
,
2605 OUT PSIZE_T LengthNeeded
2611 RtlGetLongestNtPathLength(
2618 RtlIsDosDeviceName_U(
2625 RtlIsDosDeviceName_Ustr(
2626 IN PCUNICODE_STRING Name
2633 RtlIsNameLegalDOS8Dot3(
2634 IN PCUNICODE_STRING Name
,
2635 IN OUT POEM_STRING OemName OPTIONAL
,
2636 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2642 RtlQueryEnvironmentVariable_U(
2643 IN OPTIONAL PWSTR Environment
,
2644 IN PUNICODE_STRING Name
,
2645 OUT PUNICODE_STRING Value
2650 RtlReleaseRelativeName(
2651 IN PRTL_RELATIVE_NAME_U RelativeName
2657 RtlSetCurrentDirectory_U(
2658 IN PUNICODE_STRING name
2664 RtlSetEnvironmentVariable(
2666 PUNICODE_STRING Name
,
2667 PUNICODE_STRING Value
2671 // Critical Section/Resource Functions
2676 RtlDeleteCriticalSection (
2677 IN PRTL_CRITICAL_SECTION CriticalSection
2683 RtlEnterCriticalSection(
2684 IN PRTL_CRITICAL_SECTION CriticalSection
2690 RtlInitializeCriticalSection(
2691 IN PRTL_CRITICAL_SECTION CriticalSection
2697 RtlInitializeCriticalSectionAndSpinCount(
2698 IN PRTL_CRITICAL_SECTION CriticalSection
,
2705 RtlLeaveCriticalSection(
2706 IN PRTL_CRITICAL_SECTION CriticalSection
2712 RtlTryEnterCriticalSection(
2713 IN PRTL_CRITICAL_SECTION CriticalSection
2719 RtlpUnWaitCriticalSection(
2720 IN PRTL_CRITICAL_SECTION CriticalSection
2726 RtlpWaitForCriticalSection(
2727 IN PRTL_CRITICAL_SECTION CriticalSection
2733 RtlAcquireResourceExclusive(
2734 IN PRTL_RESOURCE Resource
,
2741 RtlAcquireResourceShared(
2742 IN PRTL_RESOURCE Resource
,
2749 RtlConvertExclusiveToShared(
2750 IN PRTL_RESOURCE Resource
2756 RtlConvertSharedToExclusive(
2757 IN PRTL_RESOURCE Resource
2764 IN PRTL_RESOURCE Resource
2771 IN PRTL_RESOURCE Resource
2777 RtlInitializeResource(
2778 IN PRTL_RESOURCE Resource
2785 IN PRTL_RESOURCE Resource
2789 // Compression Functions
2795 IN USHORT CompressionFormatAndEngine
,
2796 IN PUCHAR UncompressedBuffer
,
2797 IN ULONG UncompressedBufferSize
,
2798 OUT PUCHAR CompressedBuffer
,
2799 IN ULONG CompressedBufferSize
,
2800 IN ULONG UncompressedChunkSize
,
2801 OUT PULONG FinalCompressedSize
,
2808 RtlDecompressBuffer(
2809 IN USHORT CompressionFormat
,
2810 OUT PUCHAR UncompressedBuffer
,
2811 IN ULONG UncompressedBufferSize
,
2812 IN PUCHAR CompressedBuffer
,
2813 IN ULONG CompressedBufferSize
,
2814 OUT PULONG FinalUncompressedSize
2820 RtlGetCompressionWorkSpaceSize(
2821 IN USHORT CompressionFormatAndEngine
,
2822 OUT PULONG CompressBufferWorkSpaceSize
,
2823 OUT PULONG CompressFragmentWorkSpaceSize
2827 // Debug Info Functions
2830 PRTL_DEBUG_INFORMATION
2832 RtlCreateQueryDebugBuffer(
2834 IN BOOLEAN EventPair
2840 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer
);
2845 RtlQueryProcessDebugInformation(
2847 IN ULONG DebugInfoClassMask
,
2848 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2858 IN PRTL_BITMAP BitMapHeader
,
2859 IN ULONG StartingIndex
,
2867 IN PRTL_BITMAP BitMapHeader
,
2868 IN ULONG StartingIndex
,
2876 IN PRTL_BITMAP BitMapHeader
,
2877 IN ULONG StartingIndex
,
2878 IN ULONG NumberToClear
2885 IN PRTL_BITMAP BitMapHeader
,
2886 IN ULONG NumberToFind
,
2893 RtlFindClearBitsAndSet(
2894 IN PRTL_BITMAP BitMapHeader
,
2895 IN ULONG NumberToFind
,
2902 RtlFindNextForwardRunClear(
2903 IN PRTL_BITMAP BitMapHeader
,
2905 IN PULONG StartingRunIndex
2911 RtlInitializeBitMap(
2912 IN PRTL_BITMAP BitMapHeader
,
2913 IN PULONG BitMapBuffer
,
2914 IN ULONG SizeOfBitMap
2921 IN PRTL_BITMAP BitMapHeader
2928 PRTL_BITMAP BitMapHeader
,
2936 IN PRTL_BITMAP BitMapHeader
,
2937 IN ULONG StartingIndex
,
2938 IN ULONG NumberToSet
2945 PRTL_BITMAP BitMapHeader
2952 PRTL_BITMAP BitMapHeader
,
2965 WAITORTIMERCALLBACKFUNC Callback
,
2975 RtlCreateTimerQueue(PHANDLE TimerQueue
);
2983 HANDLE CompletionEvent
2999 RtlDeleteTimerQueueEx(
3001 HANDLE CompletionEvent
3007 RtlDeleteTimerQueue(HANDLE TimerQueue
);
3014 InterlockedPushListSList(
3015 IN PSLIST_HEADER ListHead
,
3016 IN PSLIST_ENTRY List
,
3017 IN PSLIST_ENTRY ListEnd
,
3022 // Range List functions
3027 RtlInitializeRangeList(
3028 IN OUT PRTL_RANGE_LIST RangeList
3035 IN PRTL_RANGE_LIST RangeList
3042 IN OUT PRTL_RANGE_LIST RangeList
,
3045 IN UCHAR Attributes
,
3047 IN PVOID UserData OPTIONAL
,
3048 IN PVOID Owner OPTIONAL
3065 IN ULONG ComponentId
,
3077 IN ULONG MaximumResponseLength
3088 DbgLoadImageSymbols(
3091 IN ULONG_PTR ProcessId
3096 DbgUnLoadImageSymbols(
3099 IN ULONG_PTR ProcessId
3110 // Generic Table Functions
3112 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
3116 RtlInsertElementGenericTable(
3117 IN PRTL_GENERIC_TABLE Table
,
3119 IN ULONG BufferSize
,
3120 OUT PBOOLEAN NewElement OPTIONAL
3126 RtlInsertElementGenericTableFull(
3127 IN PRTL_GENERIC_TABLE Table
,
3129 IN ULONG BufferSize
,
3130 OUT PBOOLEAN NewElement OPTIONAL
,
3131 IN PVOID NodeOrParent
,
3132 IN TABLE_SEARCH_RESULT SearchResult
3138 RtlIsGenericTableEmpty(
3139 IN PRTL_GENERIC_TABLE Table
3145 RtlLookupElementGenericTableFull(
3146 IN PRTL_GENERIC_TABLE Table
,
3148 OUT PVOID
*NodeOrParent
,
3149 OUT TABLE_SEARCH_RESULT
*SearchResult
3154 // Handle Table Functions
3157 PRTL_HANDLE_TABLE_ENTRY
3160 IN PRTL_HANDLE_TABLE HandleTable
,
3167 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable
);
3173 IN PRTL_HANDLE_TABLE HandleTable
,
3174 IN PRTL_HANDLE_TABLE_ENTRY Handle
3180 RtlInitializeHandleTable(
3182 IN ULONG HandleSize
,
3183 IN PRTL_HANDLE_TABLE HandleTable
3190 IN PRTL_HANDLE_TABLE HandleTable
,
3191 IN PRTL_HANDLE_TABLE_ENTRY Handle
3197 RtlIsValidIndexHandle(
3198 IN PRTL_HANDLE_TABLE HandleTable
,
3200 OUT PRTL_HANDLE_TABLE_ENTRY
*Handle
3210 IN PVOID BaseAddress
,
3214 OUT PMESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
3220 RtlGetNtGlobalFlags(VOID
);
3225 RtlImageDirectoryEntryToData(
3227 BOOLEAN MappedAsImage
,
3236 PIMAGE_NT_HEADERS NtHeader
,
3239 PIMAGE_SECTION_HEADER
*SectionHeader
3245 RtlImageNtHeader(IN PVOID BaseAddress
);
3252 IN PVOID BaseAddress
,
3254 IN PIMAGE_NT_HEADERS
*NtHeader
3258 PIMAGE_SECTION_HEADER
3260 RtlImageRvaToSection(
3261 PIMAGE_NT_HEADERS NtHeader
,
3269 LdrRelocateImageWithBias(
3270 IN PVOID NewAddress
,
3271 IN LONGLONG AdditionalBias
,
3279 // Activation Context Functions
3281 #ifdef NTOS_MODE_USER
3285 RtlActivateActivationContextEx(
3289 IN PULONG_PTR Cookie
3295 RtlActivateActivationContext(
3298 OUT PULONG_PTR Cookie
3304 RtlAddRefActivationContext(
3309 PRTL_ACTIVATION_CONTEXT_STACK_FRAME
3311 RtlActivateActivationContextUnsafeFast(
3312 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
,
3319 RtlAllocateActivationContextStack(
3326 RtlCreateActivationContext(
3328 IN OUT PVOID ReturnedData
3334 RtlGetActiveActivationContext(
3341 RtlReleaseActivationContext(
3348 RtlDeactivateActivationContext(
3356 RtlFreeThreadActivationContextStack(void);
3359 PRTL_ACTIVATION_CONTEXT_STACK_FRAME
3361 RtlDeactivateActivationContextUnsafeFast(
3362 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
3368 RtlDosApplyFileIsolationRedirection_Ustr(
3370 IN PUNICODE_STRING OriginalName
,
3371 IN PUNICODE_STRING Extension
,
3372 IN OUT PUNICODE_STRING StaticString
,
3373 IN OUT PUNICODE_STRING DynamicString
,
3374 IN OUT PUNICODE_STRING
*NewName
,
3376 IN PSIZE_T FileNameSize
,
3377 IN PSIZE_T RequiredLength
3383 RtlFindActivationContextSectionString(
3385 IN
const GUID
*ExtensionGuid
,
3386 IN ULONG SectionType
,
3387 IN PUNICODE_STRING SectionName
,
3388 IN OUT PVOID ReturnedData
3394 RtlQueryInformationActivationContext(
3397 PVOID pvSubInstance
,
3400 SIZE_T cbBuffer OPTIONAL
,
3401 SIZE_T
*pcbWrittenOrRequired OPTIONAL
3407 RtlZombifyActivationContext(
3417 RtlWow64EnableFsRedirection(
3418 IN BOOLEAN Wow64FsEnableRedirection
3424 RtlWow64EnableFsRedirectionEx(
3425 IN PVOID Wow64FsEnableRedirection
,
3426 OUT PVOID
*OldFsRedirectionLevel
3432 // Registry Functions
3437 RtlCheckRegistryKey(
3445 RtlCreateRegistryKey(
3446 IN ULONG RelativeTo
,
3453 RtlFormatCurrentUserKeyPath(
3454 IN OUT PUNICODE_STRING KeyPath
3461 IN ACCESS_MASK DesiredAccess
,
3462 OUT PHANDLE KeyHandle
3468 RtlQueryRegistryValues(
3469 IN ULONG RelativeTo
,
3471 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
3473 IN PVOID Environment
3479 RtlWriteRegistryValue(
3488 #ifdef NTOS_MODE_USER
3493 OUT HANDLE KeyHandle
,
3494 IN ACCESS_MASK DesiredAccess
,
3495 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3496 IN ULONG TitleIndex
,
3497 IN PUNICODE_STRING Class
,
3498 OUT PULONG Disposition
3504 RtlpNtEnumerateSubKey(
3505 IN HANDLE KeyHandle
,
3506 OUT PUNICODE_STRING SubKeyName
,
3514 RtlpNtMakeTemporaryKey(
3522 OUT HANDLE KeyHandle
,
3523 IN ACCESS_MASK DesiredAccess
,
3524 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3531 RtlpNtQueryValueKey(
3532 IN HANDLE KeyHandle
,
3533 OUT PULONG Type OPTIONAL
,
3534 OUT PVOID Data OPTIONAL
,
3535 IN OUT PULONG DataLength OPTIONAL
,
3543 IN HANDLE KeyHandle
,
3556 RtlGetDefaultCodePage(
3557 OUT PUSHORT AnsiCodePage
,
3558 OUT PUSHORT OemCodePage
3565 IN PUSHORT AnsiTableBase
,
3566 IN PUSHORT OemTableBase
,
3567 IN PUSHORT CaseTableBase
,
3568 OUT PNLSTABLEINFO NlsTable
3574 RtlInitCodePageTable(
3575 IN PUSHORT TableBase
,
3576 OUT PCPTABLEINFO CodePageTable
3582 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable
);
3584 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
3587 // Misc conversion functions
3592 RtlConvertLongToLargeInteger(
3596 LARGE_INTEGER Result
;
3598 Result
.QuadPart
= SignedInteger
;
3605 RtlEnlargedIntegerMultiply(
3610 LARGE_INTEGER Product
;
3612 Product
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3619 RtlEnlargedUnsignedDivide(
3620 IN ULARGE_INTEGER Dividend
,
3622 IN PULONG Remainder OPTIONAL
3627 Quotient
= (ULONG
)(Dividend
.QuadPart
/ Divisor
);
3629 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
3638 RtlEnlargedUnsignedMultiply(
3643 LARGE_INTEGER Product
;
3645 Product
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3649 #if defined(_AMD64_) || defined(_IA64_)
3653 RtlExtendedLargeIntegerDivide(
3654 IN LARGE_INTEGER Dividend
,
3656 OUT PULONG Remainder OPTIONAL
)
3659 ret
.QuadPart
= (ULONG64
)Dividend
.QuadPart
/ Divisor
;
3661 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
3669 RtlExtendedLargeIntegerDivide(
3670 IN LARGE_INTEGER Dividend
,
3672 OUT PULONG Remainder OPTIONAL
3675 #endif /* defined(_AMD64_) || defined(_IA64_) */
3698 IN ULONG InitialCrc
,
3704 // Network Functions
3709 RtlIpv4StringToAddressW(
3712 OUT LPWSTR
*Terminator
,
3713 OUT
struct in_addr
*Addr
3719 RtlIpv6StringToAddressA(
3721 OUT PCHAR
*Terminator
,
3722 OUT
struct in6_addr
*Addr
3728 RtlIpv6StringToAddressW(
3730 OUT PCHAR
*Terminator
,
3731 OUT
struct in6_addr
*Addr
3737 RtlIpv6StringToAddressExA(
3738 IN PCHAR AddressString
,
3739 IN
struct in6_addr
*Address
,
3747 RtlIpv6StringToAddressExW(
3748 IN PWCHAR AddressName
,
3749 IN
struct in6_addr
*Address
,
3761 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3766 RtlSecondsSince1970ToTime(
3767 IN ULONG SecondsSince1970
,
3768 OUT PLARGE_INTEGER Time
3774 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3779 RtlTimeFieldsToTime(
3780 PTIME_FIELDS TimeFields
,
3787 RtlTimeToSecondsSince1970(
3788 PLARGE_INTEGER Time
,
3789 OUT PULONG SecondsSince1970
3795 RtlTimeToTimeFields(
3796 PLARGE_INTEGER Time
,
3797 PTIME_FIELDS TimeFields
3803 RtlSystemTimeToLocalTime(
3804 IN PLARGE_INTEGER SystemTime
,
3805 OUT PLARGE_INTEGER LocalTime
3809 // Version Functions
3814 RtlVerifyVersionInfo(
3815 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3817 IN ULONGLONG ConditionMask
3823 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3828 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType
);
3831 // Secure Memory Functions
3833 #ifdef NTOS_MODE_USER
3837 RtlRegisterSecureMemoryCacheCallback(
3838 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback
);
3843 RtlFlushSecureMemoryCache(
3844 IN PVOID MemoryCache
,
3845 IN OPTIONAL SIZE_T MemoryLength
3850 // Boot Status Data Functions
3852 #ifdef NTOS_MODE_USER
3856 RtlCreateBootStatusDataFile(
3863 RtlGetSetBootStatusData(
3864 IN HANDLE FileHandle
,
3865 IN BOOLEAN WriteMode
,
3866 IN RTL_BSD_ITEM_TYPE DataClass
,
3868 IN ULONG BufferSize
,
3869 OUT PULONG ReturnLength OPTIONAL
3875 RtlLockBootStatusData(
3876 OUT PHANDLE FileHandle
3882 RtlUnlockBootStatusData(
3883 IN HANDLE FileHandle
3887 #ifdef NTOS_MODE_USER
3892 IN PUNICODE_STRING GuidString
,
3898 RtlComputeImportTableHash(
3901 IN ULONG ImportTableHashRevision