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
442 RtlUnhandledExceptionFilter(
443 IN
struct _EXCEPTION_POINTERS
* ExceptionInfo
450 IN PVOID TargetFrame OPTIONAL
,
451 IN PVOID TargetIp OPTIONAL
,
452 IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL
,
471 RtlLogStackBackTrace(
482 IN HANDLE HeapHandle
,
492 IN PVOID BaseAddress OPTIONAL
,
493 IN SIZE_T SizeToReserve OPTIONAL
,
494 IN SIZE_T SizeToCommit OPTIONAL
,
495 IN PVOID Lock OPTIONAL
,
496 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
503 IN HANDLE HeapHandle
,
521 IN PVOID BaseAddress OPTIONAL
,
522 IN SIZE_T SizeToReserve OPTIONAL
,
523 IN SIZE_T SizeToCommit OPTIONAL
,
524 IN PVOID Lock OPTIONAL
,
525 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
549 IN HANDLE HeapHandle
,
573 IN PVOID BaseAddress
,
574 OUT PVOID
*UserValue
,
593 IN BOOLEAN ResetCounters
,
594 OUT PRTL_HEAP_TAG_INFO HeapTagInfo
620 OUT PRTL_HEAP_USAGE Usage
635 IN PVOID BaseAddress
,
644 IN PVOID BaseAddress
,
654 IN PVOID MemoryPointer
670 IN HANDLE HeapHandle
,
674 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
677 // Security Functions
682 RtlAbsoluteToSelfRelativeSD(
683 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
684 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
685 IN PULONG BufferLength
691 RtlAddAccessAllowedAce(
694 ACCESS_MASK AccessMask
,
701 RtlAddAccessAllowedAceEx(
703 IN ULONG dwAceRevision
,
705 IN ACCESS_MASK AccessMask
,
712 RtlAddAccessAllowedObjectAce(
714 IN ULONG dwAceRevision
,
716 IN ACCESS_MASK AccessMask
,
717 IN GUID
*ObjectTypeGuid OPTIONAL
,
718 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
725 RtlAddAccessDeniedAce(
728 ACCESS_MASK AccessMask
,
735 RtlAddAccessDeniedAceEx(
739 IN ACCESS_MASK AccessMask
,
746 RtlAddAccessDeniedObjectAce(
748 IN ULONG dwAceRevision
,
750 IN ACCESS_MASK AccessMask
,
751 IN GUID
*ObjectTypeGuid OPTIONAL
,
752 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
762 ULONG StartingAceIndex
,
770 RtlAddAuditAccessAce(
773 ACCESS_MASK AccessMask
,
786 OUT PVOID
*ReturnedState
792 RtlAddAuditAccessAceEx(
796 IN ACCESS_MASK AccessMask
,
805 RtlAddAuditAccessObjectAce(
809 IN ACCESS_MASK AccessMask
,
810 IN GUID
*ObjectTypeGuid OPTIONAL
,
811 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
824 IN ULONG MandatoryFlags
,
834 IN BOOLEAN ForThread
,
835 OUT PBOOLEAN OldValue
841 RtlAllocateAndInitializeSid(
842 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
843 IN UCHAR SubAuthorityCount
,
844 IN ULONG SubAuthority0
,
845 IN ULONG SubAuthority1
,
846 IN ULONG SubAuthority2
,
847 IN ULONG SubAuthority3
,
848 IN ULONG SubAuthority4
,
849 IN ULONG SubAuthority5
,
850 IN ULONG SubAuthority6
,
851 IN ULONG SubAuthority7
,
858 RtlAreAllAccessesGranted(
859 ACCESS_MASK GrantedAccess
,
860 ACCESS_MASK DesiredAccess
866 RtlAreAnyAccessesGranted(
867 ACCESS_MASK GrantedAccess
,
868 ACCESS_MASK DesiredAccess
882 RtlCopyLuidAndAttributesArray(
884 PLUID_AND_ATTRIBUTES Src
,
885 PLUID_AND_ATTRIBUTES Dest
891 RtlCopySidAndAttributesArray(
893 PSID_AND_ATTRIBUTES Src
,
895 PSID_AND_ATTRIBUTES Dest
,
897 PVOID
* RemainingSidArea
,
898 PULONG RemainingSidAreaSize
904 RtlConvertSidToUnicodeString(
905 OUT PUNICODE_STRING DestinationString
,
907 IN BOOLEAN AllocateDestinationString
931 RtlCreateSecurityDescriptor(
932 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
939 RtlCreateSecurityDescriptorRelative(
940 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor
,
947 RtlCopySecurityDescriptor(
948 IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor
,
949 OUT PSECURITY_DESCRIPTOR pDestinationSecurityDescriptor
1003 RtlGetControlSecurityDescriptor(
1004 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1005 OUT PSECURITY_DESCRIPTOR_CONTROL Control
,
1012 RtlGetDaclSecurityDescriptor(
1013 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1014 OUT PBOOLEAN DaclPresent
,
1016 OUT PBOOLEAN DaclDefaulted
1022 RtlGetSaclSecurityDescriptor(
1023 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1024 OUT PBOOLEAN SaclPresent
,
1026 OUT PBOOLEAN SaclDefaulted
1032 RtlGetGroupSecurityDescriptor(
1033 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1035 OUT PBOOLEAN GroupDefaulted
1041 RtlGetOwnerSecurityDescriptor(
1042 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1044 OUT PBOOLEAN OwnerDefaulted
1050 RtlGetSecurityDescriptorRMControl(
1051 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1052 OUT PUCHAR RMControl
1056 PSID_IDENTIFIER_AUTHORITY
1058 RtlIdentifierAuthoritySid(PSID Sid
);
1063 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
1070 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1071 IN UCHAR SubAuthorityCount
1077 RtlLengthRequiredSid(IN ULONG SubAuthorityCount
);
1082 RtlLengthSid(IN PSID Sid
);
1087 RtlMakeSelfRelativeSD(
1088 IN PSECURITY_DESCRIPTOR AbsoluteSD
,
1089 OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1090 IN OUT PULONG BufferLength
);
1096 PACCESS_MASK AccessMask
,
1097 PGENERIC_MAPPING GenericMapping
1100 #ifdef NTOS_MODE_USER
1105 RtlQueryInformationAcl(
1108 ULONG InformationLength
,
1109 ACL_INFORMATION_CLASS InformationClass
1117 RtlReleasePrivilege(
1118 IN PVOID ReturnedState
1124 RtlSelfRelativeToAbsoluteSD(
1125 IN PSECURITY_DESCRIPTOR SelfRelativeSD
,
1126 OUT PSECURITY_DESCRIPTOR AbsoluteSD
,
1127 IN PULONG AbsoluteSDSize
,
1133 IN PULONG OwnerSize
,
1134 IN PSID PrimaryGroup
,
1135 IN PULONG PrimaryGroupSize
1141 RtlSelfRelativeToAbsoluteSD2(
1142 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1143 OUT PULONG BufferSize
1149 RtlSetAttributesSecurityDescriptor(
1150 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1151 IN SECURITY_DESCRIPTOR_CONTROL Control
,
1158 RtlSetControlSecurityDescriptor(
1159 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1160 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest
,
1161 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
1167 RtlSetDaclSecurityDescriptor (
1168 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1169 IN BOOLEAN DaclPresent
,
1171 IN BOOLEAN DaclDefaulted
1177 RtlSetGroupSecurityDescriptor(
1178 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1180 IN BOOLEAN GroupDefaulted
1183 #ifdef NTOS_MODE_USER
1188 RtlSetInformationAcl(
1191 ULONG InformationLength
,
1192 ACL_INFORMATION_CLASS InformationClass
1200 RtlSetOwnerSecurityDescriptor(
1201 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1203 IN BOOLEAN OwnerDefaulted
1209 RtlSetSaclSecurityDescriptor(
1210 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1211 IN BOOLEAN SaclPresent
,
1213 IN BOOLEAN SaclDefaulted
1219 RtlSetSecurityDescriptorRMControl(
1220 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1227 RtlSubAuthorityCountSid(
1236 IN ULONG SubAuthority
1242 RtlValidRelativeSecurityDescriptor(
1243 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
1244 IN ULONG SecurityDescriptorLength
,
1245 IN SECURITY_INFORMATION RequiredInformation
1251 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
1256 RtlValidSid(IN PSID Sid
);
1261 RtlValidAcl(PACL Acl
);
1266 RtlDeleteSecurityObject(
1267 IN PSECURITY_DESCRIPTOR
*ObjectDescriptor
1273 RtlNewSecurityObject(
1274 IN PSECURITY_DESCRIPTOR ParentDescriptor
,
1275 IN PSECURITY_DESCRIPTOR CreatorDescriptor
,
1276 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
1277 IN BOOLEAN IsDirectoryObject
,
1279 IN PGENERIC_MAPPING GenericMapping
1285 RtlQuerySecurityObject(
1286 IN PSECURITY_DESCRIPTOR ObjectDescriptor
,
1287 IN SECURITY_INFORMATION SecurityInformation
,
1288 OUT PSECURITY_DESCRIPTOR ResultantDescriptor
,
1289 IN ULONG DescriptorLength
,
1290 OUT PULONG ReturnLength
1296 RtlSetSecurityObject(
1297 IN SECURITY_INFORMATION SecurityInformation
,
1298 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
1299 OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
1300 IN PGENERIC_MAPPING GenericMapping
,
1305 // Single-Character Functions
1310 RtlLargeIntegerToChar(
1311 IN PLARGE_INTEGER Value
,
1320 RtlUpperChar(CHAR Source
);
1325 RtlUpcaseUnicodeChar(WCHAR Source
);
1330 RtlDowncaseUnicodeChar(IN WCHAR Source
);
1345 RtlIntegerToUnicode(
1347 IN ULONG Base OPTIONAL
,
1348 IN ULONG Length OPTIONAL
,
1349 IN OUT LPWSTR String
1355 RtlIntegerToUnicodeString(
1358 IN OUT PUNICODE_STRING String
1371 // Byte Swap Functions
1373 #ifdef NTOS_MODE_USER
1375 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
1376 ((defined(_M_AMD64) || \
1377 defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
1379 unsigned short __cdecl
_byteswap_ushort(unsigned short);
1380 unsigned long __cdecl
_byteswap_ulong (unsigned long);
1381 unsigned __int64 __cdecl
_byteswap_uint64(unsigned __int64
);
1382 #pragma intrinsic(_byteswap_ushort)
1383 #pragma intrinsic(_byteswap_ulong)
1384 #pragma intrinsic(_byteswap_uint64)
1385 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1386 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1387 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1389 #elif defined (__GNUC__)
1391 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1392 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1393 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1397 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1401 RtlUshortByteSwap(IN USHORT Source
);
1406 RtlUlongByteSwap(IN ULONG Source
);
1411 RtlUlonglongByteSwap(IN ULONGLONG Source
);
1415 #endif // NTOS_MODE_USER
1418 // Unicode->Ansi String Functions
1423 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString
);
1425 #ifdef NTOS_MODE_USER
1427 #define RtlUnicodeStringToAnsiSize(STRING) ( \
1428 NLS_MB_CODE_PAGE_TAG ? \
1429 RtlxUnicodeStringToAnsiSize(STRING) : \
1430 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1438 RtlUnicodeStringToAnsiString(
1439 PANSI_STRING DestinationString
,
1440 PCUNICODE_STRING SourceString
,
1441 BOOLEAN AllocateDestinationString
1445 // Unicode->OEM String Functions
1450 RtlUpcaseUnicodeStringToOemString(
1451 POEM_STRING DestinationString
,
1452 PCUNICODE_STRING SourceString
,
1453 BOOLEAN AllocateDestinationString
1459 RtlUpcaseUnicodeStringToCountedOemString(
1460 IN OUT POEM_STRING DestinationString
,
1461 IN PCUNICODE_STRING SourceString
,
1462 IN BOOLEAN AllocateDestinationString
1468 RtlUnicodeStringToOemString(
1469 POEM_STRING DestinationString
,
1470 PCUNICODE_STRING SourceString
,
1471 BOOLEAN AllocateDestinationString
1477 RtlUpcaseUnicodeToOemN(
1481 PWCHAR UnicodeString
,
1488 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString
);
1490 #ifdef NTOS_MODE_USER
1492 #define RtlUnicodeStringToOemSize(STRING) ( \
1493 NLS_MB_OEM_CODE_PAGE_TAG ? \
1494 RtlxUnicodeStringToOemSize(STRING) : \
1495 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1498 #define RtlUnicodeStringToCountedOemSize(STRING) ( \
1499 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
1511 PWCHAR UnicodeString
,
1516 // Unicode->MultiByte String Functions
1521 RtlUnicodeToMultiByteN(
1525 PWCHAR UnicodeString
,
1532 RtlUpcaseUnicodeToMultiByteN(
1536 PWCHAR UnicodeString
,
1543 RtlUnicodeToMultiByteSize(
1545 PWCHAR UnicodeString
,
1552 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString
);
1555 // OEM to Unicode Functions
1560 RtlOemStringToUnicodeString(
1561 PUNICODE_STRING DestinationString
,
1562 PCOEM_STRING SourceString
,
1563 BOOLEAN AllocateDestinationString
1570 PWSTR UnicodeString
,
1571 ULONG MaxBytesInUnicodeString
,
1572 PULONG BytesInUnicodeString
,
1574 ULONG BytesInOemString
1577 #ifdef NTOS_MODE_USER
1579 #define RtlOemStringToUnicodeSize(STRING) ( \
1580 NLS_MB_OEM_CODE_PAGE_TAG ? \
1581 RtlxOemStringToUnicodeSize(STRING) : \
1582 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1585 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1586 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1592 // Ansi->Unicode String Functions
1597 RtlxAnsiStringToUnicodeSize(
1598 PCANSI_STRING AnsiString
1604 RtlAnsiStringToUnicodeString(
1605 PUNICODE_STRING DestinationString
,
1606 PCANSI_STRING SourceString
,
1607 BOOLEAN AllocateDestinationString
1610 #ifdef NTOS_MODE_USER
1612 #define RtlAnsiStringToUnicodeSize(STRING) ( \
1613 NLS_MB_CODE_PAGE_TAG ? \
1614 RtlxAnsiStringToUnicodeSize(STRING) : \
1615 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1623 RtlCreateUnicodeStringFromAsciiz(
1624 OUT PUNICODE_STRING Destination
,
1629 // Unicode String Functions
1634 RtlAppendUnicodeToString(
1635 PUNICODE_STRING Destination
,
1642 RtlAppendUnicodeStringToString(
1643 PUNICODE_STRING Destination
,
1644 PCUNICODE_STRING Source
1650 RtlCompareUnicodeString(
1651 PCUNICODE_STRING String1
,
1652 PCUNICODE_STRING String2
,
1653 BOOLEAN CaseInsensitive
1659 RtlCopyUnicodeString(
1660 PUNICODE_STRING DestinationString
,
1661 PCUNICODE_STRING SourceString
1667 RtlCreateUnicodeString(
1668 PUNICODE_STRING DestinationString
,
1672 #ifdef NTOS_MODE_USER
1677 RtlDowncaseUnicodeString(
1678 IN OUT PUNICODE_STRING UniDest
,
1679 IN PCUNICODE_STRING UniSource
,
1680 IN BOOLEAN AllocateDestinationString
1686 RtlDuplicateUnicodeString(
1688 IN PCUNICODE_STRING SourceString
,
1689 OUT PUNICODE_STRING DestinationString
1697 RtlEqualUnicodeString(
1698 PCUNICODE_STRING String1
,
1699 PCUNICODE_STRING String2
,
1700 BOOLEAN CaseInsensitive
1706 RtlFindCharInUnicodeString(
1708 IN PUNICODE_STRING SearchString
,
1709 IN PCUNICODE_STRING MatchString
,
1710 OUT PUSHORT Position
1716 RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString
);
1721 RtlHashUnicodeString(
1722 IN CONST UNICODE_STRING
*String
,
1723 IN BOOLEAN CaseInSensitive
,
1724 IN ULONG HashAlgorithm
,
1725 OUT PULONG HashValue
1731 RtlInitUnicodeString(
1732 IN OUT PUNICODE_STRING DestinationString
,
1733 IN PCWSTR SourceString
1739 RtlInitUnicodeStringEx(
1740 OUT PUNICODE_STRING DestinationString
,
1741 IN PCWSTR SourceString OPTIONAL
1757 PCANSI_STRING String1
,
1758 PCANSI_STRING String2
,
1759 BOOLEAN CaseInsensitive
1765 RtlPrefixUnicodeString(
1766 PCUNICODE_STRING String1
,
1767 PCUNICODE_STRING String2
,
1768 BOOLEAN CaseInsensitive
1774 RtlUpcaseUnicodeString(
1775 PUNICODE_STRING DestinationString
,
1776 PCUNICODE_STRING SourceString
,
1777 BOOLEAN AllocateDestinationString
1783 RtlUnicodeStringToInteger(
1784 PCUNICODE_STRING String
,
1792 RtlValidateUnicodeString(
1794 IN PCUNICODE_STRING String
1798 // Ansi String Functions
1803 RtlFreeAnsiString(IN PANSI_STRING AnsiString
);
1809 PANSI_STRING DestinationString
,
1816 RtlInitAnsiStringEx(
1817 PANSI_STRING DestinationString
,
1822 // OEM String Functions
1827 RtlFreeOemString(IN POEM_STRING OemString
);
1830 // MultiByte->Unicode String Functions
1835 RtlMultiByteToUnicodeN(
1836 PWCHAR UnicodeString
,
1846 RtlMultiByteToUnicodeSize(
1858 RtlAddAtomToAtomTable(
1859 IN PRTL_ATOM_TABLE AtomTable
,
1869 IN OUT PRTL_ATOM_TABLE
*AtomTable
1875 RtlDeleteAtomFromAtomTable(
1876 IN PRTL_ATOM_TABLE AtomTable
,
1883 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable
);
1888 RtlQueryAtomInAtomTable(
1889 IN PRTL_ATOM_TABLE AtomTable
,
1891 IN OUT PULONG RefCount OPTIONAL
,
1892 IN OUT PULONG PinCount OPTIONAL
,
1893 IN OUT PWSTR AtomName OPTIONAL
,
1894 IN OUT PULONG NameLength OPTIONAL
1900 RtlPinAtomInAtomTable(
1901 IN PRTL_ATOM_TABLE AtomTable
,
1908 RtlLookupAtomInAtomTable(
1909 IN PRTL_ATOM_TABLE AtomTable
,
1921 IN PVOID Destination
,
1927 // Process Management Functions
1939 RtlAcquirePebLock(VOID
);
1944 RtlCreateProcessParameters (
1945 OUT PRTL_USER_PROCESS_PARAMETERS
*ProcessParameters
,
1946 IN PUNICODE_STRING ImagePathName OPTIONAL
,
1947 IN PUNICODE_STRING DllPath OPTIONAL
,
1948 IN PUNICODE_STRING CurrentDirectory OPTIONAL
,
1949 IN PUNICODE_STRING CommandLine OPTIONAL
,
1950 IN PWSTR Environment OPTIONAL
,
1951 IN PUNICODE_STRING WindowTitle OPTIONAL
,
1952 IN PUNICODE_STRING DesktopInfo OPTIONAL
,
1953 IN PUNICODE_STRING ShellInfo OPTIONAL
,
1954 IN PUNICODE_STRING RuntimeInfo OPTIONAL
1960 RtlCreateUserProcess(
1961 IN PUNICODE_STRING ImageFileName
,
1962 IN ULONG Attributes
,
1963 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
,
1964 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL
,
1965 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL
,
1966 IN HANDLE ParentProcess OPTIONAL
,
1967 IN BOOLEAN CurrentDirectory
,
1968 IN HANDLE DebugPort OPTIONAL
,
1969 IN HANDLE ExceptionPort OPTIONAL
,
1970 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
1976 RtlCreateUserThread(
1977 IN HANDLE ProcessHandle
,
1978 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1979 IN BOOLEAN CreateSuspended
,
1980 IN ULONG StackZeroBits
,
1981 IN SIZE_T StackReserve
,
1982 IN SIZE_T StackCommit
,
1983 IN PTHREAD_START_ROUTINE StartAddress
,
1985 IN OUT PHANDLE ThreadHandle
,
1986 IN OUT PCLIENT_ID ClientId
1990 PRTL_USER_PROCESS_PARAMETERS
1992 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
1997 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2002 RtlExitUserThread(NTSTATUS Status
);
2007 RtlInitializeContext(
2008 IN HANDLE ProcessHandle
,
2009 OUT PCONTEXT ThreadContext
,
2010 IN PVOID ThreadStartParam OPTIONAL
,
2011 IN PTHREAD_START_ROUTINE ThreadStartAddress
,
2012 IN PINITIAL_TEB InitialTeb
2018 RtlIsThreadWithinLoaderCallout(VOID
);
2021 PRTL_USER_PROCESS_PARAMETERS
2023 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2028 RtlReleasePebLock(VOID
);
2037 IN ULONG ArgumentCount
,
2038 IN PULONG Arguments
,
2039 IN BOOLEAN PassContext
,
2040 IN BOOLEAN AlreadySuspended
2046 RtlSetProcessIsCritical(
2047 IN BOOLEAN NewValue
,
2048 OUT PBOOLEAN OldValue OPTIONAL
,
2049 IN BOOLEAN IsWinlogon
2055 RtlGetCurrentProcessorNumber(
2059 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
2062 // Thread Pool Functions
2067 RtlDeregisterWaitEx(
2068 IN HANDLE hWaitHandle
,
2069 IN HANDLE hCompletionEvent
2076 IN HANDLE hWaitHandle
2083 IN WORKERCALLBACKFUNC Function
,
2084 IN PVOID Context OPTIONAL
,
2091 RtlSetIoCompletionCallback(
2092 IN HANDLE FileHandle
,
2093 IN PIO_APC_ROUTINE Callback
,
2101 IN PHANDLE phNewWaitObject
,
2103 IN WAITORTIMERCALLBACKFUNC Callback
,
2105 IN ULONG ulMilliseconds
,
2110 // Environment/Path Functions
2115 RtlCreateEnvironment(
2123 RtlComputePrivatizedDllName_U(
2124 IN PUNICODE_STRING DllName
,
2125 OUT PUNICODE_STRING RealName
,
2126 OUT PUNICODE_STRING LocalName
2132 RtlDestroyEnvironment(
2133 IN PWSTR Environment
2139 RtlDoesFileExists_U(
2146 RtlDoesFileExists_UstrEx(
2147 IN PCUNICODE_STRING FileName
,
2148 IN BOOLEAN SucceedIfBusy
2154 RtlDetermineDosPathNameType_U(
2161 RtlDetermineDosPathNameType_Ustr(
2162 IN PCUNICODE_STRING Path
2171 IN PCWSTR Extension
,
2172 IN ULONG BufferSize
,
2180 RtlDosPathNameToNtPathName_U(
2181 IN PCWSTR DosPathName
,
2182 OUT PUNICODE_STRING NtPathName
,
2183 OUT PCWSTR
*NtFileNamePart
,
2184 OUT CURDIR
*DirectoryInfo
2190 RtlExpandEnvironmentStrings_U(
2192 PUNICODE_STRING Source
,
2193 PUNICODE_STRING Destination
,
2200 RtlGetCurrentDirectory_U(
2201 ULONG MaximumLength
,
2208 RtlGetFullPathName_U(
2212 OUT PWSTR
*ShortName
2218 RtlGetFullPathName_Ustr(
2219 IN PUNICODE_STRING FileName
,
2222 OUT PWSTR
*ShortName
,
2223 OUT PBOOLEAN InvalidName
,
2224 OUT RTL_PATH_TYPE
*PathType
2230 RtlIsDosDeviceName_U(
2237 RtlIsDosDeviceName_Ustr(
2238 IN PUNICODE_STRING Name
2245 RtlIsNameLegalDOS8Dot3(
2246 IN PCUNICODE_STRING Name
,
2247 IN OUT POEM_STRING OemName OPTIONAL
,
2248 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2254 RtlQueryEnvironmentVariable_U(
2256 PUNICODE_STRING Name
,
2257 PUNICODE_STRING Value
2263 RtlSetCurrentDirectory_U(
2264 IN PUNICODE_STRING name
2270 RtlSetEnvironmentVariable(
2272 PUNICODE_STRING Name
,
2273 PUNICODE_STRING Value
2277 // Critical Section/Resource Functions
2282 RtlDeleteCriticalSection (
2283 IN PRTL_CRITICAL_SECTION CriticalSection
2289 RtlEnterCriticalSection(
2290 IN PRTL_CRITICAL_SECTION CriticalSection
2296 RtlInitializeCriticalSection(
2297 IN PRTL_CRITICAL_SECTION CriticalSection
2303 RtlInitializeCriticalSectionAndSpinCount(
2304 IN PRTL_CRITICAL_SECTION CriticalSection
,
2311 RtlLeaveCriticalSection(
2312 IN PRTL_CRITICAL_SECTION CriticalSection
2318 RtlTryEnterCriticalSection(
2319 IN PRTL_CRITICAL_SECTION CriticalSection
2325 RtlpUnWaitCriticalSection(
2326 IN PRTL_CRITICAL_SECTION CriticalSection
2332 RtlpWaitForCriticalSection(
2333 IN PRTL_CRITICAL_SECTION CriticalSection
2339 RtlAcquireResourceExclusive(
2340 IN PRTL_RESOURCE Resource
,
2347 RtlAcquireResourceShared(
2348 IN PRTL_RESOURCE Resource
,
2355 RtlConvertExclusiveToShared(
2356 IN PRTL_RESOURCE Resource
2362 RtlConvertSharedToExclusive(
2363 IN PRTL_RESOURCE Resource
2370 IN PRTL_RESOURCE Resource
2377 IN PRTL_RESOURCE Resource
2383 RtlInitializeResource(
2384 IN PRTL_RESOURCE Resource
2391 IN PRTL_RESOURCE Resource
2395 // Compression Functions
2401 IN USHORT CompressionFormatAndEngine
,
2402 IN PUCHAR UncompressedBuffer
,
2403 IN ULONG UncompressedBufferSize
,
2404 OUT PUCHAR CompressedBuffer
,
2405 IN ULONG CompressedBufferSize
,
2406 IN ULONG UncompressedChunkSize
,
2407 OUT PULONG FinalCompressedSize
,
2414 RtlDecompressBuffer(
2415 IN USHORT CompressionFormat
,
2416 OUT PUCHAR UncompressedBuffer
,
2417 IN ULONG UncompressedBufferSize
,
2418 IN PUCHAR CompressedBuffer
,
2419 IN ULONG CompressedBufferSize
,
2420 OUT PULONG FinalUncompressedSize
2426 RtlGetCompressionWorkSpaceSize(
2427 IN USHORT CompressionFormatAndEngine
,
2428 OUT PULONG CompressBufferWorkSpaceSize
,
2429 OUT PULONG CompressFragmentWorkSpaceSize
2433 // Debug Info Functions
2436 PRTL_DEBUG_INFORMATION
2438 RtlCreateQueryDebugBuffer(
2440 IN BOOLEAN EventPair
2446 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer
);
2451 RtlQueryProcessDebugInformation(
2453 IN ULONG DebugInfoClassMask
,
2454 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2464 IN PRTL_BITMAP BitMapHeader
,
2465 IN ULONG StartingIndex
,
2473 IN PRTL_BITMAP BitMapHeader
,
2474 IN ULONG StartingIndex
,
2482 IN PRTL_BITMAP BitMapHeader
,
2483 IN ULONG StartingIndex
,
2484 IN ULONG NumberToClear
2491 IN PRTL_BITMAP BitMapHeader
,
2492 IN ULONG NumberToFind
,
2499 RtlFindClearBitsAndSet(
2500 IN PRTL_BITMAP BitMapHeader
,
2501 IN ULONG NumberToFind
,
2508 RtlFindNextForwardRunClear(
2509 IN PRTL_BITMAP BitMapHeader
,
2511 IN PULONG StartingRunIndex
2517 RtlInitializeBitMap(
2518 IN PRTL_BITMAP BitMapHeader
,
2519 IN PULONG BitMapBuffer
,
2520 IN ULONG SizeOfBitMap
2527 IN PRTL_BITMAP BitMapHeader
2534 PRTL_BITMAP BitMapHeader
,
2542 IN PRTL_BITMAP BitMapHeader
,
2543 IN ULONG StartingIndex
,
2544 IN ULONG NumberToSet
2551 PRTL_BITMAP BitMapHeader
2558 PRTL_BITMAP BitMapHeader
,
2571 WAITORTIMERCALLBACKFUNC Callback
,
2581 RtlCreateTimerQueue(PHANDLE TimerQueue
);
2589 HANDLE CompletionEvent
2605 RtlDeleteTimerQueueEx(
2607 HANDLE CompletionEvent
2613 RtlDeleteTimerQueue(HANDLE TimerQueue
);
2620 InterlockedPushListSList(
2621 IN PSLIST_HEADER ListHead
,
2622 IN PSLIST_ENTRY List
,
2623 IN PSLIST_ENTRY ListEnd
,
2628 // Range List functions
2633 RtlFreeRangeList(IN PRTL_RANGE_LIST RangeList
);
2649 IN ULONG ComponentId
,
2660 IN ULONG MaximumResponseLength
2671 DbgLoadImageSymbols(
2674 IN ULONG_PTR ProcessId
2679 DbgUnLoadImageSymbols(
2682 IN ULONG_PTR ProcessId
2693 // Generic Table Functions
2695 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
2699 RtlInsertElementGenericTable(
2700 IN PRTL_GENERIC_TABLE Table
,
2702 IN ULONG BufferSize
,
2703 OUT PBOOLEAN NewElement OPTIONAL
2709 RtlInsertElementGenericTableFull(
2710 IN PRTL_GENERIC_TABLE Table
,
2712 IN ULONG BufferSize
,
2713 OUT PBOOLEAN NewElement OPTIONAL
,
2714 IN PVOID NodeOrParent
,
2715 IN TABLE_SEARCH_RESULT SearchResult
2721 RtlIsGenericTableEmpty(
2722 IN PRTL_GENERIC_TABLE Table
2728 RtlLookupElementGenericTableFull(
2729 IN PRTL_GENERIC_TABLE Table
,
2731 OUT PVOID
*NodeOrParent
,
2732 OUT TABLE_SEARCH_RESULT
*SearchResult
2737 // Handle Table Functions
2740 PRTL_HANDLE_TABLE_ENTRY
2743 IN PRTL_HANDLE_TABLE HandleTable
,
2750 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable
);
2756 IN PRTL_HANDLE_TABLE HandleTable
,
2757 IN PRTL_HANDLE_TABLE_ENTRY Handle
2763 RtlInitializeHandleTable(
2765 IN ULONG HandleSize
,
2766 IN PRTL_HANDLE_TABLE HandleTable
2773 IN PRTL_HANDLE_TABLE HandleTable
,
2774 IN PRTL_HANDLE_TABLE_ENTRY Handle
2780 RtlIsValidIndexHandle(
2781 IN PRTL_HANDLE_TABLE HandleTable
,
2783 OUT PRTL_HANDLE_TABLE_ENTRY
*Handle
2793 IN PVOID BaseAddress
,
2797 OUT PRTL_MESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
2803 RtlGetNtGlobalFlags(VOID
);
2808 RtlImageDirectoryEntryToData(
2810 BOOLEAN MappedAsImage
,
2819 PIMAGE_NT_HEADERS NtHeader
,
2822 PIMAGE_SECTION_HEADER
*SectionHeader
2828 RtlImageNtHeader(IN PVOID BaseAddress
);
2835 IN PVOID BaseAddress
,
2837 IN PIMAGE_NT_HEADERS
*NtHeader
2841 PIMAGE_SECTION_HEADER
2843 RtlImageRvaToSection(
2844 PIMAGE_NT_HEADERS NtHeader
,
2852 LdrRelocateImageWithBias(
2853 IN PVOID NewAddress
,
2854 IN LONGLONG AdditionalBias
,
2862 // Activation Context Functions
2864 #ifdef NTOS_MODE_USER
2869 RtlActivateActivationContext(
2872 OUT PULONG_PTR Cookie
2878 RtlAddRefActivationContext(
2886 RtlActivateActivationContextUnsafeFast(
2887 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
,
2894 RtlAllocateActivationContextStack(
2901 RtlCreateActivationContext(
2903 IN OUT PVOID ReturnedData
2909 RtlGetActiveActivationContext(
2916 RtlReleaseActivationContext(
2923 RtlDeactivateActivationContext(
2931 RtlFreeThreadActivationContextStack(void);
2936 RtlDeactivateActivationContextUnsafeFast(
2937 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
2943 RtlDosApplyFileIsolationRedirection_Ustr(
2945 IN PUNICODE_STRING OriginalName
,
2946 IN PUNICODE_STRING Extension
,
2947 IN OUT PUNICODE_STRING RedirectedName
,
2948 IN OUT PUNICODE_STRING RedirectedName2
,
2949 IN OUT PUNICODE_STRING
*OriginalName2
,
2958 RtlFindActivationContextSectionString(
2960 IN
const GUID
*ExtensionGuid
,
2961 IN ULONG SectionType
,
2962 IN PUNICODE_STRING SectionName
,
2963 IN OUT PVOID ReturnedData
2969 RtlQueryInformationActivationContext(
2972 PVOID pvSubInstance
,
2975 SIZE_T cbBuffer OPTIONAL
,
2976 SIZE_T
*pcbWrittenOrRequired OPTIONAL
2982 RtlZombifyActivationContext(
2990 // Registry Functions
2995 RtlCheckRegistryKey(
3003 RtlCreateRegistryKey(
3004 IN ULONG RelativeTo
,
3011 RtlFormatCurrentUserKeyPath(
3012 IN OUT PUNICODE_STRING KeyPath
3019 OUT HANDLE KeyHandle
,
3020 IN ACCESS_MASK DesiredAccess
,
3021 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3029 IN ACCESS_MASK DesiredAccess
,
3030 OUT PHANDLE KeyHandle
3036 RtlQueryRegistryValues(
3037 IN ULONG RelativeTo
,
3039 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
3041 IN PVOID Environment
3047 RtlWriteRegistryValue(
3062 RtlGetDefaultCodePage(
3063 OUT PUSHORT AnsiCodePage
,
3064 OUT PUSHORT OemCodePage
3071 IN PUSHORT AnsiTableBase
,
3072 IN PUSHORT OemTableBase
,
3073 IN PUSHORT CaseTableBase
,
3074 OUT PNLSTABLEINFO NlsTable
3080 RtlInitCodePageTable(
3081 IN PUSHORT TableBase
,
3082 OUT PCPTABLEINFO CodePageTable
3088 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable
);
3090 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
3093 // Misc conversion functions
3098 RtlConvertLongToLargeInteger(
3102 LARGE_INTEGER Result
;
3104 Result
.QuadPart
= SignedInteger
;
3111 RtlEnlargedIntegerMultiply(
3116 LARGE_INTEGER Product
;
3118 Product
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3125 RtlEnlargedUnsignedDivide(
3126 IN ULARGE_INTEGER Dividend
,
3128 IN PULONG Remainder OPTIONAL
3133 Quotient
= (ULONG
)(Dividend
.QuadPart
/ Divisor
);
3135 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
3144 RtlEnlargedUnsignedMultiply(
3149 LARGE_INTEGER Product
;
3151 Product
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3174 IN USHORT PartialCrc
,
3180 // Network Functions
3185 RtlIpv4StringToAddressW(
3188 OUT LPWSTR
*Terminator
,
3189 OUT
struct in_addr
*Addr
3195 RtlIpv6StringToAddressA(
3197 OUT PCHAR
*Terminator
,
3198 OUT
struct in6_addr
*Addr
3204 RtlIpv6StringToAddressW(
3206 OUT PCHAR
*Terminator
,
3207 OUT
struct in6_addr
*Addr
3213 RtlIpv6StringToAddressExA(
3214 IN PCHAR AddressString
,
3215 IN
struct in6_addr
*Address
,
3223 RtlIpv6StringToAddressExW(
3224 IN PWCHAR AddressName
,
3225 IN
struct in6_addr
*Address
,
3237 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3242 RtlSecondsSince1970ToTime(
3243 IN ULONG SecondsSince1970
,
3244 OUT PLARGE_INTEGER Time
3250 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3255 RtlTimeFieldsToTime(
3256 PTIME_FIELDS TimeFields
,
3263 RtlTimeToSecondsSince1970(
3264 PLARGE_INTEGER Time
,
3265 OUT PULONG SecondsSince1970
3271 RtlTimeToTimeFields(
3272 PLARGE_INTEGER Time
,
3273 PTIME_FIELDS TimeFields
3279 RtlSystemTimeToLocalTime(
3280 IN PLARGE_INTEGER SystemTime
,
3281 OUT PLARGE_INTEGER LocalTime
3285 // Version Functions
3290 RtlVerifyVersionInfo(
3291 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3293 IN ULONGLONG ConditionMask
3299 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3304 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType
);
3307 // Secure Memory Functions
3309 #ifdef NTOS_MODE_USER
3313 RtlRegisterSecureMemoryCacheCallback(
3314 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback
);
3319 RtlFlushSecureMemoryCache(
3320 IN PVOID MemoryCache
,
3321 IN OPTIONAL SIZE_T MemoryLength