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
,
629 IN PVOID MemoryPointer
641 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
644 // Security Functions
649 RtlAbsoluteToSelfRelativeSD(
650 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
651 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
652 IN PULONG BufferLength
658 RtlAddAccessAllowedAce(
661 ACCESS_MASK AccessMask
,
668 RtlAddAccessAllowedAceEx(
670 IN ULONG dwAceRevision
,
672 IN ACCESS_MASK AccessMask
,
679 RtlAddAccessAllowedObjectAce(
681 IN ULONG dwAceRevision
,
683 IN ACCESS_MASK AccessMask
,
684 IN GUID
*ObjectTypeGuid OPTIONAL
,
685 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
692 RtlAddAccessDeniedAce(
695 ACCESS_MASK AccessMask
,
702 RtlAddAccessDeniedAceEx(
706 IN ACCESS_MASK AccessMask
,
713 RtlAddAccessDeniedObjectAce(
715 IN ULONG dwAceRevision
,
717 IN ACCESS_MASK AccessMask
,
718 IN GUID
*ObjectTypeGuid OPTIONAL
,
719 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
729 ULONG StartingAceIndex
,
737 RtlAddAuditAccessAce(
740 ACCESS_MASK AccessMask
,
753 OUT PVOID
*ReturnedState
759 RtlAddAuditAccessAceEx(
763 IN ACCESS_MASK AccessMask
,
772 RtlAddAuditAccessObjectAce(
776 IN ACCESS_MASK AccessMask
,
777 IN GUID
*ObjectTypeGuid OPTIONAL
,
778 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
791 IN ULONG MandatoryFlags
,
801 IN BOOLEAN ForThread
,
802 OUT PBOOLEAN OldValue
808 RtlAllocateAndInitializeSid(
809 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
810 IN UCHAR SubAuthorityCount
,
811 IN ULONG SubAuthority0
,
812 IN ULONG SubAuthority1
,
813 IN ULONG SubAuthority2
,
814 IN ULONG SubAuthority3
,
815 IN ULONG SubAuthority4
,
816 IN ULONG SubAuthority5
,
817 IN ULONG SubAuthority6
,
818 IN ULONG SubAuthority7
,
825 RtlAreAllAccessesGranted(
826 ACCESS_MASK GrantedAccess
,
827 ACCESS_MASK DesiredAccess
833 RtlAreAnyAccessesGranted(
834 ACCESS_MASK GrantedAccess
,
835 ACCESS_MASK DesiredAccess
849 RtlCopyLuidAndAttributesArray(
851 PLUID_AND_ATTRIBUTES Src
,
852 PLUID_AND_ATTRIBUTES Dest
858 RtlCopySidAndAttributesArray(
860 PSID_AND_ATTRIBUTES Src
,
862 PSID_AND_ATTRIBUTES Dest
,
864 PVOID
* RemainingSidArea
,
865 PULONG RemainingSidAreaSize
871 RtlConvertSidToUnicodeString(
872 OUT PUNICODE_STRING DestinationString
,
874 IN BOOLEAN AllocateDestinationString
898 RtlCreateSecurityDescriptor(
899 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
906 RtlCreateSecurityDescriptorRelative(
907 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor
,
914 RtlCopySecurityDescriptor(
915 IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor
,
916 OUT PSECURITY_DESCRIPTOR pDestinationSecurityDescriptor
970 RtlGetControlSecurityDescriptor(
971 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
972 OUT PSECURITY_DESCRIPTOR_CONTROL Control
,
979 RtlGetDaclSecurityDescriptor(
980 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
981 OUT PBOOLEAN DaclPresent
,
983 OUT PBOOLEAN DaclDefaulted
989 RtlGetSaclSecurityDescriptor(
990 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
991 OUT PBOOLEAN SaclPresent
,
993 OUT PBOOLEAN SaclDefaulted
999 RtlGetGroupSecurityDescriptor(
1000 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1002 OUT PBOOLEAN GroupDefaulted
1008 RtlGetOwnerSecurityDescriptor(
1009 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1011 OUT PBOOLEAN OwnerDefaulted
1017 RtlGetSecurityDescriptorRMControl(
1018 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1019 OUT PUCHAR RMControl
1023 PSID_IDENTIFIER_AUTHORITY
1025 RtlIdentifierAuthoritySid(PSID Sid
);
1030 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
1037 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1038 IN UCHAR SubAuthorityCount
1044 RtlLengthRequiredSid(IN ULONG SubAuthorityCount
);
1049 RtlLengthSid(IN PSID Sid
);
1054 RtlMakeSelfRelativeSD(
1055 IN PSECURITY_DESCRIPTOR AbsoluteSD
,
1056 OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1057 IN OUT PULONG BufferLength
);
1063 PACCESS_MASK AccessMask
,
1064 PGENERIC_MAPPING GenericMapping
1070 RtlQueryInformationAcl(
1073 ULONG InformationLength
,
1074 ACL_INFORMATION_CLASS InformationClass
1080 RtlReleasePrivilege(
1081 IN PVOID ReturnedState
1087 RtlSelfRelativeToAbsoluteSD(
1088 IN PSECURITY_DESCRIPTOR SelfRelativeSD
,
1089 OUT PSECURITY_DESCRIPTOR AbsoluteSD
,
1090 IN PULONG AbsoluteSDSize
,
1096 IN PULONG OwnerSize
,
1097 IN PSID PrimaryGroup
,
1098 IN PULONG PrimaryGroupSize
1104 RtlSelfRelativeToAbsoluteSD2(
1105 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1106 OUT PULONG BufferSize
1112 RtlSetAttributesSecurityDescriptor(
1113 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1114 IN SECURITY_DESCRIPTOR_CONTROL Control
,
1121 RtlSetControlSecurityDescriptor(
1122 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1123 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest
,
1124 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
1130 RtlSetDaclSecurityDescriptor (
1131 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1132 IN BOOLEAN DaclPresent
,
1134 IN BOOLEAN DaclDefaulted
1140 RtlSetGroupSecurityDescriptor(
1141 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1143 IN BOOLEAN GroupDefaulted
1149 RtlSetInformationAcl(
1152 ULONG InformationLength
,
1153 ACL_INFORMATION_CLASS InformationClass
1159 RtlSetOwnerSecurityDescriptor(
1160 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1162 IN BOOLEAN OwnerDefaulted
1168 RtlSetSaclSecurityDescriptor(
1169 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1170 IN BOOLEAN SaclPresent
,
1172 IN BOOLEAN SaclDefaulted
1178 RtlSetSecurityDescriptorRMControl(
1179 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1186 RtlSubAuthorityCountSid(
1195 IN ULONG SubAuthority
1201 RtlValidRelativeSecurityDescriptor(
1202 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
1203 IN ULONG SecurityDescriptorLength
,
1204 IN SECURITY_INFORMATION RequiredInformation
1210 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
1215 RtlValidSid(IN PSID Sid
);
1220 RtlValidAcl(PACL Acl
);
1225 RtlDeleteSecurityObject(
1226 IN PSECURITY_DESCRIPTOR
*ObjectDescriptor
1232 RtlNewSecurityObject(
1233 IN PSECURITY_DESCRIPTOR ParentDescriptor
,
1234 IN PSECURITY_DESCRIPTOR CreatorDescriptor
,
1235 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
1236 IN BOOLEAN IsDirectoryObject
,
1238 IN PGENERIC_MAPPING GenericMapping
1244 RtlQuerySecurityObject(
1245 IN PSECURITY_DESCRIPTOR ObjectDescriptor
,
1246 IN SECURITY_INFORMATION SecurityInformation
,
1247 OUT PSECURITY_DESCRIPTOR ResultantDescriptor
,
1248 IN ULONG DescriptorLength
,
1249 OUT PULONG ReturnLength
1255 RtlSetSecurityObject(
1256 IN SECURITY_INFORMATION SecurityInformation
,
1257 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
1258 OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
1259 IN PGENERIC_MAPPING GenericMapping
,
1264 // Single-Character Functions
1269 RtlLargeIntegerToChar(
1270 IN PLARGE_INTEGER Value
,
1279 RtlUpperChar(CHAR Source
);
1284 RtlUpcaseUnicodeChar(WCHAR Source
);
1289 RtlDowncaseUnicodeChar(IN WCHAR Source
);
1304 RtlIntegerToUnicode(
1306 IN ULONG Base OPTIONAL
,
1307 IN ULONG Length OPTIONAL
,
1308 IN OUT LPWSTR String
1314 RtlIntegerToUnicodeString(
1317 IN OUT PUNICODE_STRING String
1330 // Byte Swap Functions
1332 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
1333 ((defined(_M_AMD64) || \
1334 defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
1336 unsigned short __cdecl
_byteswap_ushort(unsigned short);
1337 unsigned long __cdecl
_byteswap_ulong (unsigned long);
1338 unsigned __int64 __cdecl
_byteswap_uint64(unsigned __int64
);
1339 #pragma intrinsic(_byteswap_ushort)
1340 #pragma intrinsic(_byteswap_ulong)
1341 #pragma intrinsic(_byteswap_uint64)
1342 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1343 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1344 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1351 RtlUshortByteSwap(IN USHORT Source
);
1356 RtlUlongByteSwap(IN ULONG Source
);
1361 RtlUlonglongByteSwap(IN ULONGLONG Source
);
1366 // Unicode->Ansi String Functions
1371 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString
);
1373 #ifdef NTOS_MODE_USER
1375 #define RtlUnicodeStringToAnsiSize(STRING) ( \
1376 NLS_MB_CODE_PAGE_TAG ? \
1377 RtlxUnicodeStringToAnsiSize(STRING) : \
1378 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1386 RtlUnicodeStringToAnsiString(
1387 PANSI_STRING DestinationString
,
1388 PCUNICODE_STRING SourceString
,
1389 BOOLEAN AllocateDestinationString
1393 // Unicode->OEM String Functions
1398 RtlUpcaseUnicodeStringToOemString(
1399 POEM_STRING DestinationString
,
1400 PCUNICODE_STRING SourceString
,
1401 BOOLEAN AllocateDestinationString
1407 RtlUpcaseUnicodeStringToCountedOemString(
1408 IN OUT POEM_STRING DestinationString
,
1409 IN PCUNICODE_STRING SourceString
,
1410 IN BOOLEAN AllocateDestinationString
1416 RtlUnicodeStringToOemString(
1417 POEM_STRING DestinationString
,
1418 PCUNICODE_STRING SourceString
,
1419 BOOLEAN AllocateDestinationString
1425 RtlUpcaseUnicodeToOemN(
1429 PWCHAR UnicodeString
,
1436 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString
);
1438 #ifdef NTOS_MODE_USER
1440 #define RtlUnicodeStringToOemSize(STRING) ( \
1441 NLS_MB_OEM_CODE_PAGE_TAG ? \
1442 RtlxUnicodeStringToOemSize(STRING) : \
1443 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1446 #define RtlUnicodeStringToCountedOemSize(STRING) ( \
1447 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
1459 PWCHAR UnicodeString
,
1464 // Unicode->MultiByte String Functions
1469 RtlUnicodeToMultiByteN(
1473 PWCHAR UnicodeString
,
1480 RtlUpcaseUnicodeToMultiByteN(
1484 PWCHAR UnicodeString
,
1491 RtlUnicodeToMultiByteSize(
1493 PWCHAR UnicodeString
,
1500 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString
);
1503 // OEM to Unicode Functions
1508 RtlOemStringToUnicodeString(
1509 PUNICODE_STRING DestinationString
,
1510 PCOEM_STRING SourceString
,
1511 BOOLEAN AllocateDestinationString
1518 PWSTR UnicodeString
,
1519 ULONG MaxBytesInUnicodeString
,
1520 PULONG BytesInUnicodeString
,
1522 ULONG BytesInOemString
1525 #ifdef NTOS_MODE_USER
1527 #define RtlOemStringToUnicodeSize(STRING) ( \
1528 NLS_MB_OEM_CODE_PAGE_TAG ? \
1529 RtlxOemStringToUnicodeSize(STRING) : \
1530 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1533 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1534 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1540 // Ansi->Unicode String Functions
1545 RtlxAnsiStringToUnicodeSize(
1546 PCANSI_STRING AnsiString
1552 RtlAnsiStringToUnicodeString(
1553 PUNICODE_STRING DestinationString
,
1554 PCANSI_STRING SourceString
,
1555 BOOLEAN AllocateDestinationString
1558 #ifdef NTOS_MODE_USER
1560 #define RtlAnsiStringToUnicodeSize(STRING) ( \
1561 NLS_MB_CODE_PAGE_TAG ? \
1562 RtlxAnsiStringToUnicodeSize(STRING) : \
1563 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1571 RtlCreateUnicodeStringFromAsciiz(
1572 OUT PUNICODE_STRING Destination
,
1577 // Unicode String Functions
1582 RtlAppendUnicodeToString(
1583 PUNICODE_STRING Destination
,
1590 RtlAppendUnicodeStringToString(
1591 PUNICODE_STRING Destination
,
1592 PCUNICODE_STRING Source
1598 RtlCompareUnicodeString(
1599 PCUNICODE_STRING String1
,
1600 PCUNICODE_STRING String2
,
1601 BOOLEAN CaseInsensitive
1607 RtlCopyUnicodeString(
1608 PUNICODE_STRING DestinationString
,
1609 PCUNICODE_STRING SourceString
1615 RtlCreateUnicodeString(
1616 PUNICODE_STRING DestinationString
,
1620 #ifdef NTOS_MODE_USER
1625 RtlDowncaseUnicodeString(
1626 IN OUT PUNICODE_STRING UniDest
,
1627 IN PCUNICODE_STRING UniSource
,
1628 IN BOOLEAN AllocateDestinationString
1634 RtlDuplicateUnicodeString(
1636 IN PCUNICODE_STRING SourceString
,
1637 OUT PUNICODE_STRING DestinationString
1645 RtlEqualUnicodeString(
1646 PCUNICODE_STRING String1
,
1647 PCUNICODE_STRING String2
,
1648 BOOLEAN CaseInsensitive
1654 RtlFindCharInUnicodeString(
1656 IN PUNICODE_STRING SearchString
,
1657 IN PCUNICODE_STRING MatchString
,
1658 OUT PUSHORT Position
1664 RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString
);
1669 RtlHashUnicodeString(
1670 IN CONST UNICODE_STRING
*String
,
1671 IN BOOLEAN CaseInSensitive
,
1672 IN ULONG HashAlgorithm
,
1673 OUT PULONG HashValue
1679 RtlInitUnicodeString(
1680 IN OUT PUNICODE_STRING DestinationString
,
1681 IN PCWSTR SourceString
1687 RtlInitUnicodeStringEx(
1688 OUT PUNICODE_STRING DestinationString
,
1689 IN PCWSTR SourceString OPTIONAL
1705 PCANSI_STRING String1
,
1706 PCANSI_STRING String2
,
1707 BOOLEAN CaseInsensitive
1713 RtlPrefixUnicodeString(
1714 PCUNICODE_STRING String1
,
1715 PCUNICODE_STRING String2
,
1716 BOOLEAN CaseInsensitive
1722 RtlUpcaseUnicodeString(
1723 PUNICODE_STRING DestinationString
,
1724 PCUNICODE_STRING SourceString
,
1725 BOOLEAN AllocateDestinationString
1731 RtlUnicodeStringToInteger(
1732 PCUNICODE_STRING String
,
1740 RtlValidateUnicodeString(
1742 IN PCUNICODE_STRING String
1746 // Ansi String Functions
1751 RtlFreeAnsiString(IN PANSI_STRING AnsiString
);
1757 PANSI_STRING DestinationString
,
1764 RtlInitAnsiStringEx(
1765 PANSI_STRING DestinationString
,
1770 // OEM String Functions
1775 RtlFreeOemString(IN POEM_STRING OemString
);
1778 // MultiByte->Unicode String Functions
1783 RtlMultiByteToUnicodeN(
1784 PWCHAR UnicodeString
,
1794 RtlMultiByteToUnicodeSize(
1806 RtlAddAtomToAtomTable(
1807 IN PRTL_ATOM_TABLE AtomTable
,
1817 IN OUT PRTL_ATOM_TABLE
*AtomTable
1823 RtlDeleteAtomFromAtomTable(
1824 IN PRTL_ATOM_TABLE AtomTable
,
1831 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable
);
1836 RtlQueryAtomInAtomTable(
1837 IN PRTL_ATOM_TABLE AtomTable
,
1839 IN OUT PULONG RefCount OPTIONAL
,
1840 IN OUT PULONG PinCount OPTIONAL
,
1841 IN OUT PWSTR AtomName OPTIONAL
,
1842 IN OUT PULONG NameLength OPTIONAL
1848 RtlPinAtomInAtomTable(
1849 IN PRTL_ATOM_TABLE AtomTable
,
1856 RtlLookupAtomInAtomTable(
1857 IN PRTL_ATOM_TABLE AtomTable
,
1869 IN PVOID Destination
,
1875 // Process Management Functions
1880 RtlAcquirePebLock(VOID
);
1885 RtlCreateProcessParameters (
1886 OUT PRTL_USER_PROCESS_PARAMETERS
*ProcessParameters
,
1887 IN PUNICODE_STRING ImagePathName OPTIONAL
,
1888 IN PUNICODE_STRING DllPath OPTIONAL
,
1889 IN PUNICODE_STRING CurrentDirectory OPTIONAL
,
1890 IN PUNICODE_STRING CommandLine OPTIONAL
,
1891 IN PWSTR Environment OPTIONAL
,
1892 IN PUNICODE_STRING WindowTitle OPTIONAL
,
1893 IN PUNICODE_STRING DesktopInfo OPTIONAL
,
1894 IN PUNICODE_STRING ShellInfo OPTIONAL
,
1895 IN PUNICODE_STRING RuntimeInfo OPTIONAL
1901 RtlCreateUserProcess(
1902 IN PUNICODE_STRING ImageFileName
,
1903 IN ULONG Attributes
,
1904 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
,
1905 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL
,
1906 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL
,
1907 IN HANDLE ParentProcess OPTIONAL
,
1908 IN BOOLEAN CurrentDirectory
,
1909 IN HANDLE DebugPort OPTIONAL
,
1910 IN HANDLE ExceptionPort OPTIONAL
,
1911 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
1917 RtlCreateUserThread(
1918 IN HANDLE ProcessHandle
,
1919 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1920 IN BOOLEAN CreateSuspended
,
1921 IN ULONG StackZeroBits
,
1922 IN SIZE_T StackReserve
,
1923 IN SIZE_T StackCommit
,
1924 IN PTHREAD_START_ROUTINE StartAddress
,
1926 IN OUT PHANDLE ThreadHandle
,
1927 IN OUT PCLIENT_ID ClientId
1931 PRTL_USER_PROCESS_PARAMETERS
1933 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
1938 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
1943 RtlExitUserThread(NTSTATUS Status
);
1948 RtlInitializeContext(
1949 IN HANDLE ProcessHandle
,
1950 OUT PCONTEXT ThreadContext
,
1951 IN PVOID ThreadStartParam OPTIONAL
,
1952 IN PTHREAD_START_ROUTINE ThreadStartAddress
,
1953 IN PINITIAL_TEB InitialTeb
1957 PRTL_USER_PROCESS_PARAMETERS
1959 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
1964 RtlReleasePebLock(VOID
);
1969 RtlSetProcessIsCritical(
1970 IN BOOLEAN NewValue
,
1971 OUT PBOOLEAN OldValue OPTIONAL
,
1972 IN BOOLEAN IsWinlogon
1975 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
1978 // Thread Pool Functions
1983 RtlDeregisterWaitEx(
1984 IN HANDLE hWaitHandle
,
1985 IN HANDLE hCompletionEvent
1992 IN HANDLE hWaitHandle
1999 IN WORKERCALLBACKFUNC Function
,
2000 IN PVOID Context OPTIONAL
,
2008 IN PHANDLE phNewWaitObject
,
2010 IN WAITORTIMERCALLBACKFUNC Callback
,
2012 IN ULONG ulMilliseconds
,
2017 // Environment/Path Functions
2022 RtlCreateEnvironment(
2030 RtlComputePrivatizedDllName_U(
2031 IN PUNICODE_STRING DllName
,
2032 OUT PUNICODE_STRING RealName
,
2033 OUT PUNICODE_STRING LocalName
2039 RtlDestroyEnvironment(
2040 IN PWSTR Environment
2046 RtlDoesFileExists_U(
2053 RtlDoesFileExists_UstrEx(
2054 IN PCUNICODE_STRING FileName
,
2055 IN BOOLEAN SucceedIfBusy
2061 RtlDetermineDosPathNameType_U(
2068 RtlDetermineDosPathNameType_Ustr(
2069 IN PCUNICODE_STRING Path
2078 IN PCWSTR Extension
,
2079 IN ULONG BufferSize
,
2087 RtlDosPathNameToNtPathName_U(
2088 IN PCWSTR DosPathName
,
2089 OUT PUNICODE_STRING NtPathName
,
2090 OUT PCWSTR
*NtFileNamePart
,
2091 OUT CURDIR
*DirectoryInfo
2097 RtlExpandEnvironmentStrings_U(
2099 PUNICODE_STRING Source
,
2100 PUNICODE_STRING Destination
,
2107 RtlGetCurrentDirectory_U(
2108 ULONG MaximumLength
,
2115 RtlGetFullPathName_U(
2119 OUT PWSTR
*ShortName
2125 RtlGetFullPathName_Ustr(
2126 IN PUNICODE_STRING FileName
,
2129 OUT PWSTR
*ShortName
,
2130 OUT PBOOLEAN InvalidName
,
2131 OUT RTL_PATH_TYPE
*PathType
2137 RtlIsDosDeviceName_U(
2144 RtlIsDosDeviceName_Ustr(
2145 IN PUNICODE_STRING Name
2152 RtlIsNameLegalDOS8Dot3(
2153 IN PCUNICODE_STRING Name
,
2154 IN OUT POEM_STRING OemName OPTIONAL
,
2155 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2161 RtlQueryEnvironmentVariable_U(
2163 PUNICODE_STRING Name
,
2164 PUNICODE_STRING Value
2170 RtlSetCurrentDirectory_U(
2171 IN PUNICODE_STRING name
2177 RtlSetEnvironmentVariable(
2179 PUNICODE_STRING Name
,
2180 PUNICODE_STRING Value
2184 // Critical Section/Resource Functions
2189 RtlDeleteCriticalSection (
2190 IN PRTL_CRITICAL_SECTION CriticalSection
2196 RtlEnterCriticalSection(
2197 IN PRTL_CRITICAL_SECTION CriticalSection
2203 RtlInitializeCriticalSection(
2204 IN PRTL_CRITICAL_SECTION CriticalSection
2210 RtlInitializeCriticalSectionAndSpinCount(
2211 IN PRTL_CRITICAL_SECTION CriticalSection
,
2218 RtlLeaveCriticalSection(
2219 IN PRTL_CRITICAL_SECTION CriticalSection
2225 RtlTryEnterCriticalSection(
2226 IN PRTL_CRITICAL_SECTION CriticalSection
2232 RtlpUnWaitCriticalSection(
2233 IN PRTL_CRITICAL_SECTION CriticalSection
2239 RtlpWaitForCriticalSection(
2240 IN PRTL_CRITICAL_SECTION CriticalSection
2246 RtlAcquireResourceExclusive(
2247 IN PRTL_RESOURCE Resource
,
2254 RtlAcquireResourceShared(
2255 IN PRTL_RESOURCE Resource
,
2262 RtlConvertExclusiveToShared(
2263 IN PRTL_RESOURCE Resource
2269 RtlConvertSharedToExclusive(
2270 IN PRTL_RESOURCE Resource
2277 IN PRTL_RESOURCE Resource
2284 IN PRTL_RESOURCE Resource
2290 RtlInitializeResource(
2291 IN PRTL_RESOURCE Resource
2298 IN PRTL_RESOURCE Resource
2302 // Compression Functions
2308 IN USHORT CompressionFormatAndEngine
,
2309 IN PUCHAR UncompressedBuffer
,
2310 IN ULONG UncompressedBufferSize
,
2311 OUT PUCHAR CompressedBuffer
,
2312 IN ULONG CompressedBufferSize
,
2313 IN ULONG UncompressedChunkSize
,
2314 OUT PULONG FinalCompressedSize
,
2321 RtlDecompressBuffer(
2322 IN USHORT CompressionFormat
,
2323 OUT PUCHAR UncompressedBuffer
,
2324 IN ULONG UncompressedBufferSize
,
2325 IN PUCHAR CompressedBuffer
,
2326 IN ULONG CompressedBufferSize
,
2327 OUT PULONG FinalUncompressedSize
2333 RtlGetCompressionWorkSpaceSize(
2334 IN USHORT CompressionFormatAndEngine
,
2335 OUT PULONG CompressBufferWorkSpaceSize
,
2336 OUT PULONG CompressFragmentWorkSpaceSize
2340 // Debug Info Functions
2343 PRTL_DEBUG_INFORMATION
2345 RtlCreateQueryDebugBuffer(
2347 IN BOOLEAN EventPair
2353 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer
);
2358 RtlQueryProcessDebugInformation(
2360 IN ULONG DebugInfoClassMask
,
2361 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2371 IN PRTL_BITMAP BitMapHeader
,
2372 IN ULONG StartingIndex
,
2380 IN PRTL_BITMAP BitMapHeader
,
2381 IN ULONG StartingIndex
,
2389 IN PRTL_BITMAP BitMapHeader
,
2390 IN ULONG StartingIndex
,
2391 IN ULONG NumberToClear
2398 IN PRTL_BITMAP BitMapHeader
,
2399 IN ULONG NumberToFind
,
2406 RtlFindClearBitsAndSet(
2407 IN PRTL_BITMAP BitMapHeader
,
2408 IN ULONG NumberToFind
,
2415 RtlFindNextForwardRunClear(
2416 IN PRTL_BITMAP BitMapHeader
,
2418 IN PULONG StartingRunIndex
2424 RtlInitializeBitMap(
2425 IN PRTL_BITMAP BitMapHeader
,
2426 IN PULONG BitMapBuffer
,
2427 IN ULONG SizeOfBitMap
2434 IN PRTL_BITMAP BitMapHeader
2441 PRTL_BITMAP BitMapHeader
,
2449 IN PRTL_BITMAP BitMapHeader
,
2450 IN ULONG StartingIndex
,
2451 IN ULONG NumberToSet
2458 PRTL_BITMAP BitMapHeader
2465 PRTL_BITMAP BitMapHeader
,
2478 WAITORTIMERCALLBACKFUNC Callback
,
2488 RtlCreateTimerQueue(PHANDLE TimerQueue
);
2496 HANDLE CompletionEvent
2512 RtlDeleteTimerQueueEx(
2514 HANDLE CompletionEvent
2520 RtlDeleteTimerQueue(HANDLE TimerQueue
);
2527 InterlockedPushListSList(
2528 IN PSLIST_HEADER ListHead
,
2529 IN PSLIST_ENTRY List
,
2530 IN PSLIST_ENTRY ListEnd
,
2535 // Range List functions
2540 RtlFreeRangeList(IN PRTL_RANGE_LIST RangeList
);
2556 IN ULONG ComponentId
,
2567 IN ULONG MaximumResponseLength
2578 DbgLoadImageSymbols(
2579 IN PANSI_STRING Name
,
2581 IN ULONG_PTR ProcessId
2586 DbgUnLoadImageSymbols(
2587 IN PANSI_STRING Name
,
2589 IN ULONG_PTR ProcessId
2593 // Generic Table Functions
2595 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
2598 RtlInsertElementGenericTable(
2599 IN PRTL_GENERIC_TABLE Table
,
2601 IN ULONG BufferSize
,
2602 OUT PBOOLEAN NewElement OPTIONAL
2607 RtlInsertElementGenericTableFull(
2608 IN PRTL_GENERIC_TABLE Table
,
2610 IN ULONG BufferSize
,
2611 OUT PBOOLEAN NewElement OPTIONAL
,
2612 IN PVOID NodeOrParent
,
2613 IN TABLE_SEARCH_RESULT SearchResult
2618 RtlIsGenericTableEmpty(
2619 IN PRTL_GENERIC_TABLE Table
2624 RtlLookupElementGenericTableFull(
2625 IN PRTL_GENERIC_TABLE Table
,
2627 OUT PVOID
*NodeOrParent
,
2628 OUT TABLE_SEARCH_RESULT
*SearchResult
2633 // Handle Table Functions
2636 PRTL_HANDLE_TABLE_ENTRY
2639 IN PRTL_HANDLE_TABLE HandleTable
,
2646 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable
);
2652 IN PRTL_HANDLE_TABLE HandleTable
,
2653 IN PRTL_HANDLE_TABLE_ENTRY Handle
2659 RtlInitializeHandleTable(
2661 IN ULONG HandleSize
,
2662 IN PRTL_HANDLE_TABLE HandleTable
2669 IN PRTL_HANDLE_TABLE HandleTable
,
2670 IN PRTL_HANDLE_TABLE_ENTRY Handle
2676 RtlIsValidIndexHandle(
2677 IN PRTL_HANDLE_TABLE HandleTable
,
2679 OUT PRTL_HANDLE_TABLE_ENTRY
*Handle
2689 IN PVOID BaseAddress
,
2693 OUT PRTL_MESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
2699 RtlGetNtGlobalFlags(VOID
);
2704 RtlImageDirectoryEntryToData(
2706 BOOLEAN MappedAsImage
,
2715 PIMAGE_NT_HEADERS NtHeader
,
2718 PIMAGE_SECTION_HEADER
*SectionHeader
2724 RtlImageNtHeader(IN PVOID BaseAddress
);
2731 IN PVOID BaseAddress
,
2733 IN PIMAGE_NT_HEADERS
*NtHeader
2737 PIMAGE_SECTION_HEADER
2739 RtlImageRvaToSection(
2740 PIMAGE_NT_HEADERS NtHeader
,
2748 LdrRelocateImageWithBias(
2749 IN PVOID NewAddress
,
2750 IN LONGLONG AdditionalBias
,
2758 // Activation Context Functions
2760 #ifdef NTOS_MODE_USER
2764 RtlActivateActivationContextUnsafeFast(
2765 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
,
2772 RtlAllocateActivationContextStack(
2779 RtlGetActiveActivationContext(
2786 RtlReleaseActivationContext(
2793 RtlDeactivateActivationContextUnsafeFast(
2794 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
2800 RtlDosApplyFileIsolationRedirection_Ustr(
2802 IN PUNICODE_STRING OriginalName
,
2803 IN PUNICODE_STRING Extension
,
2804 IN OUT PUNICODE_STRING RedirectedName
,
2805 IN OUT PUNICODE_STRING RedirectedName2
,
2806 IN OUT PUNICODE_STRING
*OriginalName2
,
2815 RtlFindActivationContextSectionString(
2818 IN ULONG SectionType
,
2819 IN PUNICODE_STRING SectionName
,
2825 // Registry Functions
2830 RtlCheckRegistryKey(
2838 RtlCreateRegistryKey(
2839 IN ULONG RelativeTo
,
2846 RtlFormatCurrentUserKeyPath(
2847 IN OUT PUNICODE_STRING KeyPath
2854 OUT HANDLE KeyHandle
,
2855 IN ACCESS_MASK DesiredAccess
,
2856 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2864 IN ACCESS_MASK DesiredAccess
,
2865 OUT PHANDLE KeyHandle
2871 RtlQueryRegistryValues(
2872 IN ULONG RelativeTo
,
2874 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
2876 IN PVOID Environment
2882 RtlWriteRegistryValue(
2897 RtlGetDefaultCodePage(
2898 OUT PUSHORT AnsiCodePage
,
2899 OUT PUSHORT OemCodePage
2906 IN PUSHORT AnsiTableBase
,
2907 IN PUSHORT OemTableBase
,
2908 IN PUSHORT CaseTableBase
,
2909 OUT PNLSTABLEINFO NlsTable
2915 RtlInitCodePageTable(
2916 IN PUSHORT TableBase
,
2917 OUT PCPTABLEINFO CodePageTable
2923 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable
);
2925 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
2928 // Misc conversion functions
2933 RtlConvertLongToLargeInteger(
2937 LARGE_INTEGER Result
;
2939 Result
.QuadPart
= SignedInteger
;
2946 RtlEnlargedIntegerMultiply(
2951 LARGE_INTEGER Product
;
2953 Product
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
2960 RtlEnlargedUnsignedDivide(
2961 IN ULARGE_INTEGER Dividend
,
2963 IN PULONG Remainder OPTIONAL
2968 Quotient
= (ULONG
)(Dividend
.QuadPart
/ Divisor
);
2970 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
2979 RtlEnlargedUnsignedMultiply(
2984 LARGE_INTEGER Product
;
2986 Product
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3009 IN USHORT PartialCrc
,
3015 // Network Functions
3020 RtlIpv4StringToAddressW(
3023 OUT PWCHAR Terminator
,
3024 OUT
struct in_addr
*Addr
3030 RtlIpv6StringToAddressA(
3032 OUT PCHAR
*Terminator
,
3033 OUT
struct in6_addr
*Addr
3039 RtlIpv6StringToAddressW(
3041 OUT PCHAR
*Terminator
,
3042 OUT
struct in6_addr
*Addr
3048 RtlIpv6StringToAddressExA(
3049 IN PCHAR AddressString
,
3050 IN
struct in6_addr
*Address
,
3058 RtlIpv6StringToAddressExW(
3059 IN PWCHAR AddressName
,
3060 IN
struct in6_addr
*Address
,
3072 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3077 RtlSecondsSince1970ToTime(
3078 IN ULONG SecondsSince1970
,
3079 OUT PLARGE_INTEGER Time
3085 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3090 RtlTimeFieldsToTime(
3091 PTIME_FIELDS TimeFields
,
3098 RtlTimeToSecondsSince1970(
3099 PLARGE_INTEGER Time
,
3100 OUT PULONG SecondsSince1970
3106 RtlTimeToTimeFields(
3107 PLARGE_INTEGER Time
,
3108 PTIME_FIELDS TimeFields
3114 RtlSystemTimeToLocalTime(
3115 IN PLARGE_INTEGER SystemTime
,
3116 OUT PLARGE_INTEGER LocalTime
3120 // Version Functions
3125 RtlVerifyVersionInfo(
3126 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3128 IN ULONGLONG ConditionMask
3134 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3139 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType
);
3142 // Secure Memory Functions
3144 #ifdef NTOS_MODE_USER
3148 RtlRegisterSecureMemoryCacheCallback(
3149 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback
);
3154 RtlFlushSecureMemoryCache(
3155 IN PVOID MemoryCache
,
3156 IN OPTIONAL SIZE_T MemoryLength