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 RtlDoesFileExists_UstrEx(
2504 IN PCUNICODE_STRING FileName
,
2505 IN BOOLEAN SucceedIfBusy
2511 RtlDetermineDosPathNameType_U(
2518 RtlDetermineDosPathNameType_Ustr(
2519 IN PCUNICODE_STRING Path
2528 IN PCWSTR Extension
,
2529 IN ULONG BufferSize
,
2536 RtlDosSearchPath_Ustr(
2538 IN PUNICODE_STRING PathString
,
2539 IN PUNICODE_STRING FileNameString
,
2540 IN PUNICODE_STRING ExtensionString
,
2541 IN PUNICODE_STRING CallerBuffer
,
2542 IN OUT PUNICODE_STRING DynamicString OPTIONAL
,
2543 OUT PUNICODE_STRING
* FullNameOut OPTIONAL
,
2544 OUT PSIZE_T FilePartSize OPTIONAL
,
2545 OUT PSIZE_T LengthNeeded OPTIONAL
2551 RtlDosPathNameToNtPathName_U(
2552 IN PCWSTR DosPathName
,
2553 OUT PUNICODE_STRING NtPathName
,
2554 OUT PCWSTR
*NtFileNamePart
,
2555 OUT PRTL_RELATIVE_NAME_U DirectoryInfo
2561 RtlDosPathNameToRelativeNtPathName_U(
2563 OUT PUNICODE_STRING NtName
,
2564 OUT PCWSTR
*PartName
,
2565 OUT PRTL_RELATIVE_NAME_U RelativeName
2571 RtlExpandEnvironmentStrings_U(
2573 PUNICODE_STRING Source
,
2574 PUNICODE_STRING Destination
,
2581 RtlGetCurrentDirectory_U(
2582 ULONG MaximumLength
,
2589 RtlGetFullPathName_U(
2593 OUT PWSTR
*ShortName
2596 #if (NTDDI_VERSION >= NTDDI_WIN7)
2600 RtlGetFullPathName_UEx(
2602 IN ULONG BufferLength
,
2604 OUT OPTIONAL PWSTR
*FilePart
,
2605 OUT OPTIONAL RTL_PATH_TYPE
*InputPathType
2611 RtlGetFullPathName_UstrEx(
2612 IN PUNICODE_STRING FileName
,
2613 IN PUNICODE_STRING StaticString
,
2614 IN PUNICODE_STRING DynamicString
,
2615 IN PUNICODE_STRING
*StringUsed
,
2616 IN PSIZE_T FilePartSize
,
2617 OUT PBOOLEAN NameInvalid
,
2618 OUT RTL_PATH_TYPE
* PathType
,
2619 OUT PSIZE_T LengthNeeded
2625 RtlIsDosDeviceName_U(
2632 RtlIsDosDeviceName_Ustr(
2633 IN PCUNICODE_STRING Name
2640 RtlIsNameLegalDOS8Dot3(
2641 IN PCUNICODE_STRING Name
,
2642 IN OUT POEM_STRING OemName OPTIONAL
,
2643 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2649 RtlQueryEnvironmentVariable_U(
2650 IN OPTIONAL PWSTR Environment
,
2651 IN PUNICODE_STRING Name
,
2652 OUT PUNICODE_STRING Value
2657 RtlReleaseRelativeName(
2658 IN PRTL_RELATIVE_NAME_U RelativeName
2664 RtlSetCurrentDirectory_U(
2665 IN PUNICODE_STRING name
2671 RtlSetEnvironmentVariable(
2673 PUNICODE_STRING Name
,
2674 PUNICODE_STRING Value
2678 // Critical Section/Resource Functions
2683 RtlDeleteCriticalSection (
2684 IN PRTL_CRITICAL_SECTION CriticalSection
2690 RtlEnterCriticalSection(
2691 IN PRTL_CRITICAL_SECTION CriticalSection
2697 RtlInitializeCriticalSection(
2698 IN PRTL_CRITICAL_SECTION CriticalSection
2704 RtlInitializeCriticalSectionAndSpinCount(
2705 IN PRTL_CRITICAL_SECTION CriticalSection
,
2712 RtlLeaveCriticalSection(
2713 IN PRTL_CRITICAL_SECTION CriticalSection
2719 RtlTryEnterCriticalSection(
2720 IN PRTL_CRITICAL_SECTION CriticalSection
2726 RtlpUnWaitCriticalSection(
2727 IN PRTL_CRITICAL_SECTION CriticalSection
2733 RtlpWaitForCriticalSection(
2734 IN PRTL_CRITICAL_SECTION CriticalSection
2740 RtlAcquireResourceExclusive(
2741 IN PRTL_RESOURCE Resource
,
2748 RtlAcquireResourceShared(
2749 IN PRTL_RESOURCE Resource
,
2756 RtlConvertExclusiveToShared(
2757 IN PRTL_RESOURCE Resource
2763 RtlConvertSharedToExclusive(
2764 IN PRTL_RESOURCE Resource
2771 IN PRTL_RESOURCE Resource
2778 IN PRTL_RESOURCE Resource
2784 RtlInitializeResource(
2785 IN PRTL_RESOURCE Resource
2792 IN PRTL_RESOURCE Resource
2796 // Compression Functions
2802 IN USHORT CompressionFormatAndEngine
,
2803 IN PUCHAR UncompressedBuffer
,
2804 IN ULONG UncompressedBufferSize
,
2805 OUT PUCHAR CompressedBuffer
,
2806 IN ULONG CompressedBufferSize
,
2807 IN ULONG UncompressedChunkSize
,
2808 OUT PULONG FinalCompressedSize
,
2815 RtlDecompressBuffer(
2816 IN USHORT CompressionFormat
,
2817 OUT PUCHAR UncompressedBuffer
,
2818 IN ULONG UncompressedBufferSize
,
2819 IN PUCHAR CompressedBuffer
,
2820 IN ULONG CompressedBufferSize
,
2821 OUT PULONG FinalUncompressedSize
2827 RtlGetCompressionWorkSpaceSize(
2828 IN USHORT CompressionFormatAndEngine
,
2829 OUT PULONG CompressBufferWorkSpaceSize
,
2830 OUT PULONG CompressFragmentWorkSpaceSize
2834 // Debug Info Functions
2837 PRTL_DEBUG_INFORMATION
2839 RtlCreateQueryDebugBuffer(
2841 IN BOOLEAN EventPair
2847 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer
);
2852 RtlQueryProcessDebugInformation(
2854 IN ULONG DebugInfoClassMask
,
2855 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2865 IN PRTL_BITMAP BitMapHeader
,
2866 IN ULONG StartingIndex
,
2874 IN PRTL_BITMAP BitMapHeader
,
2875 IN ULONG StartingIndex
,
2883 IN PRTL_BITMAP BitMapHeader
,
2884 IN ULONG StartingIndex
,
2885 IN ULONG NumberToClear
2892 IN PRTL_BITMAP BitMapHeader
,
2893 IN ULONG NumberToFind
,
2900 RtlFindClearBitsAndSet(
2901 IN PRTL_BITMAP BitMapHeader
,
2902 IN ULONG NumberToFind
,
2909 RtlFindNextForwardRunClear(
2910 IN PRTL_BITMAP BitMapHeader
,
2912 IN PULONG StartingRunIndex
2918 RtlInitializeBitMap(
2919 IN PRTL_BITMAP BitMapHeader
,
2920 IN PULONG BitMapBuffer
,
2921 IN ULONG SizeOfBitMap
2928 IN PRTL_BITMAP BitMapHeader
2935 PRTL_BITMAP BitMapHeader
,
2943 IN PRTL_BITMAP BitMapHeader
,
2944 IN ULONG StartingIndex
,
2945 IN ULONG NumberToSet
2952 PRTL_BITMAP BitMapHeader
2959 PRTL_BITMAP BitMapHeader
,
2972 WAITORTIMERCALLBACKFUNC Callback
,
2982 RtlCreateTimerQueue(PHANDLE TimerQueue
);
2990 HANDLE CompletionEvent
3006 RtlDeleteTimerQueueEx(
3008 HANDLE CompletionEvent
3014 RtlDeleteTimerQueue(HANDLE TimerQueue
);
3021 InterlockedPushListSList(
3022 IN PSLIST_HEADER ListHead
,
3023 IN PSLIST_ENTRY List
,
3024 IN PSLIST_ENTRY ListEnd
,
3029 // Range List functions
3034 RtlInitializeRangeList(
3035 IN OUT PRTL_RANGE_LIST RangeList
3042 IN PRTL_RANGE_LIST RangeList
3049 IN OUT PRTL_RANGE_LIST RangeList
,
3052 IN UCHAR Attributes
,
3054 IN PVOID UserData OPTIONAL
,
3055 IN PVOID Owner OPTIONAL
3072 IN ULONG ComponentId
,
3084 IN ULONG MaximumResponseLength
3095 DbgLoadImageSymbols(
3098 IN ULONG_PTR ProcessId
3103 DbgUnLoadImageSymbols(
3106 IN ULONG_PTR ProcessId
3117 // Generic Table Functions
3119 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
3123 RtlInsertElementGenericTable(
3124 IN PRTL_GENERIC_TABLE Table
,
3126 IN ULONG BufferSize
,
3127 OUT PBOOLEAN NewElement OPTIONAL
3133 RtlInsertElementGenericTableFull(
3134 IN PRTL_GENERIC_TABLE Table
,
3136 IN ULONG BufferSize
,
3137 OUT PBOOLEAN NewElement OPTIONAL
,
3138 IN PVOID NodeOrParent
,
3139 IN TABLE_SEARCH_RESULT SearchResult
3145 RtlIsGenericTableEmpty(
3146 IN PRTL_GENERIC_TABLE Table
3152 RtlLookupElementGenericTableFull(
3153 IN PRTL_GENERIC_TABLE Table
,
3155 OUT PVOID
*NodeOrParent
,
3156 OUT TABLE_SEARCH_RESULT
*SearchResult
3161 // Handle Table Functions
3164 PRTL_HANDLE_TABLE_ENTRY
3167 IN PRTL_HANDLE_TABLE HandleTable
,
3174 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable
);
3180 IN PRTL_HANDLE_TABLE HandleTable
,
3181 IN PRTL_HANDLE_TABLE_ENTRY Handle
3187 RtlInitializeHandleTable(
3189 IN ULONG HandleSize
,
3190 IN PRTL_HANDLE_TABLE HandleTable
3197 IN PRTL_HANDLE_TABLE HandleTable
,
3198 IN PRTL_HANDLE_TABLE_ENTRY Handle
3204 RtlIsValidIndexHandle(
3205 IN PRTL_HANDLE_TABLE HandleTable
,
3207 OUT PRTL_HANDLE_TABLE_ENTRY
*Handle
3217 IN PVOID BaseAddress
,
3221 OUT PMESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
3227 RtlGetNtGlobalFlags(VOID
);
3232 RtlImageDirectoryEntryToData(
3234 BOOLEAN MappedAsImage
,
3243 PIMAGE_NT_HEADERS NtHeader
,
3246 PIMAGE_SECTION_HEADER
*SectionHeader
3252 RtlImageNtHeader(IN PVOID BaseAddress
);
3259 IN PVOID BaseAddress
,
3261 IN PIMAGE_NT_HEADERS
*NtHeader
3265 PIMAGE_SECTION_HEADER
3267 RtlImageRvaToSection(
3268 PIMAGE_NT_HEADERS NtHeader
,
3276 LdrRelocateImageWithBias(
3277 IN PVOID NewAddress
,
3278 IN LONGLONG AdditionalBias
,
3286 // Activation Context Functions
3288 #ifdef NTOS_MODE_USER
3292 RtlActivateActivationContextEx(
3296 IN PULONG_PTR Cookie
3302 RtlActivateActivationContext(
3305 OUT PULONG_PTR Cookie
3311 RtlAddRefActivationContext(
3316 PRTL_ACTIVATION_CONTEXT_STACK_FRAME
3318 RtlActivateActivationContextUnsafeFast(
3319 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
,
3326 RtlAllocateActivationContextStack(
3333 RtlCreateActivationContext(
3335 IN OUT PVOID ReturnedData
3341 RtlGetActiveActivationContext(
3348 RtlReleaseActivationContext(
3355 RtlDeactivateActivationContext(
3363 RtlFreeThreadActivationContextStack(void);
3366 PRTL_ACTIVATION_CONTEXT_STACK_FRAME
3368 RtlDeactivateActivationContextUnsafeFast(
3369 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
3375 RtlDosApplyFileIsolationRedirection_Ustr(
3377 IN PUNICODE_STRING OriginalName
,
3378 IN PUNICODE_STRING Extension
,
3379 IN OUT PUNICODE_STRING StaticString
,
3380 IN OUT PUNICODE_STRING DynamicString
,
3381 IN OUT PUNICODE_STRING
*NewName
,
3383 IN PSIZE_T FileNameSize
,
3384 IN PSIZE_T RequiredLength
3390 RtlFindActivationContextSectionString(
3392 IN
const GUID
*ExtensionGuid
,
3393 IN ULONG SectionType
,
3394 IN PUNICODE_STRING SectionName
,
3395 IN OUT PVOID ReturnedData
3401 RtlQueryInformationActivationContext(
3404 PVOID pvSubInstance
,
3407 SIZE_T cbBuffer OPTIONAL
,
3408 SIZE_T
*pcbWrittenOrRequired OPTIONAL
3414 RtlZombifyActivationContext(
3424 RtlWow64EnableFsRedirection(
3425 IN BOOLEAN Wow64FsEnableRedirection
3431 RtlWow64EnableFsRedirectionEx(
3432 IN PVOID Wow64FsEnableRedirection
,
3433 OUT PVOID
*OldFsRedirectionLevel
3439 // Registry Functions
3444 RtlCheckRegistryKey(
3452 RtlCreateRegistryKey(
3453 IN ULONG RelativeTo
,
3460 RtlFormatCurrentUserKeyPath(
3461 IN OUT PUNICODE_STRING KeyPath
3468 IN ACCESS_MASK DesiredAccess
,
3469 OUT PHANDLE KeyHandle
3475 RtlQueryRegistryValues(
3476 IN ULONG RelativeTo
,
3478 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
3480 IN PVOID Environment
3486 RtlWriteRegistryValue(
3495 #ifdef NTOS_MODE_USER
3500 OUT HANDLE KeyHandle
,
3501 IN ACCESS_MASK DesiredAccess
,
3502 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3503 IN ULONG TitleIndex
,
3504 IN PUNICODE_STRING Class
,
3505 OUT PULONG Disposition
3511 RtlpNtEnumerateSubKey(
3512 IN HANDLE KeyHandle
,
3513 OUT PUNICODE_STRING SubKeyName
,
3521 RtlpNtMakeTemporaryKey(
3529 OUT HANDLE KeyHandle
,
3530 IN ACCESS_MASK DesiredAccess
,
3531 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3538 RtlpNtQueryValueKey(
3539 IN HANDLE KeyHandle
,
3540 OUT PULONG Type OPTIONAL
,
3541 OUT PVOID Data OPTIONAL
,
3542 IN OUT PULONG DataLength OPTIONAL
,
3550 IN HANDLE KeyHandle
,
3563 RtlGetDefaultCodePage(
3564 OUT PUSHORT AnsiCodePage
,
3565 OUT PUSHORT OemCodePage
3572 IN PUSHORT AnsiTableBase
,
3573 IN PUSHORT OemTableBase
,
3574 IN PUSHORT CaseTableBase
,
3575 OUT PNLSTABLEINFO NlsTable
3581 RtlInitCodePageTable(
3582 IN PUSHORT TableBase
,
3583 OUT PCPTABLEINFO CodePageTable
3589 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable
);
3591 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
3594 // Misc conversion functions
3599 RtlConvertLongToLargeInteger(
3603 LARGE_INTEGER Result
;
3605 Result
.QuadPart
= SignedInteger
;
3612 RtlEnlargedIntegerMultiply(
3617 LARGE_INTEGER Product
;
3619 Product
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3626 RtlEnlargedUnsignedDivide(
3627 IN ULARGE_INTEGER Dividend
,
3629 IN PULONG Remainder OPTIONAL
3634 Quotient
= (ULONG
)(Dividend
.QuadPart
/ Divisor
);
3636 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
3645 RtlEnlargedUnsignedMultiply(
3650 LARGE_INTEGER Product
;
3652 Product
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3656 #if defined(_AMD64_) || defined(_IA64_)
3660 RtlExtendedLargeIntegerDivide(
3661 IN LARGE_INTEGER Dividend
,
3663 OUT PULONG Remainder OPTIONAL
)
3666 ret
.QuadPart
= (ULONG64
)Dividend
.QuadPart
/ Divisor
;
3668 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
3676 RtlExtendedLargeIntegerDivide(
3677 IN LARGE_INTEGER Dividend
,
3679 OUT PULONG Remainder OPTIONAL
3682 #endif /* defined(_AMD64_) || defined(_IA64_) */
3705 IN ULONG InitialCrc
,
3711 // Network Functions
3716 RtlIpv4StringToAddressW(
3719 OUT LPWSTR
*Terminator
,
3720 OUT
struct in_addr
*Addr
3726 RtlIpv6StringToAddressA(
3728 OUT PCHAR
*Terminator
,
3729 OUT
struct in6_addr
*Addr
3735 RtlIpv6StringToAddressW(
3737 OUT PCHAR
*Terminator
,
3738 OUT
struct in6_addr
*Addr
3744 RtlIpv6StringToAddressExA(
3745 IN PCHAR AddressString
,
3746 IN
struct in6_addr
*Address
,
3754 RtlIpv6StringToAddressExW(
3755 IN PWCHAR AddressName
,
3756 IN
struct in6_addr
*Address
,
3768 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3773 RtlSecondsSince1970ToTime(
3774 IN ULONG SecondsSince1970
,
3775 OUT PLARGE_INTEGER Time
3781 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3786 RtlTimeFieldsToTime(
3787 PTIME_FIELDS TimeFields
,
3794 RtlTimeToSecondsSince1970(
3795 PLARGE_INTEGER Time
,
3796 OUT PULONG SecondsSince1970
3802 RtlTimeToTimeFields(
3803 PLARGE_INTEGER Time
,
3804 PTIME_FIELDS TimeFields
3810 RtlSystemTimeToLocalTime(
3811 IN PLARGE_INTEGER SystemTime
,
3812 OUT PLARGE_INTEGER LocalTime
3816 // Version Functions
3821 RtlVerifyVersionInfo(
3822 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3824 IN ULONGLONG ConditionMask
3830 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3835 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType
);
3838 // Secure Memory Functions
3840 #ifdef NTOS_MODE_USER
3844 RtlRegisterSecureMemoryCacheCallback(
3845 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback
);
3850 RtlFlushSecureMemoryCache(
3851 IN PVOID MemoryCache
,
3852 IN OPTIONAL SIZE_T MemoryLength
3857 // Boot Status Data Functions
3859 #ifdef NTOS_MODE_USER
3863 RtlCreateBootStatusDataFile(
3870 RtlGetSetBootStatusData(
3871 IN HANDLE FileHandle
,
3872 IN BOOLEAN WriteMode
,
3873 IN RTL_BSD_ITEM_TYPE DataClass
,
3875 IN ULONG BufferSize
,
3876 OUT PULONG ReturnLength OPTIONAL
3882 RtlLockBootStatusData(
3883 OUT PHANDLE FileHandle
3889 RtlUnlockBootStatusData(
3890 IN HANDLE FileHandle
3894 #ifdef NTOS_MODE_USER
3899 IN PUNICODE_STRING GuidString
,
3905 RtlComputeImportTableHash(
3908 IN ULONG ImportTableHashRevision