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
44 IN PLIST_ENTRY ListHead
47 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
53 IN PLIST_ENTRY ListHead
,
58 OldFlink
= ListHead
->Flink
;
59 Entry
->Flink
= OldFlink
;
60 Entry
->Blink
= ListHead
;
61 OldFlink
->Blink
= Entry
;
62 ListHead
->Flink
= Entry
;
68 IN PLIST_ENTRY ListHead
,
73 OldBlink
= ListHead
->Blink
;
74 Entry
->Flink
= ListHead
;
75 Entry
->Blink
= OldBlink
;
76 OldBlink
->Flink
= Entry
;
77 ListHead
->Blink
= Entry
;
83 IN
const LIST_ENTRY
* ListHead
86 return (BOOLEAN
)(ListHead
->Flink
== ListHead
);
92 PSINGLE_LIST_ENTRY ListHead
95 PSINGLE_LIST_ENTRY FirstEntry
;
96 FirstEntry
= ListHead
->Next
;
97 if (FirstEntry
!= NULL
) {
98 ListHead
->Next
= FirstEntry
->Next
;
107 PSINGLE_LIST_ENTRY ListHead
,
108 PSINGLE_LIST_ENTRY Entry
111 Entry
->Next
= ListHead
->Next
;
112 ListHead
->Next
= Entry
;
118 IN PLIST_ENTRY Entry
)
120 PLIST_ENTRY OldFlink
;
121 PLIST_ENTRY OldBlink
;
123 OldFlink
= Entry
->Flink
;
124 OldBlink
= Entry
->Blink
;
125 OldFlink
->Blink
= OldBlink
;
126 OldBlink
->Flink
= OldFlink
;
127 return (BOOLEAN
)(OldFlink
== OldBlink
);
133 IN PLIST_ENTRY ListHead
)
138 Entry
= ListHead
->Flink
;
139 Flink
= Entry
->Flink
;
140 ListHead
->Flink
= Flink
;
141 Flink
->Blink
= ListHead
;
148 IN PLIST_ENTRY ListHead
)
153 Entry
= ListHead
->Blink
;
154 Blink
= Entry
->Blink
;
155 ListHead
->Blink
= Blink
;
156 Blink
->Flink
= ListHead
;
161 // Unicode string macros
165 RtlInitEmptyUnicodeString(OUT PUNICODE_STRING UnicodeString
,
167 IN USHORT BufferSize
)
169 UnicodeString
->Length
= 0;
170 UnicodeString
->MaximumLength
= BufferSize
;
171 UnicodeString
->Buffer
= Buffer
;
177 #define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \
178 ((L1)->LowPart == (L2)->LowPart))
182 RtlConvertUlongToLuid(ULONG Ulong
)
186 TempLuid
.LowPart
= Ulong
;
187 TempLuid
.HighPart
= 0;
197 #define ASSERT( exp ) \
199 (RtlAssert( #exp, __FILE__, __LINE__, NULL ),FALSE) : \
202 #define ASSERTMSG( msg, exp ) \
204 (RtlAssert( #exp, __FILE__, __LINE__, msg ),FALSE) : \
209 #define ASSERT( exp ) ((void) 0)
210 #define ASSERTMSG( msg, exp ) ((void) 0)
215 #ifdef NTOS_KERNEL_RUNTIME
218 // Executing RTL functions at DISPATCH_LEVEL or higher will result in a
221 #define RTL_PAGED_CODE PAGED_CODE
226 // This macro does nothing in user mode
228 #define RTL_PAGED_CODE NOP_FUNCTION
233 // RTL Splay Tree Functions
239 IN PRTL_SPLAY_LINKS Links
245 RtlDelete(IN PRTL_SPLAY_LINKS Links
252 IN PRTL_SPLAY_LINKS Links
,
253 OUT PRTL_SPLAY_LINKS
*Root
260 IN PRTL_SPLAY_LINKS Links
266 RtlSubtreePredecessor(
267 IN PRTL_SPLAY_LINKS Links
274 IN PRTL_SPLAY_LINKS Links
281 IN PRTL_SPLAY_LINKS Links
284 #define RtlIsLeftChild(Links) \
285 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
287 #define RtlIsRightChild(Links) \
288 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
290 #define RtlRightChild(Links) \
291 ((PRTL_SPLAY_LINKS)(Links))->RightChild
293 #define RtlIsRoot(Links) \
294 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
296 #define RtlLeftChild(Links) \
297 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
299 #define RtlParent(Links) \
300 ((PRTL_SPLAY_LINKS)(Links))->Parent
302 #define RtlInitializeSplayLinks(Links) \
304 PRTL_SPLAY_LINKS _SplayLinks; \
305 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
306 _SplayLinks->Parent = _SplayLinks; \
307 _SplayLinks->LeftChild = NULL; \
308 _SplayLinks->RightChild = NULL; \
311 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
313 PRTL_SPLAY_LINKS _SplayParent; \
314 PRTL_SPLAY_LINKS _SplayChild; \
315 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
316 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
317 _SplayParent->LeftChild = _SplayChild; \
318 _SplayChild->Parent = _SplayParent; \
321 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
323 PRTL_SPLAY_LINKS _SplayParent; \
324 PRTL_SPLAY_LINKS _SplayChild; \
325 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
326 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
327 _SplayParent->RightChild = _SplayChild; \
328 _SplayChild->Parent = _SplayParent; \
333 // Error and Exception Functions
338 RtlAddVectoredExceptionHandler(
339 IN ULONG FirstHandler
,
340 IN PVECTORED_EXCEPTION_HANDLER VectoredHandler
347 IN PVOID FailedAssertion
,
356 RtlSetUnhandledExceptionFilter(
357 IN PVOID TopLevelExceptionFilter
364 OUT PCONTEXT ContextRecord
384 RtlEncodeSystemPointer(
391 RtlDecodeSystemPointer(
398 RtlDispatchException(
399 IN PEXCEPTION_RECORD ExceptionRecord
,
406 RtlNtStatusToDosError(
413 RtlSetLastWin32ErrorAndNtStatusFromNtStatus(
421 IN PEXCEPTION_RECORD ExceptionRecord
434 RtlUnhandledExceptionFilter(
435 IN
struct _EXCEPTION_POINTERS
* ExceptionInfo
442 IN PVOID TargetFrame OPTIONAL
,
443 IN PVOID TargetIp OPTIONAL
,
444 IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL
,
463 RtlLogStackBackTrace(
474 IN HANDLE HeapHandle
,
484 IN PVOID BaseAddress OPTIONAL
,
485 IN SIZE_T SizeToReserve OPTIONAL
,
486 IN SIZE_T SizeToCommit OPTIONAL
,
487 IN PVOID Lock OPTIONAL
,
488 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
495 IN HANDLE HeapHandle
,
513 IN PVOID BaseAddress OPTIONAL
,
514 IN SIZE_T SizeToReserve OPTIONAL
,
515 IN SIZE_T SizeToCommit OPTIONAL
,
516 IN PVOID Lock OPTIONAL
,
517 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
541 IN HANDLE HeapHandle
,
565 IN PVOID BaseAddress
,
566 OUT PVOID
*UserValue
,
577 IN BOOLEAN ResetCounters
,
578 OUT PRTL_HEAP_TAG_INFO HeapTagInfo
604 OUT PRTL_HEAP_USAGE Usage
619 IN PVOID BaseAddress
,
628 IN PVOID BaseAddress
,
638 IN PVOID MemoryPointer
650 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
653 // Security Functions
658 RtlAbsoluteToSelfRelativeSD(
659 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
660 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
661 IN PULONG BufferLength
667 RtlAddAccessAllowedAce(
670 ACCESS_MASK AccessMask
,
677 RtlAddAccessAllowedAceEx(
679 IN ULONG dwAceRevision
,
681 IN ACCESS_MASK AccessMask
,
688 RtlAddAccessAllowedObjectAce(
690 IN ULONG dwAceRevision
,
692 IN ACCESS_MASK AccessMask
,
693 IN GUID
*ObjectTypeGuid OPTIONAL
,
694 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
701 RtlAddAccessDeniedAce(
704 ACCESS_MASK AccessMask
,
711 RtlAddAccessDeniedAceEx(
715 IN ACCESS_MASK AccessMask
,
722 RtlAddAccessDeniedObjectAce(
724 IN ULONG dwAceRevision
,
726 IN ACCESS_MASK AccessMask
,
727 IN GUID
*ObjectTypeGuid OPTIONAL
,
728 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
738 ULONG StartingAceIndex
,
746 RtlAddAuditAccessAce(
749 ACCESS_MASK AccessMask
,
762 OUT PVOID
*ReturnedState
768 RtlAddAuditAccessAceEx(
772 IN ACCESS_MASK AccessMask
,
781 RtlAddAuditAccessObjectAce(
785 IN ACCESS_MASK AccessMask
,
786 IN GUID
*ObjectTypeGuid OPTIONAL
,
787 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
800 IN ULONG MandatoryFlags
,
810 IN BOOLEAN ForThread
,
811 OUT PBOOLEAN OldValue
817 RtlAllocateAndInitializeSid(
818 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
819 IN UCHAR SubAuthorityCount
,
820 IN ULONG SubAuthority0
,
821 IN ULONG SubAuthority1
,
822 IN ULONG SubAuthority2
,
823 IN ULONG SubAuthority3
,
824 IN ULONG SubAuthority4
,
825 IN ULONG SubAuthority5
,
826 IN ULONG SubAuthority6
,
827 IN ULONG SubAuthority7
,
834 RtlAreAllAccessesGranted(
835 ACCESS_MASK GrantedAccess
,
836 ACCESS_MASK DesiredAccess
842 RtlAreAnyAccessesGranted(
843 ACCESS_MASK GrantedAccess
,
844 ACCESS_MASK DesiredAccess
858 RtlCopyLuidAndAttributesArray(
860 PLUID_AND_ATTRIBUTES Src
,
861 PLUID_AND_ATTRIBUTES Dest
867 RtlCopySidAndAttributesArray(
869 PSID_AND_ATTRIBUTES Src
,
871 PSID_AND_ATTRIBUTES Dest
,
873 PVOID
* RemainingSidArea
,
874 PULONG RemainingSidAreaSize
880 RtlConvertSidToUnicodeString(
881 OUT PUNICODE_STRING DestinationString
,
883 IN BOOLEAN AllocateDestinationString
907 RtlCreateSecurityDescriptor(
908 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
915 RtlCreateSecurityDescriptorRelative(
916 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor
,
923 RtlCopySecurityDescriptor(
924 IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor
,
925 OUT PSECURITY_DESCRIPTOR pDestinationSecurityDescriptor
979 RtlGetControlSecurityDescriptor(
980 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
981 OUT PSECURITY_DESCRIPTOR_CONTROL Control
,
988 RtlGetDaclSecurityDescriptor(
989 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
990 OUT PBOOLEAN DaclPresent
,
992 OUT PBOOLEAN DaclDefaulted
998 RtlGetSaclSecurityDescriptor(
999 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1000 OUT PBOOLEAN SaclPresent
,
1002 OUT PBOOLEAN SaclDefaulted
1008 RtlGetGroupSecurityDescriptor(
1009 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1011 OUT PBOOLEAN GroupDefaulted
1017 RtlGetOwnerSecurityDescriptor(
1018 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1020 OUT PBOOLEAN OwnerDefaulted
1026 RtlGetSecurityDescriptorRMControl(
1027 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1028 OUT PUCHAR RMControl
1032 PSID_IDENTIFIER_AUTHORITY
1034 RtlIdentifierAuthoritySid(PSID Sid
);
1039 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
1046 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1047 IN UCHAR SubAuthorityCount
1053 RtlLengthRequiredSid(IN ULONG SubAuthorityCount
);
1058 RtlLengthSid(IN PSID Sid
);
1063 RtlMakeSelfRelativeSD(
1064 IN PSECURITY_DESCRIPTOR AbsoluteSD
,
1065 OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1066 IN OUT PULONG BufferLength
);
1072 PACCESS_MASK AccessMask
,
1073 PGENERIC_MAPPING GenericMapping
1079 RtlQueryInformationAcl(
1082 ULONG InformationLength
,
1083 ACL_INFORMATION_CLASS InformationClass
1089 RtlReleasePrivilege(
1090 IN PVOID ReturnedState
1096 RtlSelfRelativeToAbsoluteSD(
1097 IN PSECURITY_DESCRIPTOR SelfRelativeSD
,
1098 OUT PSECURITY_DESCRIPTOR AbsoluteSD
,
1099 IN PULONG AbsoluteSDSize
,
1105 IN PULONG OwnerSize
,
1106 IN PSID PrimaryGroup
,
1107 IN PULONG PrimaryGroupSize
1113 RtlSelfRelativeToAbsoluteSD2(
1114 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1115 OUT PULONG BufferSize
1121 RtlSetAttributesSecurityDescriptor(
1122 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1123 IN SECURITY_DESCRIPTOR_CONTROL Control
,
1130 RtlSetControlSecurityDescriptor(
1131 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1132 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest
,
1133 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
1139 RtlSetDaclSecurityDescriptor (
1140 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1141 IN BOOLEAN DaclPresent
,
1143 IN BOOLEAN DaclDefaulted
1149 RtlSetGroupSecurityDescriptor(
1150 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1152 IN BOOLEAN GroupDefaulted
1158 RtlSetInformationAcl(
1161 ULONG InformationLength
,
1162 ACL_INFORMATION_CLASS InformationClass
1168 RtlSetOwnerSecurityDescriptor(
1169 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1171 IN BOOLEAN OwnerDefaulted
1177 RtlSetSaclSecurityDescriptor(
1178 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1179 IN BOOLEAN SaclPresent
,
1181 IN BOOLEAN SaclDefaulted
1187 RtlSetSecurityDescriptorRMControl(
1188 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1195 RtlSubAuthorityCountSid(
1204 IN ULONG SubAuthority
1210 RtlValidRelativeSecurityDescriptor(
1211 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
1212 IN ULONG SecurityDescriptorLength
,
1213 IN SECURITY_INFORMATION RequiredInformation
1219 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
1224 RtlValidSid(IN PSID Sid
);
1229 RtlValidAcl(PACL Acl
);
1234 RtlDeleteSecurityObject(
1235 IN PSECURITY_DESCRIPTOR
*ObjectDescriptor
1241 RtlNewSecurityObject(
1242 IN PSECURITY_DESCRIPTOR ParentDescriptor
,
1243 IN PSECURITY_DESCRIPTOR CreatorDescriptor
,
1244 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
1245 IN BOOLEAN IsDirectoryObject
,
1247 IN PGENERIC_MAPPING GenericMapping
1253 RtlQuerySecurityObject(
1254 IN PSECURITY_DESCRIPTOR ObjectDescriptor
,
1255 IN SECURITY_INFORMATION SecurityInformation
,
1256 OUT PSECURITY_DESCRIPTOR ResultantDescriptor
,
1257 IN ULONG DescriptorLength
,
1258 OUT PULONG ReturnLength
1264 RtlSetSecurityObject(
1265 IN SECURITY_INFORMATION SecurityInformation
,
1266 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
1267 OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
1268 IN PGENERIC_MAPPING GenericMapping
,
1273 // Single-Character Functions
1278 RtlLargeIntegerToChar(
1279 IN PLARGE_INTEGER Value
,
1288 RtlUpperChar(CHAR Source
);
1293 RtlUpcaseUnicodeChar(WCHAR Source
);
1298 RtlDowncaseUnicodeChar(IN WCHAR Source
);
1313 RtlIntegerToUnicode(
1315 IN ULONG Base OPTIONAL
,
1316 IN ULONG Length OPTIONAL
,
1317 IN OUT LPWSTR String
1323 RtlIntegerToUnicodeString(
1326 IN OUT PUNICODE_STRING String
1339 // Byte Swap Functions
1341 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
1342 ((defined(_M_AMD64) || \
1343 defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
1345 unsigned short __cdecl
_byteswap_ushort(unsigned short);
1346 unsigned long __cdecl
_byteswap_ulong (unsigned long);
1347 unsigned __int64 __cdecl
_byteswap_uint64(unsigned __int64
);
1348 #pragma intrinsic(_byteswap_ushort)
1349 #pragma intrinsic(_byteswap_ulong)
1350 #pragma intrinsic(_byteswap_uint64)
1351 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1352 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1353 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1360 RtlUshortByteSwap(IN USHORT Source
);
1365 RtlUlongByteSwap(IN ULONG Source
);
1370 RtlUlonglongByteSwap(IN ULONGLONG Source
);
1375 // Unicode->Ansi String Functions
1380 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString
);
1382 #ifdef NTOS_MODE_USER
1384 #define RtlUnicodeStringToAnsiSize(STRING) ( \
1385 NLS_MB_CODE_PAGE_TAG ? \
1386 RtlxUnicodeStringToAnsiSize(STRING) : \
1387 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1395 RtlUnicodeStringToAnsiString(
1396 PANSI_STRING DestinationString
,
1397 PCUNICODE_STRING SourceString
,
1398 BOOLEAN AllocateDestinationString
1402 // Unicode->OEM String Functions
1407 RtlUpcaseUnicodeStringToOemString(
1408 POEM_STRING DestinationString
,
1409 PCUNICODE_STRING SourceString
,
1410 BOOLEAN AllocateDestinationString
1416 RtlUpcaseUnicodeStringToCountedOemString(
1417 IN OUT POEM_STRING DestinationString
,
1418 IN PCUNICODE_STRING SourceString
,
1419 IN BOOLEAN AllocateDestinationString
1425 RtlUnicodeStringToOemString(
1426 POEM_STRING DestinationString
,
1427 PCUNICODE_STRING SourceString
,
1428 BOOLEAN AllocateDestinationString
1434 RtlUpcaseUnicodeToOemN(
1438 PWCHAR UnicodeString
,
1445 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString
);
1447 #ifdef NTOS_MODE_USER
1449 #define RtlUnicodeStringToOemSize(STRING) ( \
1450 NLS_MB_OEM_CODE_PAGE_TAG ? \
1451 RtlxUnicodeStringToOemSize(STRING) : \
1452 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1455 #define RtlUnicodeStringToCountedOemSize(STRING) ( \
1456 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
1468 PWCHAR UnicodeString
,
1473 // Unicode->MultiByte String Functions
1478 RtlUnicodeToMultiByteN(
1482 PWCHAR UnicodeString
,
1489 RtlUpcaseUnicodeToMultiByteN(
1493 PWCHAR UnicodeString
,
1500 RtlUnicodeToMultiByteSize(
1502 PWCHAR UnicodeString
,
1509 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString
);
1512 // OEM to Unicode Functions
1517 RtlOemStringToUnicodeString(
1518 PUNICODE_STRING DestinationString
,
1519 PCOEM_STRING SourceString
,
1520 BOOLEAN AllocateDestinationString
1527 PWSTR UnicodeString
,
1528 ULONG MaxBytesInUnicodeString
,
1529 PULONG BytesInUnicodeString
,
1531 ULONG BytesInOemString
1534 #ifdef NTOS_MODE_USER
1536 #define RtlOemStringToUnicodeSize(STRING) ( \
1537 NLS_MB_OEM_CODE_PAGE_TAG ? \
1538 RtlxOemStringToUnicodeSize(STRING) : \
1539 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1542 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1543 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1549 // Ansi->Unicode String Functions
1554 RtlxAnsiStringToUnicodeSize(
1555 PCANSI_STRING AnsiString
1561 RtlAnsiStringToUnicodeString(
1562 PUNICODE_STRING DestinationString
,
1563 PCANSI_STRING SourceString
,
1564 BOOLEAN AllocateDestinationString
1567 #ifdef NTOS_MODE_USER
1569 #define RtlAnsiStringToUnicodeSize(STRING) ( \
1570 NLS_MB_CODE_PAGE_TAG ? \
1571 RtlxAnsiStringToUnicodeSize(STRING) : \
1572 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1580 RtlCreateUnicodeStringFromAsciiz(
1581 OUT PUNICODE_STRING Destination
,
1586 // Unicode String Functions
1591 RtlAppendUnicodeToString(
1592 PUNICODE_STRING Destination
,
1599 RtlAppendUnicodeStringToString(
1600 PUNICODE_STRING Destination
,
1601 PCUNICODE_STRING Source
1607 RtlCompareUnicodeString(
1608 PCUNICODE_STRING String1
,
1609 PCUNICODE_STRING String2
,
1610 BOOLEAN CaseInsensitive
1616 RtlCopyUnicodeString(
1617 PUNICODE_STRING DestinationString
,
1618 PCUNICODE_STRING SourceString
1624 RtlCreateUnicodeString(
1625 PUNICODE_STRING DestinationString
,
1629 #ifdef NTOS_MODE_USER
1634 RtlDowncaseUnicodeString(
1635 IN OUT PUNICODE_STRING UniDest
,
1636 IN PCUNICODE_STRING UniSource
,
1637 IN BOOLEAN AllocateDestinationString
1643 RtlDuplicateUnicodeString(
1645 IN PCUNICODE_STRING SourceString
,
1646 OUT PUNICODE_STRING DestinationString
1654 RtlEqualUnicodeString(
1655 PCUNICODE_STRING String1
,
1656 PCUNICODE_STRING String2
,
1657 BOOLEAN CaseInsensitive
1663 RtlFindCharInUnicodeString(
1665 IN PUNICODE_STRING SearchString
,
1666 IN PCUNICODE_STRING MatchString
,
1667 OUT PUSHORT Position
1673 RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString
);
1678 RtlHashUnicodeString(
1679 IN CONST UNICODE_STRING
*String
,
1680 IN BOOLEAN CaseInSensitive
,
1681 IN ULONG HashAlgorithm
,
1682 OUT PULONG HashValue
1688 RtlInitUnicodeString(
1689 IN OUT PUNICODE_STRING DestinationString
,
1690 IN PCWSTR SourceString
1696 RtlInitUnicodeStringEx(
1697 OUT PUNICODE_STRING DestinationString
,
1698 IN PCWSTR SourceString OPTIONAL
1714 PCANSI_STRING String1
,
1715 PCANSI_STRING String2
,
1716 BOOLEAN CaseInsensitive
1722 RtlPrefixUnicodeString(
1723 PCUNICODE_STRING String1
,
1724 PCUNICODE_STRING String2
,
1725 BOOLEAN CaseInsensitive
1731 RtlUpcaseUnicodeString(
1732 PUNICODE_STRING DestinationString
,
1733 PCUNICODE_STRING SourceString
,
1734 BOOLEAN AllocateDestinationString
1740 RtlUnicodeStringToInteger(
1741 PCUNICODE_STRING String
,
1749 RtlValidateUnicodeString(
1751 IN PCUNICODE_STRING String
1755 // Ansi String Functions
1760 RtlFreeAnsiString(IN PANSI_STRING AnsiString
);
1766 PANSI_STRING DestinationString
,
1773 RtlInitAnsiStringEx(
1774 PANSI_STRING DestinationString
,
1779 // OEM String Functions
1784 RtlFreeOemString(IN POEM_STRING OemString
);
1787 // MultiByte->Unicode String Functions
1792 RtlMultiByteToUnicodeN(
1793 PWCHAR UnicodeString
,
1803 RtlMultiByteToUnicodeSize(
1815 RtlAddAtomToAtomTable(
1816 IN PRTL_ATOM_TABLE AtomTable
,
1826 IN OUT PRTL_ATOM_TABLE
*AtomTable
1832 RtlDeleteAtomFromAtomTable(
1833 IN PRTL_ATOM_TABLE AtomTable
,
1840 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable
);
1845 RtlQueryAtomInAtomTable(
1846 IN PRTL_ATOM_TABLE AtomTable
,
1848 IN OUT PULONG RefCount OPTIONAL
,
1849 IN OUT PULONG PinCount OPTIONAL
,
1850 IN OUT PWSTR AtomName OPTIONAL
,
1851 IN OUT PULONG NameLength OPTIONAL
1857 RtlPinAtomInAtomTable(
1858 IN PRTL_ATOM_TABLE AtomTable
,
1865 RtlLookupAtomInAtomTable(
1866 IN PRTL_ATOM_TABLE AtomTable
,
1878 IN PVOID Destination
,
1884 // Process Management Functions
1889 RtlAcquirePebLock(VOID
);
1894 RtlCreateProcessParameters (
1895 OUT PRTL_USER_PROCESS_PARAMETERS
*ProcessParameters
,
1896 IN PUNICODE_STRING ImagePathName OPTIONAL
,
1897 IN PUNICODE_STRING DllPath OPTIONAL
,
1898 IN PUNICODE_STRING CurrentDirectory OPTIONAL
,
1899 IN PUNICODE_STRING CommandLine OPTIONAL
,
1900 IN PWSTR Environment OPTIONAL
,
1901 IN PUNICODE_STRING WindowTitle OPTIONAL
,
1902 IN PUNICODE_STRING DesktopInfo OPTIONAL
,
1903 IN PUNICODE_STRING ShellInfo OPTIONAL
,
1904 IN PUNICODE_STRING RuntimeInfo OPTIONAL
1910 RtlCreateUserProcess(
1911 IN PUNICODE_STRING ImageFileName
,
1912 IN ULONG Attributes
,
1913 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
,
1914 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL
,
1915 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL
,
1916 IN HANDLE ParentProcess OPTIONAL
,
1917 IN BOOLEAN CurrentDirectory
,
1918 IN HANDLE DebugPort OPTIONAL
,
1919 IN HANDLE ExceptionPort OPTIONAL
,
1920 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
1926 RtlCreateUserThread(
1927 IN HANDLE ProcessHandle
,
1928 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1929 IN BOOLEAN CreateSuspended
,
1930 IN ULONG StackZeroBits
,
1931 IN SIZE_T StackReserve
,
1932 IN SIZE_T StackCommit
,
1933 IN PTHREAD_START_ROUTINE StartAddress
,
1935 IN OUT PHANDLE ThreadHandle
,
1936 IN OUT PCLIENT_ID ClientId
1940 PRTL_USER_PROCESS_PARAMETERS
1942 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
1947 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
1952 RtlExitUserThread(NTSTATUS Status
);
1957 RtlInitializeContext(
1958 IN HANDLE ProcessHandle
,
1959 OUT PCONTEXT ThreadContext
,
1960 IN PVOID ThreadStartParam OPTIONAL
,
1961 IN PTHREAD_START_ROUTINE ThreadStartAddress
,
1962 IN PINITIAL_TEB InitialTeb
1966 PRTL_USER_PROCESS_PARAMETERS
1968 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
1973 RtlReleasePebLock(VOID
);
1978 RtlSetProcessIsCritical(
1979 IN BOOLEAN NewValue
,
1980 OUT PBOOLEAN OldValue OPTIONAL
,
1981 IN BOOLEAN IsWinlogon
1984 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
1987 // Thread Pool Functions
1992 RtlDeregisterWaitEx(
1993 IN HANDLE hWaitHandle
,
1994 IN HANDLE hCompletionEvent
2001 IN HANDLE hWaitHandle
2008 IN WORKERCALLBACKFUNC Function
,
2009 IN PVOID Context OPTIONAL
,
2017 IN PHANDLE phNewWaitObject
,
2019 IN WAITORTIMERCALLBACKFUNC Callback
,
2021 IN ULONG ulMilliseconds
,
2026 // Environment/Path Functions
2031 RtlCreateEnvironment(
2039 RtlComputePrivatizedDllName_U(
2040 IN PUNICODE_STRING DllName
,
2041 OUT PUNICODE_STRING RealName
,
2042 OUT PUNICODE_STRING LocalName
2048 RtlDestroyEnvironment(
2049 IN PWSTR Environment
2055 RtlDoesFileExists_U(
2062 RtlDoesFileExists_UstrEx(
2063 IN PCUNICODE_STRING FileName
,
2064 IN BOOLEAN SucceedIfBusy
2070 RtlDetermineDosPathNameType_U(
2077 RtlDetermineDosPathNameType_Ustr(
2078 IN PCUNICODE_STRING Path
2087 IN PCWSTR Extension
,
2088 IN ULONG BufferSize
,
2096 RtlDosPathNameToNtPathName_U(
2097 IN PCWSTR DosPathName
,
2098 OUT PUNICODE_STRING NtPathName
,
2099 OUT PCWSTR
*NtFileNamePart
,
2100 OUT CURDIR
*DirectoryInfo
2106 RtlExpandEnvironmentStrings_U(
2108 PUNICODE_STRING Source
,
2109 PUNICODE_STRING Destination
,
2116 RtlGetCurrentDirectory_U(
2117 ULONG MaximumLength
,
2124 RtlGetFullPathName_U(
2128 OUT PWSTR
*ShortName
2134 RtlGetFullPathName_Ustr(
2135 IN PUNICODE_STRING FileName
,
2138 OUT PWSTR
*ShortName
,
2139 OUT PBOOLEAN InvalidName
,
2140 OUT RTL_PATH_TYPE
*PathType
2146 RtlIsDosDeviceName_U(
2153 RtlIsDosDeviceName_Ustr(
2154 IN PUNICODE_STRING Name
2161 RtlIsNameLegalDOS8Dot3(
2162 IN PCUNICODE_STRING Name
,
2163 IN OUT POEM_STRING OemName OPTIONAL
,
2164 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2170 RtlQueryEnvironmentVariable_U(
2172 PUNICODE_STRING Name
,
2173 PUNICODE_STRING Value
2179 RtlSetCurrentDirectory_U(
2180 IN PUNICODE_STRING name
2186 RtlSetEnvironmentVariable(
2188 PUNICODE_STRING Name
,
2189 PUNICODE_STRING Value
2193 // Critical Section/Resource Functions
2198 RtlDeleteCriticalSection (
2199 IN PRTL_CRITICAL_SECTION CriticalSection
2205 RtlEnterCriticalSection(
2206 IN PRTL_CRITICAL_SECTION CriticalSection
2212 RtlInitializeCriticalSection(
2213 IN PRTL_CRITICAL_SECTION CriticalSection
2219 RtlInitializeCriticalSectionAndSpinCount(
2220 IN PRTL_CRITICAL_SECTION CriticalSection
,
2227 RtlLeaveCriticalSection(
2228 IN PRTL_CRITICAL_SECTION CriticalSection
2234 RtlTryEnterCriticalSection(
2235 IN PRTL_CRITICAL_SECTION CriticalSection
2241 RtlpUnWaitCriticalSection(
2242 IN PRTL_CRITICAL_SECTION CriticalSection
2248 RtlpWaitForCriticalSection(
2249 IN PRTL_CRITICAL_SECTION CriticalSection
2255 RtlAcquireResourceExclusive(
2256 IN PRTL_RESOURCE Resource
,
2263 RtlAcquireResourceShared(
2264 IN PRTL_RESOURCE Resource
,
2271 RtlConvertExclusiveToShared(
2272 IN PRTL_RESOURCE Resource
2278 RtlConvertSharedToExclusive(
2279 IN PRTL_RESOURCE Resource
2286 IN PRTL_RESOURCE Resource
2293 IN PRTL_RESOURCE Resource
2299 RtlInitializeResource(
2300 IN PRTL_RESOURCE Resource
2307 IN PRTL_RESOURCE Resource
2311 // Compression Functions
2317 IN USHORT CompressionFormatAndEngine
,
2318 IN PUCHAR UncompressedBuffer
,
2319 IN ULONG UncompressedBufferSize
,
2320 OUT PUCHAR CompressedBuffer
,
2321 IN ULONG CompressedBufferSize
,
2322 IN ULONG UncompressedChunkSize
,
2323 OUT PULONG FinalCompressedSize
,
2330 RtlDecompressBuffer(
2331 IN USHORT CompressionFormat
,
2332 OUT PUCHAR UncompressedBuffer
,
2333 IN ULONG UncompressedBufferSize
,
2334 IN PUCHAR CompressedBuffer
,
2335 IN ULONG CompressedBufferSize
,
2336 OUT PULONG FinalUncompressedSize
2342 RtlGetCompressionWorkSpaceSize(
2343 IN USHORT CompressionFormatAndEngine
,
2344 OUT PULONG CompressBufferWorkSpaceSize
,
2345 OUT PULONG CompressFragmentWorkSpaceSize
2349 // Debug Info Functions
2352 PRTL_DEBUG_INFORMATION
2354 RtlCreateQueryDebugBuffer(
2356 IN BOOLEAN EventPair
2362 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer
);
2367 RtlQueryProcessDebugInformation(
2369 IN ULONG DebugInfoClassMask
,
2370 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2380 IN PRTL_BITMAP BitMapHeader
,
2381 IN ULONG StartingIndex
,
2389 IN PRTL_BITMAP BitMapHeader
,
2390 IN ULONG StartingIndex
,
2398 IN PRTL_BITMAP BitMapHeader
,
2399 IN ULONG StartingIndex
,
2400 IN ULONG NumberToClear
2407 IN PRTL_BITMAP BitMapHeader
,
2408 IN ULONG NumberToFind
,
2415 RtlFindClearBitsAndSet(
2416 IN PRTL_BITMAP BitMapHeader
,
2417 IN ULONG NumberToFind
,
2424 RtlFindNextForwardRunClear(
2425 IN PRTL_BITMAP BitMapHeader
,
2427 IN PULONG StartingRunIndex
2433 RtlInitializeBitMap(
2434 IN PRTL_BITMAP BitMapHeader
,
2435 IN PULONG BitMapBuffer
,
2436 IN ULONG SizeOfBitMap
2443 IN PRTL_BITMAP BitMapHeader
2450 PRTL_BITMAP BitMapHeader
,
2458 IN PRTL_BITMAP BitMapHeader
,
2459 IN ULONG StartingIndex
,
2460 IN ULONG NumberToSet
2467 PRTL_BITMAP BitMapHeader
2474 PRTL_BITMAP BitMapHeader
,
2487 WAITORTIMERCALLBACKFUNC Callback
,
2497 RtlCreateTimerQueue(PHANDLE TimerQueue
);
2505 HANDLE CompletionEvent
2521 RtlDeleteTimerQueueEx(
2523 HANDLE CompletionEvent
2529 RtlDeleteTimerQueue(HANDLE TimerQueue
);
2536 InterlockedPushListSList(
2537 IN PSLIST_HEADER ListHead
,
2538 IN PSLIST_ENTRY List
,
2539 IN PSLIST_ENTRY ListEnd
,
2544 // Range List functions
2549 RtlFreeRangeList(IN PRTL_RANGE_LIST RangeList
);
2565 IN ULONG ComponentId
,
2576 IN ULONG MaximumResponseLength
2587 DbgLoadImageSymbols(
2588 IN PANSI_STRING Name
,
2590 IN ULONG_PTR ProcessId
2595 DbgUnLoadImageSymbols(
2596 IN PANSI_STRING Name
,
2598 IN ULONG_PTR ProcessId
2602 // Generic Table Functions
2604 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
2607 RtlInsertElementGenericTable(
2608 IN PRTL_GENERIC_TABLE Table
,
2610 IN ULONG BufferSize
,
2611 OUT PBOOLEAN NewElement OPTIONAL
2616 RtlInsertElementGenericTableFull(
2617 IN PRTL_GENERIC_TABLE Table
,
2619 IN ULONG BufferSize
,
2620 OUT PBOOLEAN NewElement OPTIONAL
,
2621 IN PVOID NodeOrParent
,
2622 IN TABLE_SEARCH_RESULT SearchResult
2627 RtlIsGenericTableEmpty(
2628 IN PRTL_GENERIC_TABLE Table
2633 RtlLookupElementGenericTableFull(
2634 IN PRTL_GENERIC_TABLE Table
,
2636 OUT PVOID
*NodeOrParent
,
2637 OUT TABLE_SEARCH_RESULT
*SearchResult
2642 // Handle Table Functions
2645 PRTL_HANDLE_TABLE_ENTRY
2648 IN PRTL_HANDLE_TABLE HandleTable
,
2655 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable
);
2661 IN PRTL_HANDLE_TABLE HandleTable
,
2662 IN PRTL_HANDLE_TABLE_ENTRY Handle
2668 RtlInitializeHandleTable(
2670 IN ULONG HandleSize
,
2671 IN PRTL_HANDLE_TABLE HandleTable
2678 IN PRTL_HANDLE_TABLE HandleTable
,
2679 IN PRTL_HANDLE_TABLE_ENTRY Handle
2685 RtlIsValidIndexHandle(
2686 IN PRTL_HANDLE_TABLE HandleTable
,
2688 OUT PRTL_HANDLE_TABLE_ENTRY
*Handle
2698 IN PVOID BaseAddress
,
2702 OUT PRTL_MESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
2708 RtlGetNtGlobalFlags(VOID
);
2713 RtlImageDirectoryEntryToData(
2715 BOOLEAN MappedAsImage
,
2724 PIMAGE_NT_HEADERS NtHeader
,
2727 PIMAGE_SECTION_HEADER
*SectionHeader
2733 RtlImageNtHeader(IN PVOID BaseAddress
);
2740 IN PVOID BaseAddress
,
2742 IN PIMAGE_NT_HEADERS
*NtHeader
2746 PIMAGE_SECTION_HEADER
2748 RtlImageRvaToSection(
2749 PIMAGE_NT_HEADERS NtHeader
,
2757 LdrRelocateImageWithBias(
2758 IN PVOID NewAddress
,
2759 IN LONGLONG AdditionalBias
,
2767 // Activation Context Functions
2769 #ifdef NTOS_MODE_USER
2773 RtlActivateActivationContextUnsafeFast(
2774 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
,
2781 RtlAllocateActivationContextStack(
2788 RtlGetActiveActivationContext(
2795 RtlReleaseActivationContext(
2802 RtlDeactivateActivationContextUnsafeFast(
2803 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
2809 RtlDosApplyFileIsolationRedirection_Ustr(
2811 IN PUNICODE_STRING OriginalName
,
2812 IN PUNICODE_STRING Extension
,
2813 IN OUT PUNICODE_STRING RedirectedName
,
2814 IN OUT PUNICODE_STRING RedirectedName2
,
2815 IN OUT PUNICODE_STRING
*OriginalName2
,
2824 RtlFindActivationContextSectionString(
2827 IN ULONG SectionType
,
2828 IN PUNICODE_STRING SectionName
,
2834 // Registry Functions
2839 RtlCheckRegistryKey(
2847 RtlCreateRegistryKey(
2848 IN ULONG RelativeTo
,
2855 RtlFormatCurrentUserKeyPath(
2856 IN OUT PUNICODE_STRING KeyPath
2863 OUT HANDLE KeyHandle
,
2864 IN ACCESS_MASK DesiredAccess
,
2865 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2873 IN ACCESS_MASK DesiredAccess
,
2874 OUT PHANDLE KeyHandle
2880 RtlQueryRegistryValues(
2881 IN ULONG RelativeTo
,
2883 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
2885 IN PVOID Environment
2891 RtlWriteRegistryValue(
2906 RtlGetDefaultCodePage(
2907 OUT PUSHORT AnsiCodePage
,
2908 OUT PUSHORT OemCodePage
2915 IN PUSHORT AnsiTableBase
,
2916 IN PUSHORT OemTableBase
,
2917 IN PUSHORT CaseTableBase
,
2918 OUT PNLSTABLEINFO NlsTable
2924 RtlInitCodePageTable(
2925 IN PUSHORT TableBase
,
2926 OUT PCPTABLEINFO CodePageTable
2932 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable
);
2934 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
2937 // Misc conversion functions
2942 RtlConvertLongToLargeInteger(
2946 LARGE_INTEGER Result
;
2948 Result
.QuadPart
= SignedInteger
;
2955 RtlEnlargedIntegerMultiply(
2960 LARGE_INTEGER Product
;
2962 Product
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
2969 RtlEnlargedUnsignedDivide(
2970 IN ULARGE_INTEGER Dividend
,
2972 IN PULONG Remainder OPTIONAL
2977 Quotient
= (ULONG
)(Dividend
.QuadPart
/ Divisor
);
2979 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
2988 RtlEnlargedUnsignedMultiply(
2993 LARGE_INTEGER Product
;
2995 Product
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3018 IN USHORT PartialCrc
,
3024 // Network Functions
3029 RtlIpv4StringToAddressW(
3032 OUT PWCHAR Terminator
,
3033 OUT
struct in_addr
*Addr
3039 RtlIpv6StringToAddressA(
3041 OUT PCHAR
*Terminator
,
3042 OUT
struct in6_addr
*Addr
3048 RtlIpv6StringToAddressW(
3050 OUT PCHAR
*Terminator
,
3051 OUT
struct in6_addr
*Addr
3057 RtlIpv6StringToAddressExA(
3058 IN PCHAR AddressString
,
3059 IN
struct in6_addr
*Address
,
3067 RtlIpv6StringToAddressExW(
3068 IN PWCHAR AddressName
,
3069 IN
struct in6_addr
*Address
,
3081 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3086 RtlSecondsSince1970ToTime(
3087 IN ULONG SecondsSince1970
,
3088 OUT PLARGE_INTEGER Time
3094 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3099 RtlTimeFieldsToTime(
3100 PTIME_FIELDS TimeFields
,
3107 RtlTimeToSecondsSince1970(
3108 PLARGE_INTEGER Time
,
3109 OUT PULONG SecondsSince1970
3115 RtlTimeToTimeFields(
3116 PLARGE_INTEGER Time
,
3117 PTIME_FIELDS TimeFields
3123 RtlSystemTimeToLocalTime(
3124 IN PLARGE_INTEGER SystemTime
,
3125 OUT PLARGE_INTEGER LocalTime
3129 // Version Functions
3134 RtlVerifyVersionInfo(
3135 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3137 IN ULONGLONG ConditionMask
3143 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3148 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType
);
3151 // Secure Memory Functions
3153 #ifdef NTOS_MODE_USER
3157 RtlRegisterSecureMemoryCacheCallback(
3158 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback
);
3163 RtlFlushSecureMemoryCache(
3164 IN PVOID MemoryCache
,
3165 IN OPTIONAL SIZE_T MemoryLength