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 RtlNtStatusToDosErrorNoTeb(
420 RtlSetLastWin32ErrorAndNtStatusFromNtStatus(
428 IN PEXCEPTION_RECORD ExceptionRecord
441 RtlUnhandledExceptionFilter(
442 IN
struct _EXCEPTION_POINTERS
* ExceptionInfo
449 IN PVOID TargetFrame OPTIONAL
,
450 IN PVOID TargetIp OPTIONAL
,
451 IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL
,
470 RtlLogStackBackTrace(
481 IN HANDLE HeapHandle
,
491 IN PVOID BaseAddress OPTIONAL
,
492 IN SIZE_T SizeToReserve OPTIONAL
,
493 IN SIZE_T SizeToCommit OPTIONAL
,
494 IN PVOID Lock OPTIONAL
,
495 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
502 IN HANDLE HeapHandle
,
520 IN PVOID BaseAddress OPTIONAL
,
521 IN SIZE_T SizeToReserve OPTIONAL
,
522 IN SIZE_T SizeToCommit OPTIONAL
,
523 IN PVOID Lock OPTIONAL
,
524 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
548 IN HANDLE HeapHandle
,
572 IN PVOID BaseAddress
,
573 OUT PVOID
*UserValue
,
592 IN BOOLEAN ResetCounters
,
593 OUT PRTL_HEAP_TAG_INFO HeapTagInfo
619 OUT PRTL_HEAP_USAGE Usage
634 IN PVOID BaseAddress
,
643 IN PVOID BaseAddress
,
653 IN PVOID MemoryPointer
669 IN HANDLE HeapHandle
,
673 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
676 // Security Functions
681 RtlAbsoluteToSelfRelativeSD(
682 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
683 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
684 IN PULONG BufferLength
690 RtlAddAccessAllowedAce(
693 ACCESS_MASK AccessMask
,
700 RtlAddAccessAllowedAceEx(
702 IN ULONG dwAceRevision
,
704 IN ACCESS_MASK AccessMask
,
711 RtlAddAccessAllowedObjectAce(
713 IN ULONG dwAceRevision
,
715 IN ACCESS_MASK AccessMask
,
716 IN GUID
*ObjectTypeGuid OPTIONAL
,
717 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
724 RtlAddAccessDeniedAce(
727 ACCESS_MASK AccessMask
,
734 RtlAddAccessDeniedAceEx(
738 IN ACCESS_MASK AccessMask
,
745 RtlAddAccessDeniedObjectAce(
747 IN ULONG dwAceRevision
,
749 IN ACCESS_MASK AccessMask
,
750 IN GUID
*ObjectTypeGuid OPTIONAL
,
751 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
761 ULONG StartingAceIndex
,
769 RtlAddAuditAccessAce(
772 ACCESS_MASK AccessMask
,
785 OUT PVOID
*ReturnedState
791 RtlAddAuditAccessAceEx(
795 IN ACCESS_MASK AccessMask
,
804 RtlAddAuditAccessObjectAce(
808 IN ACCESS_MASK AccessMask
,
809 IN GUID
*ObjectTypeGuid OPTIONAL
,
810 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
823 IN ULONG MandatoryFlags
,
833 IN BOOLEAN ForThread
,
834 OUT PBOOLEAN OldValue
840 RtlAllocateAndInitializeSid(
841 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
842 IN UCHAR SubAuthorityCount
,
843 IN ULONG SubAuthority0
,
844 IN ULONG SubAuthority1
,
845 IN ULONG SubAuthority2
,
846 IN ULONG SubAuthority3
,
847 IN ULONG SubAuthority4
,
848 IN ULONG SubAuthority5
,
849 IN ULONG SubAuthority6
,
850 IN ULONG SubAuthority7
,
857 RtlAreAllAccessesGranted(
858 ACCESS_MASK GrantedAccess
,
859 ACCESS_MASK DesiredAccess
865 RtlAreAnyAccessesGranted(
866 ACCESS_MASK GrantedAccess
,
867 ACCESS_MASK DesiredAccess
881 RtlCopyLuidAndAttributesArray(
883 PLUID_AND_ATTRIBUTES Src
,
884 PLUID_AND_ATTRIBUTES Dest
890 RtlCopySidAndAttributesArray(
892 PSID_AND_ATTRIBUTES Src
,
894 PSID_AND_ATTRIBUTES Dest
,
896 PVOID
* RemainingSidArea
,
897 PULONG RemainingSidAreaSize
903 RtlConvertSidToUnicodeString(
904 OUT PUNICODE_STRING DestinationString
,
906 IN BOOLEAN AllocateDestinationString
930 RtlCreateSecurityDescriptor(
931 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
938 RtlCreateSecurityDescriptorRelative(
939 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor
,
946 RtlCopySecurityDescriptor(
947 IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor
,
948 OUT PSECURITY_DESCRIPTOR pDestinationSecurityDescriptor
1002 RtlGetControlSecurityDescriptor(
1003 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1004 OUT PSECURITY_DESCRIPTOR_CONTROL Control
,
1011 RtlGetDaclSecurityDescriptor(
1012 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1013 OUT PBOOLEAN DaclPresent
,
1015 OUT PBOOLEAN DaclDefaulted
1021 RtlGetSaclSecurityDescriptor(
1022 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1023 OUT PBOOLEAN SaclPresent
,
1025 OUT PBOOLEAN SaclDefaulted
1031 RtlGetGroupSecurityDescriptor(
1032 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1034 OUT PBOOLEAN GroupDefaulted
1040 RtlGetOwnerSecurityDescriptor(
1041 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1043 OUT PBOOLEAN OwnerDefaulted
1049 RtlGetSecurityDescriptorRMControl(
1050 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1051 OUT PUCHAR RMControl
1055 PSID_IDENTIFIER_AUTHORITY
1057 RtlIdentifierAuthoritySid(PSID Sid
);
1062 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
1069 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1070 IN UCHAR SubAuthorityCount
1076 RtlLengthRequiredSid(IN ULONG SubAuthorityCount
);
1081 RtlLengthSid(IN PSID Sid
);
1086 RtlMakeSelfRelativeSD(
1087 IN PSECURITY_DESCRIPTOR AbsoluteSD
,
1088 OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1089 IN OUT PULONG BufferLength
);
1095 PACCESS_MASK AccessMask
,
1096 PGENERIC_MAPPING GenericMapping
1102 RtlQueryInformationAcl(
1105 ULONG InformationLength
,
1106 ACL_INFORMATION_CLASS InformationClass
1112 RtlReleasePrivilege(
1113 IN PVOID ReturnedState
1119 RtlSelfRelativeToAbsoluteSD(
1120 IN PSECURITY_DESCRIPTOR SelfRelativeSD
,
1121 OUT PSECURITY_DESCRIPTOR AbsoluteSD
,
1122 IN PULONG AbsoluteSDSize
,
1128 IN PULONG OwnerSize
,
1129 IN PSID PrimaryGroup
,
1130 IN PULONG PrimaryGroupSize
1136 RtlSelfRelativeToAbsoluteSD2(
1137 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1138 OUT PULONG BufferSize
1144 RtlSetAttributesSecurityDescriptor(
1145 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1146 IN SECURITY_DESCRIPTOR_CONTROL Control
,
1153 RtlSetControlSecurityDescriptor(
1154 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1155 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest
,
1156 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
1162 RtlSetDaclSecurityDescriptor (
1163 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1164 IN BOOLEAN DaclPresent
,
1166 IN BOOLEAN DaclDefaulted
1172 RtlSetGroupSecurityDescriptor(
1173 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1175 IN BOOLEAN GroupDefaulted
1181 RtlSetInformationAcl(
1184 ULONG InformationLength
,
1185 ACL_INFORMATION_CLASS InformationClass
1191 RtlSetOwnerSecurityDescriptor(
1192 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1194 IN BOOLEAN OwnerDefaulted
1200 RtlSetSaclSecurityDescriptor(
1201 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1202 IN BOOLEAN SaclPresent
,
1204 IN BOOLEAN SaclDefaulted
1210 RtlSetSecurityDescriptorRMControl(
1211 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1218 RtlSubAuthorityCountSid(
1227 IN ULONG SubAuthority
1233 RtlValidRelativeSecurityDescriptor(
1234 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
1235 IN ULONG SecurityDescriptorLength
,
1236 IN SECURITY_INFORMATION RequiredInformation
1242 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
1247 RtlValidSid(IN PSID Sid
);
1252 RtlValidAcl(PACL Acl
);
1257 RtlDeleteSecurityObject(
1258 IN PSECURITY_DESCRIPTOR
*ObjectDescriptor
1264 RtlNewSecurityObject(
1265 IN PSECURITY_DESCRIPTOR ParentDescriptor
,
1266 IN PSECURITY_DESCRIPTOR CreatorDescriptor
,
1267 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
1268 IN BOOLEAN IsDirectoryObject
,
1270 IN PGENERIC_MAPPING GenericMapping
1276 RtlQuerySecurityObject(
1277 IN PSECURITY_DESCRIPTOR ObjectDescriptor
,
1278 IN SECURITY_INFORMATION SecurityInformation
,
1279 OUT PSECURITY_DESCRIPTOR ResultantDescriptor
,
1280 IN ULONG DescriptorLength
,
1281 OUT PULONG ReturnLength
1287 RtlSetSecurityObject(
1288 IN SECURITY_INFORMATION SecurityInformation
,
1289 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
1290 OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
1291 IN PGENERIC_MAPPING GenericMapping
,
1296 // Single-Character Functions
1301 RtlLargeIntegerToChar(
1302 IN PLARGE_INTEGER Value
,
1311 RtlUpperChar(CHAR Source
);
1316 RtlUpcaseUnicodeChar(WCHAR Source
);
1321 RtlDowncaseUnicodeChar(IN WCHAR Source
);
1336 RtlIntegerToUnicode(
1338 IN ULONG Base OPTIONAL
,
1339 IN ULONG Length OPTIONAL
,
1340 IN OUT LPWSTR String
1346 RtlIntegerToUnicodeString(
1349 IN OUT PUNICODE_STRING String
1362 // Byte Swap Functions
1364 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
1365 ((defined(_M_AMD64) || \
1366 defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
1368 unsigned short __cdecl
_byteswap_ushort(unsigned short);
1369 unsigned long __cdecl
_byteswap_ulong (unsigned long);
1370 unsigned __int64 __cdecl
_byteswap_uint64(unsigned __int64
);
1371 #pragma intrinsic(_byteswap_ushort)
1372 #pragma intrinsic(_byteswap_ulong)
1373 #pragma intrinsic(_byteswap_uint64)
1374 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1375 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1376 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1383 RtlUshortByteSwap(IN USHORT Source
);
1388 RtlUlongByteSwap(IN ULONG Source
);
1393 RtlUlonglongByteSwap(IN ULONGLONG Source
);
1398 // Unicode->Ansi String Functions
1403 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString
);
1405 #ifdef NTOS_MODE_USER
1407 #define RtlUnicodeStringToAnsiSize(STRING) ( \
1408 NLS_MB_CODE_PAGE_TAG ? \
1409 RtlxUnicodeStringToAnsiSize(STRING) : \
1410 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1418 RtlUnicodeStringToAnsiString(
1419 PANSI_STRING DestinationString
,
1420 PCUNICODE_STRING SourceString
,
1421 BOOLEAN AllocateDestinationString
1425 // Unicode->OEM String Functions
1430 RtlUpcaseUnicodeStringToOemString(
1431 POEM_STRING DestinationString
,
1432 PCUNICODE_STRING SourceString
,
1433 BOOLEAN AllocateDestinationString
1439 RtlUpcaseUnicodeStringToCountedOemString(
1440 IN OUT POEM_STRING DestinationString
,
1441 IN PCUNICODE_STRING SourceString
,
1442 IN BOOLEAN AllocateDestinationString
1448 RtlUnicodeStringToOemString(
1449 POEM_STRING DestinationString
,
1450 PCUNICODE_STRING SourceString
,
1451 BOOLEAN AllocateDestinationString
1457 RtlUpcaseUnicodeToOemN(
1461 PWCHAR UnicodeString
,
1468 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString
);
1470 #ifdef NTOS_MODE_USER
1472 #define RtlUnicodeStringToOemSize(STRING) ( \
1473 NLS_MB_OEM_CODE_PAGE_TAG ? \
1474 RtlxUnicodeStringToOemSize(STRING) : \
1475 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1478 #define RtlUnicodeStringToCountedOemSize(STRING) ( \
1479 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
1491 PWCHAR UnicodeString
,
1496 // Unicode->MultiByte String Functions
1501 RtlUnicodeToMultiByteN(
1505 PWCHAR UnicodeString
,
1512 RtlUpcaseUnicodeToMultiByteN(
1516 PWCHAR UnicodeString
,
1523 RtlUnicodeToMultiByteSize(
1525 PWCHAR UnicodeString
,
1532 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString
);
1535 // OEM to Unicode Functions
1540 RtlOemStringToUnicodeString(
1541 PUNICODE_STRING DestinationString
,
1542 PCOEM_STRING SourceString
,
1543 BOOLEAN AllocateDestinationString
1550 PWSTR UnicodeString
,
1551 ULONG MaxBytesInUnicodeString
,
1552 PULONG BytesInUnicodeString
,
1554 ULONG BytesInOemString
1557 #ifdef NTOS_MODE_USER
1559 #define RtlOemStringToUnicodeSize(STRING) ( \
1560 NLS_MB_OEM_CODE_PAGE_TAG ? \
1561 RtlxOemStringToUnicodeSize(STRING) : \
1562 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1565 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1566 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1572 // Ansi->Unicode String Functions
1577 RtlxAnsiStringToUnicodeSize(
1578 PCANSI_STRING AnsiString
1584 RtlAnsiStringToUnicodeString(
1585 PUNICODE_STRING DestinationString
,
1586 PCANSI_STRING SourceString
,
1587 BOOLEAN AllocateDestinationString
1590 #ifdef NTOS_MODE_USER
1592 #define RtlAnsiStringToUnicodeSize(STRING) ( \
1593 NLS_MB_CODE_PAGE_TAG ? \
1594 RtlxAnsiStringToUnicodeSize(STRING) : \
1595 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1603 RtlCreateUnicodeStringFromAsciiz(
1604 OUT PUNICODE_STRING Destination
,
1609 // Unicode String Functions
1614 RtlAppendUnicodeToString(
1615 PUNICODE_STRING Destination
,
1622 RtlAppendUnicodeStringToString(
1623 PUNICODE_STRING Destination
,
1624 PCUNICODE_STRING Source
1630 RtlCompareUnicodeString(
1631 PCUNICODE_STRING String1
,
1632 PCUNICODE_STRING String2
,
1633 BOOLEAN CaseInsensitive
1639 RtlCopyUnicodeString(
1640 PUNICODE_STRING DestinationString
,
1641 PCUNICODE_STRING SourceString
1647 RtlCreateUnicodeString(
1648 PUNICODE_STRING DestinationString
,
1652 #ifdef NTOS_MODE_USER
1657 RtlDowncaseUnicodeString(
1658 IN OUT PUNICODE_STRING UniDest
,
1659 IN PCUNICODE_STRING UniSource
,
1660 IN BOOLEAN AllocateDestinationString
1666 RtlDuplicateUnicodeString(
1668 IN PCUNICODE_STRING SourceString
,
1669 OUT PUNICODE_STRING DestinationString
1677 RtlEqualUnicodeString(
1678 PCUNICODE_STRING String1
,
1679 PCUNICODE_STRING String2
,
1680 BOOLEAN CaseInsensitive
1686 RtlFindCharInUnicodeString(
1688 IN PUNICODE_STRING SearchString
,
1689 IN PCUNICODE_STRING MatchString
,
1690 OUT PUSHORT Position
1696 RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString
);
1701 RtlHashUnicodeString(
1702 IN CONST UNICODE_STRING
*String
,
1703 IN BOOLEAN CaseInSensitive
,
1704 IN ULONG HashAlgorithm
,
1705 OUT PULONG HashValue
1711 RtlInitUnicodeString(
1712 IN OUT PUNICODE_STRING DestinationString
,
1713 IN PCWSTR SourceString
1719 RtlInitUnicodeStringEx(
1720 OUT PUNICODE_STRING DestinationString
,
1721 IN PCWSTR SourceString OPTIONAL
1737 PCANSI_STRING String1
,
1738 PCANSI_STRING String2
,
1739 BOOLEAN CaseInsensitive
1745 RtlPrefixUnicodeString(
1746 PCUNICODE_STRING String1
,
1747 PCUNICODE_STRING String2
,
1748 BOOLEAN CaseInsensitive
1754 RtlUpcaseUnicodeString(
1755 PUNICODE_STRING DestinationString
,
1756 PCUNICODE_STRING SourceString
,
1757 BOOLEAN AllocateDestinationString
1763 RtlUnicodeStringToInteger(
1764 PCUNICODE_STRING String
,
1772 RtlValidateUnicodeString(
1774 IN PCUNICODE_STRING String
1778 // Ansi String Functions
1783 RtlFreeAnsiString(IN PANSI_STRING AnsiString
);
1789 PANSI_STRING DestinationString
,
1796 RtlInitAnsiStringEx(
1797 PANSI_STRING DestinationString
,
1802 // OEM String Functions
1807 RtlFreeOemString(IN POEM_STRING OemString
);
1810 // MultiByte->Unicode String Functions
1815 RtlMultiByteToUnicodeN(
1816 PWCHAR UnicodeString
,
1826 RtlMultiByteToUnicodeSize(
1838 RtlAddAtomToAtomTable(
1839 IN PRTL_ATOM_TABLE AtomTable
,
1849 IN OUT PRTL_ATOM_TABLE
*AtomTable
1855 RtlDeleteAtomFromAtomTable(
1856 IN PRTL_ATOM_TABLE AtomTable
,
1863 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable
);
1868 RtlQueryAtomInAtomTable(
1869 IN PRTL_ATOM_TABLE AtomTable
,
1871 IN OUT PULONG RefCount OPTIONAL
,
1872 IN OUT PULONG PinCount OPTIONAL
,
1873 IN OUT PWSTR AtomName OPTIONAL
,
1874 IN OUT PULONG NameLength OPTIONAL
1880 RtlPinAtomInAtomTable(
1881 IN PRTL_ATOM_TABLE AtomTable
,
1888 RtlLookupAtomInAtomTable(
1889 IN PRTL_ATOM_TABLE AtomTable
,
1901 IN PVOID Destination
,
1907 // Process Management Functions
1919 RtlAcquirePebLock(VOID
);
1924 RtlCreateProcessParameters (
1925 OUT PRTL_USER_PROCESS_PARAMETERS
*ProcessParameters
,
1926 IN PUNICODE_STRING ImagePathName OPTIONAL
,
1927 IN PUNICODE_STRING DllPath OPTIONAL
,
1928 IN PUNICODE_STRING CurrentDirectory OPTIONAL
,
1929 IN PUNICODE_STRING CommandLine OPTIONAL
,
1930 IN PWSTR Environment OPTIONAL
,
1931 IN PUNICODE_STRING WindowTitle OPTIONAL
,
1932 IN PUNICODE_STRING DesktopInfo OPTIONAL
,
1933 IN PUNICODE_STRING ShellInfo OPTIONAL
,
1934 IN PUNICODE_STRING RuntimeInfo OPTIONAL
1940 RtlCreateUserProcess(
1941 IN PUNICODE_STRING ImageFileName
,
1942 IN ULONG Attributes
,
1943 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
,
1944 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL
,
1945 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL
,
1946 IN HANDLE ParentProcess OPTIONAL
,
1947 IN BOOLEAN CurrentDirectory
,
1948 IN HANDLE DebugPort OPTIONAL
,
1949 IN HANDLE ExceptionPort OPTIONAL
,
1950 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
1956 RtlCreateUserThread(
1957 IN HANDLE ProcessHandle
,
1958 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1959 IN BOOLEAN CreateSuspended
,
1960 IN ULONG StackZeroBits
,
1961 IN SIZE_T StackReserve
,
1962 IN SIZE_T StackCommit
,
1963 IN PTHREAD_START_ROUTINE StartAddress
,
1965 IN OUT PHANDLE ThreadHandle
,
1966 IN OUT PCLIENT_ID ClientId
1970 PRTL_USER_PROCESS_PARAMETERS
1972 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
1977 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
1982 RtlExitUserThread(NTSTATUS Status
);
1987 RtlInitializeContext(
1988 IN HANDLE ProcessHandle
,
1989 OUT PCONTEXT ThreadContext
,
1990 IN PVOID ThreadStartParam OPTIONAL
,
1991 IN PTHREAD_START_ROUTINE ThreadStartAddress
,
1992 IN PINITIAL_TEB InitialTeb
1996 PRTL_USER_PROCESS_PARAMETERS
1998 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2003 RtlReleasePebLock(VOID
);
2012 IN ULONG ArgumentCount
,
2013 IN PULONG Arguments
,
2014 IN BOOLEAN PassContext
,
2015 IN BOOLEAN AlreadySuspended
2021 RtlSetProcessIsCritical(
2022 IN BOOLEAN NewValue
,
2023 OUT PBOOLEAN OldValue OPTIONAL
,
2024 IN BOOLEAN IsWinlogon
2030 RtlGetCurrentProcessorNumber(
2034 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
2037 // Thread Pool Functions
2042 RtlDeregisterWaitEx(
2043 IN HANDLE hWaitHandle
,
2044 IN HANDLE hCompletionEvent
2051 IN HANDLE hWaitHandle
2058 IN WORKERCALLBACKFUNC Function
,
2059 IN PVOID Context OPTIONAL
,
2067 IN PHANDLE phNewWaitObject
,
2069 IN WAITORTIMERCALLBACKFUNC Callback
,
2071 IN ULONG ulMilliseconds
,
2076 // Environment/Path Functions
2081 RtlCreateEnvironment(
2089 RtlComputePrivatizedDllName_U(
2090 IN PUNICODE_STRING DllName
,
2091 OUT PUNICODE_STRING RealName
,
2092 OUT PUNICODE_STRING LocalName
2098 RtlDestroyEnvironment(
2099 IN PWSTR Environment
2105 RtlDoesFileExists_U(
2112 RtlDoesFileExists_UstrEx(
2113 IN PCUNICODE_STRING FileName
,
2114 IN BOOLEAN SucceedIfBusy
2120 RtlDetermineDosPathNameType_U(
2127 RtlDetermineDosPathNameType_Ustr(
2128 IN PCUNICODE_STRING Path
2137 IN PCWSTR Extension
,
2138 IN ULONG BufferSize
,
2146 RtlDosPathNameToNtPathName_U(
2147 IN PCWSTR DosPathName
,
2148 OUT PUNICODE_STRING NtPathName
,
2149 OUT PCWSTR
*NtFileNamePart
,
2150 OUT CURDIR
*DirectoryInfo
2156 RtlExpandEnvironmentStrings_U(
2158 PUNICODE_STRING Source
,
2159 PUNICODE_STRING Destination
,
2166 RtlGetCurrentDirectory_U(
2167 ULONG MaximumLength
,
2174 RtlGetFullPathName_U(
2178 OUT PWSTR
*ShortName
2184 RtlGetFullPathName_Ustr(
2185 IN PUNICODE_STRING FileName
,
2188 OUT PWSTR
*ShortName
,
2189 OUT PBOOLEAN InvalidName
,
2190 OUT RTL_PATH_TYPE
*PathType
2196 RtlIsDosDeviceName_U(
2203 RtlIsDosDeviceName_Ustr(
2204 IN PUNICODE_STRING Name
2211 RtlIsNameLegalDOS8Dot3(
2212 IN PCUNICODE_STRING Name
,
2213 IN OUT POEM_STRING OemName OPTIONAL
,
2214 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2220 RtlQueryEnvironmentVariable_U(
2222 PUNICODE_STRING Name
,
2223 PUNICODE_STRING Value
2229 RtlSetCurrentDirectory_U(
2230 IN PUNICODE_STRING name
2236 RtlSetEnvironmentVariable(
2238 PUNICODE_STRING Name
,
2239 PUNICODE_STRING Value
2243 // Critical Section/Resource Functions
2248 RtlDeleteCriticalSection (
2249 IN PRTL_CRITICAL_SECTION CriticalSection
2255 RtlEnterCriticalSection(
2256 IN PRTL_CRITICAL_SECTION CriticalSection
2262 RtlInitializeCriticalSection(
2263 IN PRTL_CRITICAL_SECTION CriticalSection
2269 RtlInitializeCriticalSectionAndSpinCount(
2270 IN PRTL_CRITICAL_SECTION CriticalSection
,
2277 RtlLeaveCriticalSection(
2278 IN PRTL_CRITICAL_SECTION CriticalSection
2284 RtlTryEnterCriticalSection(
2285 IN PRTL_CRITICAL_SECTION CriticalSection
2291 RtlpUnWaitCriticalSection(
2292 IN PRTL_CRITICAL_SECTION CriticalSection
2298 RtlpWaitForCriticalSection(
2299 IN PRTL_CRITICAL_SECTION CriticalSection
2305 RtlAcquireResourceExclusive(
2306 IN PRTL_RESOURCE Resource
,
2313 RtlAcquireResourceShared(
2314 IN PRTL_RESOURCE Resource
,
2321 RtlConvertExclusiveToShared(
2322 IN PRTL_RESOURCE Resource
2328 RtlConvertSharedToExclusive(
2329 IN PRTL_RESOURCE Resource
2336 IN PRTL_RESOURCE Resource
2343 IN PRTL_RESOURCE Resource
2349 RtlInitializeResource(
2350 IN PRTL_RESOURCE Resource
2357 IN PRTL_RESOURCE Resource
2361 // Compression Functions
2367 IN USHORT CompressionFormatAndEngine
,
2368 IN PUCHAR UncompressedBuffer
,
2369 IN ULONG UncompressedBufferSize
,
2370 OUT PUCHAR CompressedBuffer
,
2371 IN ULONG CompressedBufferSize
,
2372 IN ULONG UncompressedChunkSize
,
2373 OUT PULONG FinalCompressedSize
,
2380 RtlDecompressBuffer(
2381 IN USHORT CompressionFormat
,
2382 OUT PUCHAR UncompressedBuffer
,
2383 IN ULONG UncompressedBufferSize
,
2384 IN PUCHAR CompressedBuffer
,
2385 IN ULONG CompressedBufferSize
,
2386 OUT PULONG FinalUncompressedSize
2392 RtlGetCompressionWorkSpaceSize(
2393 IN USHORT CompressionFormatAndEngine
,
2394 OUT PULONG CompressBufferWorkSpaceSize
,
2395 OUT PULONG CompressFragmentWorkSpaceSize
2399 // Debug Info Functions
2402 PRTL_DEBUG_INFORMATION
2404 RtlCreateQueryDebugBuffer(
2406 IN BOOLEAN EventPair
2412 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer
);
2417 RtlQueryProcessDebugInformation(
2419 IN ULONG DebugInfoClassMask
,
2420 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2430 IN PRTL_BITMAP BitMapHeader
,
2431 IN ULONG StartingIndex
,
2439 IN PRTL_BITMAP BitMapHeader
,
2440 IN ULONG StartingIndex
,
2448 IN PRTL_BITMAP BitMapHeader
,
2449 IN ULONG StartingIndex
,
2450 IN ULONG NumberToClear
2457 IN PRTL_BITMAP BitMapHeader
,
2458 IN ULONG NumberToFind
,
2465 RtlFindClearBitsAndSet(
2466 IN PRTL_BITMAP BitMapHeader
,
2467 IN ULONG NumberToFind
,
2474 RtlFindNextForwardRunClear(
2475 IN PRTL_BITMAP BitMapHeader
,
2477 IN PULONG StartingRunIndex
2483 RtlInitializeBitMap(
2484 IN PRTL_BITMAP BitMapHeader
,
2485 IN PULONG BitMapBuffer
,
2486 IN ULONG SizeOfBitMap
2493 IN PRTL_BITMAP BitMapHeader
2500 PRTL_BITMAP BitMapHeader
,
2508 IN PRTL_BITMAP BitMapHeader
,
2509 IN ULONG StartingIndex
,
2510 IN ULONG NumberToSet
2517 PRTL_BITMAP BitMapHeader
2524 PRTL_BITMAP BitMapHeader
,
2537 WAITORTIMERCALLBACKFUNC Callback
,
2547 RtlCreateTimerQueue(PHANDLE TimerQueue
);
2555 HANDLE CompletionEvent
2571 RtlDeleteTimerQueueEx(
2573 HANDLE CompletionEvent
2579 RtlDeleteTimerQueue(HANDLE TimerQueue
);
2586 InterlockedPushListSList(
2587 IN PSLIST_HEADER ListHead
,
2588 IN PSLIST_ENTRY List
,
2589 IN PSLIST_ENTRY ListEnd
,
2594 // Range List functions
2599 RtlFreeRangeList(IN PRTL_RANGE_LIST RangeList
);
2615 IN ULONG ComponentId
,
2626 IN ULONG MaximumResponseLength
2637 DbgLoadImageSymbols(
2638 IN PANSI_STRING Name
,
2640 IN ULONG_PTR ProcessId
2645 DbgUnLoadImageSymbols(
2646 IN PANSI_STRING Name
,
2648 IN ULONG_PTR ProcessId
2652 // Generic Table Functions
2654 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
2658 RtlInsertElementGenericTable(
2659 IN PRTL_GENERIC_TABLE Table
,
2661 IN ULONG BufferSize
,
2662 OUT PBOOLEAN NewElement OPTIONAL
2668 RtlInsertElementGenericTableFull(
2669 IN PRTL_GENERIC_TABLE Table
,
2671 IN ULONG BufferSize
,
2672 OUT PBOOLEAN NewElement OPTIONAL
,
2673 IN PVOID NodeOrParent
,
2674 IN TABLE_SEARCH_RESULT SearchResult
2680 RtlIsGenericTableEmpty(
2681 IN PRTL_GENERIC_TABLE Table
2687 RtlLookupElementGenericTableFull(
2688 IN PRTL_GENERIC_TABLE Table
,
2690 OUT PVOID
*NodeOrParent
,
2691 OUT TABLE_SEARCH_RESULT
*SearchResult
2696 // Handle Table Functions
2699 PRTL_HANDLE_TABLE_ENTRY
2702 IN PRTL_HANDLE_TABLE HandleTable
,
2709 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable
);
2715 IN PRTL_HANDLE_TABLE HandleTable
,
2716 IN PRTL_HANDLE_TABLE_ENTRY Handle
2722 RtlInitializeHandleTable(
2724 IN ULONG HandleSize
,
2725 IN PRTL_HANDLE_TABLE HandleTable
2732 IN PRTL_HANDLE_TABLE HandleTable
,
2733 IN PRTL_HANDLE_TABLE_ENTRY Handle
2739 RtlIsValidIndexHandle(
2740 IN PRTL_HANDLE_TABLE HandleTable
,
2742 OUT PRTL_HANDLE_TABLE_ENTRY
*Handle
2752 IN PVOID BaseAddress
,
2756 OUT PRTL_MESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
2762 RtlGetNtGlobalFlags(VOID
);
2767 RtlImageDirectoryEntryToData(
2769 BOOLEAN MappedAsImage
,
2778 PIMAGE_NT_HEADERS NtHeader
,
2781 PIMAGE_SECTION_HEADER
*SectionHeader
2787 RtlImageNtHeader(IN PVOID BaseAddress
);
2794 IN PVOID BaseAddress
,
2796 IN PIMAGE_NT_HEADERS
*NtHeader
2800 PIMAGE_SECTION_HEADER
2802 RtlImageRvaToSection(
2803 PIMAGE_NT_HEADERS NtHeader
,
2811 LdrRelocateImageWithBias(
2812 IN PVOID NewAddress
,
2813 IN LONGLONG AdditionalBias
,
2821 // Activation Context Functions
2823 #ifdef NTOS_MODE_USER
2828 RtlAddRefActivationContext(
2836 RtlActivateActivationContextUnsafeFast(
2837 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
,
2844 RtlAllocateActivationContextStack(
2851 RtlGetActiveActivationContext(
2858 RtlReleaseActivationContext(
2865 RtlDeactivateActivationContext(
2873 RtlDeactivateActivationContextUnsafeFast(
2874 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
2880 RtlDosApplyFileIsolationRedirection_Ustr(
2882 IN PUNICODE_STRING OriginalName
,
2883 IN PUNICODE_STRING Extension
,
2884 IN OUT PUNICODE_STRING RedirectedName
,
2885 IN OUT PUNICODE_STRING RedirectedName2
,
2886 IN OUT PUNICODE_STRING
*OriginalName2
,
2895 RtlFindActivationContextSectionString(
2898 IN ULONG SectionType
,
2899 IN PUNICODE_STRING SectionName
,
2906 RtlQueryInformationActivationContext(
2909 PVOID pvSubInstance
,
2912 SIZE_T cbBuffer OPTIONAL
,
2913 SIZE_T
*pcbWrittenOrRequired OPTIONAL
2919 RtlZombifyActivationContext(
2927 // Registry Functions
2932 RtlCheckRegistryKey(
2940 RtlCreateRegistryKey(
2941 IN ULONG RelativeTo
,
2948 RtlFormatCurrentUserKeyPath(
2949 IN OUT PUNICODE_STRING KeyPath
2956 OUT HANDLE KeyHandle
,
2957 IN ACCESS_MASK DesiredAccess
,
2958 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2966 IN ACCESS_MASK DesiredAccess
,
2967 OUT PHANDLE KeyHandle
2973 RtlQueryRegistryValues(
2974 IN ULONG RelativeTo
,
2976 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
2978 IN PVOID Environment
2984 RtlWriteRegistryValue(
2999 RtlGetDefaultCodePage(
3000 OUT PUSHORT AnsiCodePage
,
3001 OUT PUSHORT OemCodePage
3008 IN PUSHORT AnsiTableBase
,
3009 IN PUSHORT OemTableBase
,
3010 IN PUSHORT CaseTableBase
,
3011 OUT PNLSTABLEINFO NlsTable
3017 RtlInitCodePageTable(
3018 IN PUSHORT TableBase
,
3019 OUT PCPTABLEINFO CodePageTable
3025 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable
);
3027 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
3030 // Misc conversion functions
3035 RtlConvertLongToLargeInteger(
3039 LARGE_INTEGER Result
;
3041 Result
.QuadPart
= SignedInteger
;
3048 RtlEnlargedIntegerMultiply(
3053 LARGE_INTEGER Product
;
3055 Product
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3062 RtlEnlargedUnsignedDivide(
3063 IN ULARGE_INTEGER Dividend
,
3065 IN PULONG Remainder OPTIONAL
3070 Quotient
= (ULONG
)(Dividend
.QuadPart
/ Divisor
);
3072 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
3081 RtlEnlargedUnsignedMultiply(
3086 LARGE_INTEGER Product
;
3088 Product
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3111 IN USHORT PartialCrc
,
3117 // Network Functions
3122 RtlIpv4StringToAddressW(
3125 OUT PWCHAR Terminator
,
3126 OUT
struct in_addr
*Addr
3132 RtlIpv6StringToAddressA(
3134 OUT PCHAR
*Terminator
,
3135 OUT
struct in6_addr
*Addr
3141 RtlIpv6StringToAddressW(
3143 OUT PCHAR
*Terminator
,
3144 OUT
struct in6_addr
*Addr
3150 RtlIpv6StringToAddressExA(
3151 IN PCHAR AddressString
,
3152 IN
struct in6_addr
*Address
,
3160 RtlIpv6StringToAddressExW(
3161 IN PWCHAR AddressName
,
3162 IN
struct in6_addr
*Address
,
3174 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3179 RtlSecondsSince1970ToTime(
3180 IN ULONG SecondsSince1970
,
3181 OUT PLARGE_INTEGER Time
3187 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3192 RtlTimeFieldsToTime(
3193 PTIME_FIELDS TimeFields
,
3200 RtlTimeToSecondsSince1970(
3201 PLARGE_INTEGER Time
,
3202 OUT PULONG SecondsSince1970
3208 RtlTimeToTimeFields(
3209 PLARGE_INTEGER Time
,
3210 PTIME_FIELDS TimeFields
3216 RtlSystemTimeToLocalTime(
3217 IN PLARGE_INTEGER SystemTime
,
3218 OUT PLARGE_INTEGER LocalTime
3222 // Version Functions
3227 RtlVerifyVersionInfo(
3228 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3230 IN ULONGLONG ConditionMask
3236 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3241 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType
);
3244 // Secure Memory Functions
3246 #ifdef NTOS_MODE_USER
3250 RtlRegisterSecureMemoryCacheCallback(
3251 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback
);
3256 RtlFlushSecureMemoryCache(
3257 IN PVOID MemoryCache
,
3258 IN OPTIONAL SIZE_T MemoryLength