3 Copyright (c) Alex Ionescu. All rights reserved.
11 Function definitions for the Run-Time Library
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
45 IN PLIST_ENTRY ListHead
48 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
54 IN PLIST_ENTRY ListHead
,
59 OldFlink
= ListHead
->Flink
;
60 Entry
->Flink
= OldFlink
;
61 Entry
->Blink
= ListHead
;
62 OldFlink
->Blink
= Entry
;
63 ListHead
->Flink
= Entry
;
69 IN PLIST_ENTRY ListHead
,
74 OldBlink
= ListHead
->Blink
;
75 Entry
->Flink
= ListHead
;
76 Entry
->Blink
= OldBlink
;
77 OldBlink
->Flink
= Entry
;
78 ListHead
->Blink
= Entry
;
84 IN
const LIST_ENTRY
* ListHead
87 return (BOOLEAN
)(ListHead
->Flink
== ListHead
);
93 PSINGLE_LIST_ENTRY ListHead
96 PSINGLE_LIST_ENTRY FirstEntry
;
97 FirstEntry
= ListHead
->Next
;
98 if (FirstEntry
!= NULL
) {
99 ListHead
->Next
= FirstEntry
->Next
;
108 PSINGLE_LIST_ENTRY ListHead
,
109 PSINGLE_LIST_ENTRY Entry
112 Entry
->Next
= ListHead
->Next
;
113 ListHead
->Next
= Entry
;
119 IN PLIST_ENTRY Entry
)
121 PLIST_ENTRY OldFlink
;
122 PLIST_ENTRY OldBlink
;
124 OldFlink
= Entry
->Flink
;
125 OldBlink
= Entry
->Blink
;
126 OldFlink
->Blink
= OldBlink
;
127 OldBlink
->Flink
= OldFlink
;
128 return (BOOLEAN
)(OldFlink
== OldBlink
);
134 IN PLIST_ENTRY ListHead
)
139 Entry
= ListHead
->Flink
;
140 Flink
= Entry
->Flink
;
141 ListHead
->Flink
= Flink
;
142 Flink
->Blink
= ListHead
;
149 IN PLIST_ENTRY ListHead
)
154 Entry
= ListHead
->Blink
;
155 Blink
= Entry
->Blink
;
156 ListHead
->Blink
= Blink
;
157 Blink
->Flink
= ListHead
;
162 // Unicode string macros
166 RtlInitEmptyUnicodeString(OUT PUNICODE_STRING UnicodeString
,
168 IN USHORT BufferSize
)
170 UnicodeString
->Length
= 0;
171 UnicodeString
->MaximumLength
= BufferSize
;
172 UnicodeString
->Buffer
= Buffer
;
178 #define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \
179 ((L1)->LowPart == (L2)->LowPart))
183 RtlConvertUlongToLuid(ULONG Ulong
)
187 TempLuid
.LowPart
= Ulong
;
188 TempLuid
.HighPart
= 0;
198 #define ASSERT( exp ) \
200 (RtlAssert( #exp, __FILE__, __LINE__, NULL ),FALSE) : \
203 #define ASSERTMSG( msg, exp ) \
205 (RtlAssert( #exp, __FILE__, __LINE__, msg ),FALSE) : \
210 #define ASSERT( exp ) ((void) 0)
211 #define ASSERTMSG( msg, exp ) ((void) 0)
216 #ifdef NTOS_KERNEL_RUNTIME
219 // Executing RTL functions at DISPATCH_LEVEL or higher will result in a
222 #define RTL_PAGED_CODE PAGED_CODE
227 // This macro does nothing in user mode
229 #define RTL_PAGED_CODE NOP_FUNCTION
234 // RTL Splay Tree Functions
240 IN PRTL_SPLAY_LINKS Links
246 RtlDelete(IN PRTL_SPLAY_LINKS Links
253 IN PRTL_SPLAY_LINKS Links
,
254 OUT PRTL_SPLAY_LINKS
*Root
261 IN PRTL_SPLAY_LINKS Links
267 RtlSubtreePredecessor(
268 IN PRTL_SPLAY_LINKS Links
275 IN PRTL_SPLAY_LINKS Links
282 IN PRTL_SPLAY_LINKS Links
285 #define RtlIsLeftChild(Links) \
286 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
288 #define RtlIsRightChild(Links) \
289 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
291 #define RtlRightChild(Links) \
292 ((PRTL_SPLAY_LINKS)(Links))->RightChild
294 #define RtlIsRoot(Links) \
295 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
297 #define RtlLeftChild(Links) \
298 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
300 #define RtlParent(Links) \
301 ((PRTL_SPLAY_LINKS)(Links))->Parent
303 #define RtlInitializeSplayLinks(Links) \
305 PRTL_SPLAY_LINKS _SplayLinks; \
306 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
307 _SplayLinks->Parent = _SplayLinks; \
308 _SplayLinks->LeftChild = NULL; \
309 _SplayLinks->RightChild = NULL; \
312 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
314 PRTL_SPLAY_LINKS _SplayParent; \
315 PRTL_SPLAY_LINKS _SplayChild; \
316 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
317 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
318 _SplayParent->LeftChild = _SplayChild; \
319 _SplayChild->Parent = _SplayParent; \
322 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
324 PRTL_SPLAY_LINKS _SplayParent; \
325 PRTL_SPLAY_LINKS _SplayChild; \
326 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
327 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
328 _SplayParent->RightChild = _SplayChild; \
329 _SplayChild->Parent = _SplayParent; \
334 // Error and Exception Functions
339 RtlAddVectoredExceptionHandler(
340 IN ULONG FirstHandler
,
341 IN PVECTORED_EXCEPTION_HANDLER VectoredHandler
348 IN PVOID FailedAssertion
,
357 RtlSetUnhandledExceptionFilter(
358 IN PVOID TopLevelExceptionFilter
365 OUT PCONTEXT ContextRecord
385 RtlEncodeSystemPointer(
392 RtlDecodeSystemPointer(
399 RtlDispatchException(
400 IN PEXCEPTION_RECORD ExceptionRecord
,
407 RtlNtStatusToDosError(
414 RtlNtStatusToDosErrorNoTeb(
421 RtlSetLastWin32ErrorAndNtStatusFromNtStatus(
429 IN PEXCEPTION_RECORD ExceptionRecord
443 RtlUnhandledExceptionFilter(
444 IN
struct _EXCEPTION_POINTERS
* ExceptionInfo
451 IN PVOID TargetFrame OPTIONAL
,
452 IN PVOID TargetIp OPTIONAL
,
453 IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL
,
472 RtlLogStackBackTrace(
483 IN HANDLE HeapHandle
,
493 IN PVOID BaseAddress OPTIONAL
,
494 IN SIZE_T SizeToReserve OPTIONAL
,
495 IN SIZE_T SizeToCommit OPTIONAL
,
496 IN PVOID Lock OPTIONAL
,
497 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
504 IN HANDLE HeapHandle
,
522 IN PVOID BaseAddress OPTIONAL
,
523 IN SIZE_T SizeToReserve OPTIONAL
,
524 IN SIZE_T SizeToCommit OPTIONAL
,
525 IN PVOID Lock OPTIONAL
,
526 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
550 IN HANDLE HeapHandle
,
574 IN PVOID BaseAddress
,
575 OUT PVOID
*UserValue
,
594 IN BOOLEAN ResetCounters
,
595 OUT PRTL_HEAP_TAG_INFO HeapTagInfo
621 OUT PRTL_HEAP_USAGE Usage
636 IN PVOID BaseAddress
,
645 IN PVOID BaseAddress
,
655 IN PVOID MemoryPointer
671 IN HANDLE HeapHandle
,
675 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
678 // Security Functions
683 RtlAbsoluteToSelfRelativeSD(
684 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
685 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
686 IN PULONG BufferLength
692 RtlAddAccessAllowedAce(
695 ACCESS_MASK AccessMask
,
702 RtlAddAccessAllowedAceEx(
704 IN ULONG dwAceRevision
,
706 IN ACCESS_MASK AccessMask
,
713 RtlAddAccessAllowedObjectAce(
715 IN ULONG dwAceRevision
,
717 IN ACCESS_MASK AccessMask
,
718 IN GUID
*ObjectTypeGuid OPTIONAL
,
719 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
726 RtlAddAccessDeniedAce(
729 ACCESS_MASK AccessMask
,
736 RtlAddAccessDeniedAceEx(
740 IN ACCESS_MASK AccessMask
,
747 RtlAddAccessDeniedObjectAce(
749 IN ULONG dwAceRevision
,
751 IN ACCESS_MASK AccessMask
,
752 IN GUID
*ObjectTypeGuid OPTIONAL
,
753 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
763 ULONG StartingAceIndex
,
771 RtlAddAuditAccessAce(
774 ACCESS_MASK AccessMask
,
787 OUT PVOID
*ReturnedState
793 RtlAddAuditAccessAceEx(
797 IN ACCESS_MASK AccessMask
,
806 RtlAddAuditAccessObjectAce(
810 IN ACCESS_MASK AccessMask
,
811 IN GUID
*ObjectTypeGuid OPTIONAL
,
812 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
825 IN ULONG MandatoryFlags
,
835 IN BOOLEAN ForThread
,
836 OUT PBOOLEAN OldValue
842 RtlAllocateAndInitializeSid(
843 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
844 IN UCHAR SubAuthorityCount
,
845 IN ULONG SubAuthority0
,
846 IN ULONG SubAuthority1
,
847 IN ULONG SubAuthority2
,
848 IN ULONG SubAuthority3
,
849 IN ULONG SubAuthority4
,
850 IN ULONG SubAuthority5
,
851 IN ULONG SubAuthority6
,
852 IN ULONG SubAuthority7
,
859 RtlAreAllAccessesGranted(
860 ACCESS_MASK GrantedAccess
,
861 ACCESS_MASK DesiredAccess
867 RtlAreAnyAccessesGranted(
868 ACCESS_MASK GrantedAccess
,
869 ACCESS_MASK DesiredAccess
883 RtlCopyLuidAndAttributesArray(
885 PLUID_AND_ATTRIBUTES Src
,
886 PLUID_AND_ATTRIBUTES Dest
892 RtlCopySidAndAttributesArray(
894 PSID_AND_ATTRIBUTES Src
,
896 PSID_AND_ATTRIBUTES Dest
,
898 PVOID
* RemainingSidArea
,
899 PULONG RemainingSidAreaSize
905 RtlConvertSidToUnicodeString(
906 OUT PUNICODE_STRING DestinationString
,
908 IN BOOLEAN AllocateDestinationString
932 RtlCreateSecurityDescriptor(
933 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
940 RtlCreateSecurityDescriptorRelative(
941 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor
,
948 RtlCopySecurityDescriptor(
949 IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor
,
950 OUT PSECURITY_DESCRIPTOR pDestinationSecurityDescriptor
1004 RtlGetControlSecurityDescriptor(
1005 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1006 OUT PSECURITY_DESCRIPTOR_CONTROL Control
,
1013 RtlGetDaclSecurityDescriptor(
1014 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1015 OUT PBOOLEAN DaclPresent
,
1017 OUT PBOOLEAN DaclDefaulted
1023 RtlGetSaclSecurityDescriptor(
1024 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1025 OUT PBOOLEAN SaclPresent
,
1027 OUT PBOOLEAN SaclDefaulted
1033 RtlGetGroupSecurityDescriptor(
1034 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1036 OUT PBOOLEAN GroupDefaulted
1042 RtlGetOwnerSecurityDescriptor(
1043 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1045 OUT PBOOLEAN OwnerDefaulted
1051 RtlGetSecurityDescriptorRMControl(
1052 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1053 OUT PUCHAR RMControl
1057 PSID_IDENTIFIER_AUTHORITY
1059 RtlIdentifierAuthoritySid(PSID Sid
);
1064 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
1071 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1072 IN UCHAR SubAuthorityCount
1078 RtlLengthRequiredSid(IN ULONG SubAuthorityCount
);
1083 RtlLengthSid(IN PSID Sid
);
1088 RtlMakeSelfRelativeSD(
1089 IN PSECURITY_DESCRIPTOR AbsoluteSD
,
1090 OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1091 IN OUT PULONG BufferLength
);
1097 PACCESS_MASK AccessMask
,
1098 PGENERIC_MAPPING GenericMapping
1101 #ifdef NTOS_MODE_USER
1106 RtlQueryInformationAcl(
1109 ULONG InformationLength
,
1110 ACL_INFORMATION_CLASS InformationClass
1118 RtlReleasePrivilege(
1119 IN PVOID ReturnedState
1125 RtlSelfRelativeToAbsoluteSD(
1126 IN PSECURITY_DESCRIPTOR SelfRelativeSD
,
1127 OUT PSECURITY_DESCRIPTOR AbsoluteSD
,
1128 IN PULONG AbsoluteSDSize
,
1134 IN PULONG OwnerSize
,
1135 IN PSID PrimaryGroup
,
1136 IN PULONG PrimaryGroupSize
1142 RtlSelfRelativeToAbsoluteSD2(
1143 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1144 OUT PULONG BufferSize
1150 RtlSetAttributesSecurityDescriptor(
1151 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1152 IN SECURITY_DESCRIPTOR_CONTROL Control
,
1159 RtlSetControlSecurityDescriptor(
1160 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1161 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest
,
1162 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
1168 RtlSetDaclSecurityDescriptor (
1169 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1170 IN BOOLEAN DaclPresent
,
1172 IN BOOLEAN DaclDefaulted
1178 RtlSetGroupSecurityDescriptor(
1179 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1181 IN BOOLEAN GroupDefaulted
1184 #ifdef NTOS_MODE_USER
1189 RtlSetInformationAcl(
1192 ULONG InformationLength
,
1193 ACL_INFORMATION_CLASS InformationClass
1201 RtlSetOwnerSecurityDescriptor(
1202 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1204 IN BOOLEAN OwnerDefaulted
1210 RtlSetSaclSecurityDescriptor(
1211 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1212 IN BOOLEAN SaclPresent
,
1214 IN BOOLEAN SaclDefaulted
1220 RtlSetSecurityDescriptorRMControl(
1221 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1228 RtlSubAuthorityCountSid(
1237 IN ULONG SubAuthority
1243 RtlValidRelativeSecurityDescriptor(
1244 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
1245 IN ULONG SecurityDescriptorLength
,
1246 IN SECURITY_INFORMATION RequiredInformation
1252 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
1257 RtlValidSid(IN PSID Sid
);
1262 RtlValidAcl(PACL Acl
);
1267 RtlDeleteSecurityObject(
1268 IN PSECURITY_DESCRIPTOR
*ObjectDescriptor
1274 RtlNewSecurityObject(
1275 IN PSECURITY_DESCRIPTOR ParentDescriptor
,
1276 IN PSECURITY_DESCRIPTOR CreatorDescriptor
,
1277 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
1278 IN BOOLEAN IsDirectoryObject
,
1280 IN PGENERIC_MAPPING GenericMapping
1286 RtlQuerySecurityObject(
1287 IN PSECURITY_DESCRIPTOR ObjectDescriptor
,
1288 IN SECURITY_INFORMATION SecurityInformation
,
1289 OUT PSECURITY_DESCRIPTOR ResultantDescriptor
,
1290 IN ULONG DescriptorLength
,
1291 OUT PULONG ReturnLength
1297 RtlSetSecurityObject(
1298 IN SECURITY_INFORMATION SecurityInformation
,
1299 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
1300 OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
1301 IN PGENERIC_MAPPING GenericMapping
,
1306 // Single-Character Functions
1311 RtlLargeIntegerToChar(
1312 IN PLARGE_INTEGER Value
,
1321 RtlUpperChar(CHAR Source
);
1326 RtlUpcaseUnicodeChar(WCHAR Source
);
1331 RtlDowncaseUnicodeChar(IN WCHAR Source
);
1346 RtlIntegerToUnicode(
1348 IN ULONG Base OPTIONAL
,
1349 IN ULONG Length OPTIONAL
,
1350 IN OUT LPWSTR String
1356 RtlIntegerToUnicodeString(
1359 IN OUT PUNICODE_STRING String
1372 // Byte Swap Functions
1374 #ifdef NTOS_MODE_USER
1376 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
1377 ((defined(_M_AMD64) || \
1378 defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
1380 unsigned short __cdecl
_byteswap_ushort(unsigned short);
1381 unsigned long __cdecl
_byteswap_ulong (unsigned long);
1382 unsigned __int64 __cdecl
_byteswap_uint64(unsigned __int64
);
1383 #pragma intrinsic(_byteswap_ushort)
1384 #pragma intrinsic(_byteswap_ulong)
1385 #pragma intrinsic(_byteswap_uint64)
1386 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1387 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1388 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1390 #elif defined (__GNUC__)
1392 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1393 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1394 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1398 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1402 RtlUshortByteSwap(IN USHORT Source
);
1407 RtlUlongByteSwap(IN ULONG Source
);
1412 RtlUlonglongByteSwap(IN ULONGLONG Source
);
1416 #endif // NTOS_MODE_USER
1419 // Unicode->Ansi String Functions
1424 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString
);
1426 #ifdef NTOS_MODE_USER
1428 #define RtlUnicodeStringToAnsiSize(STRING) ( \
1429 NLS_MB_CODE_PAGE_TAG ? \
1430 RtlxUnicodeStringToAnsiSize(STRING) : \
1431 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1439 RtlUnicodeStringToAnsiString(
1440 PANSI_STRING DestinationString
,
1441 PCUNICODE_STRING SourceString
,
1442 BOOLEAN AllocateDestinationString
1446 // Unicode->OEM String Functions
1451 RtlUpcaseUnicodeStringToOemString(
1452 POEM_STRING DestinationString
,
1453 PCUNICODE_STRING SourceString
,
1454 BOOLEAN AllocateDestinationString
1460 RtlUpcaseUnicodeStringToCountedOemString(
1461 IN OUT POEM_STRING DestinationString
,
1462 IN PCUNICODE_STRING SourceString
,
1463 IN BOOLEAN AllocateDestinationString
1469 RtlUnicodeStringToOemString(
1470 POEM_STRING DestinationString
,
1471 PCUNICODE_STRING SourceString
,
1472 BOOLEAN AllocateDestinationString
1478 RtlUpcaseUnicodeToOemN(
1482 PCWCH UnicodeString
,
1489 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString
);
1491 #ifdef NTOS_MODE_USER
1493 #define RtlUnicodeStringToOemSize(STRING) ( \
1494 NLS_MB_OEM_CODE_PAGE_TAG ? \
1495 RtlxUnicodeStringToOemSize(STRING) : \
1496 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1499 #define RtlUnicodeStringToCountedOemSize(STRING) ( \
1500 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
1512 PCWCH UnicodeString
,
1517 // Unicode->MultiByte String Functions
1522 RtlUnicodeToMultiByteN(
1526 PWCHAR UnicodeString
,
1533 RtlUpcaseUnicodeToMultiByteN(
1537 PCWCH UnicodeString
,
1544 RtlUnicodeToMultiByteSize(
1546 PCWCH UnicodeString
,
1553 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString
);
1556 // OEM to Unicode Functions
1561 RtlOemStringToUnicodeString(
1562 PUNICODE_STRING DestinationString
,
1563 PCOEM_STRING SourceString
,
1564 BOOLEAN AllocateDestinationString
1571 PWSTR UnicodeString
,
1572 ULONG MaxBytesInUnicodeString
,
1573 PULONG BytesInUnicodeString
,
1575 ULONG BytesInOemString
1578 #ifdef NTOS_MODE_USER
1580 #define RtlOemStringToUnicodeSize(STRING) ( \
1581 NLS_MB_OEM_CODE_PAGE_TAG ? \
1582 RtlxOemStringToUnicodeSize(STRING) : \
1583 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1586 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1587 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1593 // Ansi->Unicode String Functions
1598 RtlxAnsiStringToUnicodeSize(
1599 PCANSI_STRING AnsiString
1605 RtlAnsiStringToUnicodeString(
1606 PUNICODE_STRING DestinationString
,
1607 PCANSI_STRING SourceString
,
1608 BOOLEAN AllocateDestinationString
1611 #ifdef NTOS_MODE_USER
1613 #define RtlAnsiStringToUnicodeSize(STRING) ( \
1614 NLS_MB_CODE_PAGE_TAG ? \
1615 RtlxAnsiStringToUnicodeSize(STRING) : \
1616 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1624 RtlCreateUnicodeStringFromAsciiz(
1625 OUT PUNICODE_STRING Destination
,
1630 // Unicode String Functions
1635 RtlAppendUnicodeToString(
1636 PUNICODE_STRING Destination
,
1643 RtlAppendUnicodeStringToString(
1644 PUNICODE_STRING Destination
,
1645 PCUNICODE_STRING Source
1651 RtlCompareUnicodeString(
1652 PCUNICODE_STRING String1
,
1653 PCUNICODE_STRING String2
,
1654 BOOLEAN CaseInsensitive
1660 RtlCopyUnicodeString(
1661 PUNICODE_STRING DestinationString
,
1662 PCUNICODE_STRING SourceString
1668 RtlCreateUnicodeString(
1669 PUNICODE_STRING DestinationString
,
1673 #ifdef NTOS_MODE_USER
1678 RtlDowncaseUnicodeString(
1679 IN OUT PUNICODE_STRING UniDest
,
1680 IN PCUNICODE_STRING UniSource
,
1681 IN BOOLEAN AllocateDestinationString
1687 RtlDuplicateUnicodeString(
1689 IN PCUNICODE_STRING SourceString
,
1690 OUT PUNICODE_STRING DestinationString
1698 RtlEqualUnicodeString(
1699 PCUNICODE_STRING String1
,
1700 PCUNICODE_STRING String2
,
1701 BOOLEAN CaseInsensitive
1707 RtlFindCharInUnicodeString(
1709 IN PUNICODE_STRING SearchString
,
1710 IN PCUNICODE_STRING MatchString
,
1711 OUT PUSHORT Position
1717 RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString
);
1722 RtlHashUnicodeString(
1723 IN CONST UNICODE_STRING
*String
,
1724 IN BOOLEAN CaseInSensitive
,
1725 IN ULONG HashAlgorithm
,
1726 OUT PULONG HashValue
1732 RtlInitUnicodeString(
1733 IN OUT PUNICODE_STRING DestinationString
,
1734 IN PCWSTR SourceString
1740 RtlInitUnicodeStringEx(
1741 OUT PUNICODE_STRING DestinationString
,
1742 IN PCWSTR SourceString OPTIONAL
1758 PCANSI_STRING String1
,
1759 PCANSI_STRING String2
,
1760 BOOLEAN CaseInsensitive
1766 RtlPrefixUnicodeString(
1767 PCUNICODE_STRING String1
,
1768 PCUNICODE_STRING String2
,
1769 BOOLEAN CaseInsensitive
1775 RtlUpcaseUnicodeString(
1776 PUNICODE_STRING DestinationString
,
1777 PCUNICODE_STRING SourceString
,
1778 BOOLEAN AllocateDestinationString
1784 RtlUnicodeStringToInteger(
1785 PCUNICODE_STRING String
,
1793 RtlValidateUnicodeString(
1795 IN PCUNICODE_STRING String
1799 // Ansi String Functions
1804 RtlFreeAnsiString(IN PANSI_STRING AnsiString
);
1810 PANSI_STRING DestinationString
,
1817 RtlInitAnsiStringEx(
1818 PANSI_STRING DestinationString
,
1823 // OEM String Functions
1828 RtlFreeOemString(IN POEM_STRING OemString
);
1831 // MultiByte->Unicode String Functions
1836 RtlMultiByteToUnicodeN(
1837 PWCHAR UnicodeString
,
1847 RtlMultiByteToUnicodeSize(
1859 RtlAddAtomToAtomTable(
1860 IN PRTL_ATOM_TABLE AtomTable
,
1870 IN OUT PRTL_ATOM_TABLE
*AtomTable
1876 RtlDeleteAtomFromAtomTable(
1877 IN PRTL_ATOM_TABLE AtomTable
,
1884 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable
);
1889 RtlQueryAtomInAtomTable(
1890 IN PRTL_ATOM_TABLE AtomTable
,
1892 IN OUT PULONG RefCount OPTIONAL
,
1893 IN OUT PULONG PinCount OPTIONAL
,
1894 IN OUT PWSTR AtomName OPTIONAL
,
1895 IN OUT PULONG NameLength OPTIONAL
1901 RtlPinAtomInAtomTable(
1902 IN PRTL_ATOM_TABLE AtomTable
,
1909 RtlLookupAtomInAtomTable(
1910 IN PRTL_ATOM_TABLE AtomTable
,
1922 IN PVOID Destination
,
1928 // Process Management Functions
1940 RtlAcquirePebLock(VOID
);
1945 RtlCreateProcessParameters (
1946 OUT PRTL_USER_PROCESS_PARAMETERS
*ProcessParameters
,
1947 IN PUNICODE_STRING ImagePathName OPTIONAL
,
1948 IN PUNICODE_STRING DllPath OPTIONAL
,
1949 IN PUNICODE_STRING CurrentDirectory OPTIONAL
,
1950 IN PUNICODE_STRING CommandLine OPTIONAL
,
1951 IN PWSTR Environment OPTIONAL
,
1952 IN PUNICODE_STRING WindowTitle OPTIONAL
,
1953 IN PUNICODE_STRING DesktopInfo OPTIONAL
,
1954 IN PUNICODE_STRING ShellInfo OPTIONAL
,
1955 IN PUNICODE_STRING RuntimeInfo OPTIONAL
1961 RtlCreateUserProcess(
1962 IN PUNICODE_STRING ImageFileName
,
1963 IN ULONG Attributes
,
1964 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
,
1965 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL
,
1966 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL
,
1967 IN HANDLE ParentProcess OPTIONAL
,
1968 IN BOOLEAN CurrentDirectory
,
1969 IN HANDLE DebugPort OPTIONAL
,
1970 IN HANDLE ExceptionPort OPTIONAL
,
1971 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
1977 RtlCreateUserThread(
1978 IN HANDLE ProcessHandle
,
1979 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1980 IN BOOLEAN CreateSuspended
,
1981 IN ULONG StackZeroBits
,
1982 IN SIZE_T StackReserve
,
1983 IN SIZE_T StackCommit
,
1984 IN PTHREAD_START_ROUTINE StartAddress
,
1986 IN OUT PHANDLE ThreadHandle
,
1987 IN OUT PCLIENT_ID ClientId
1991 PRTL_USER_PROCESS_PARAMETERS
1993 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
1998 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2003 RtlExitUserThread(NTSTATUS Status
);
2008 RtlInitializeContext(
2009 IN HANDLE ProcessHandle
,
2010 OUT PCONTEXT ThreadContext
,
2011 IN PVOID ThreadStartParam OPTIONAL
,
2012 IN PTHREAD_START_ROUTINE ThreadStartAddress
,
2013 IN PINITIAL_TEB InitialTeb
2019 RtlIsThreadWithinLoaderCallout(VOID
);
2022 PRTL_USER_PROCESS_PARAMETERS
2024 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2029 RtlReleasePebLock(VOID
);
2038 IN ULONG ArgumentCount
,
2039 IN PULONG Arguments
,
2040 IN BOOLEAN PassContext
,
2041 IN BOOLEAN AlreadySuspended
2047 RtlSetProcessIsCritical(
2048 IN BOOLEAN NewValue
,
2049 OUT PBOOLEAN OldValue OPTIONAL
,
2050 IN BOOLEAN IsWinlogon
2056 RtlGetCurrentProcessorNumber(
2060 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
2063 // Thread Pool Functions
2068 RtlDeregisterWaitEx(
2069 IN HANDLE hWaitHandle
,
2070 IN HANDLE hCompletionEvent
2077 IN HANDLE hWaitHandle
2084 IN WORKERCALLBACKFUNC Function
,
2085 IN PVOID Context OPTIONAL
,
2092 RtlSetIoCompletionCallback(
2093 IN HANDLE FileHandle
,
2094 IN PIO_APC_ROUTINE Callback
,
2102 IN PHANDLE phNewWaitObject
,
2104 IN WAITORTIMERCALLBACKFUNC Callback
,
2106 IN ULONG ulMilliseconds
,
2111 // Environment/Path Functions
2116 RtlCreateEnvironment(
2124 RtlComputePrivatizedDllName_U(
2125 IN PUNICODE_STRING DllName
,
2126 OUT PUNICODE_STRING RealName
,
2127 OUT PUNICODE_STRING LocalName
2133 RtlDestroyEnvironment(
2134 IN PWSTR Environment
2140 RtlDoesFileExists_U(
2147 RtlDoesFileExists_UstrEx(
2148 IN PCUNICODE_STRING FileName
,
2149 IN BOOLEAN SucceedIfBusy
2155 RtlDetermineDosPathNameType_U(
2162 RtlDetermineDosPathNameType_Ustr(
2163 IN PCUNICODE_STRING Path
2172 IN PCWSTR Extension
,
2173 IN ULONG BufferSize
,
2181 RtlDosPathNameToNtPathName_U(
2182 IN PCWSTR DosPathName
,
2183 OUT PUNICODE_STRING NtPathName
,
2184 OUT PCWSTR
*NtFileNamePart
,
2185 OUT CURDIR
*DirectoryInfo
2191 RtlExpandEnvironmentStrings_U(
2193 PUNICODE_STRING Source
,
2194 PUNICODE_STRING Destination
,
2201 RtlGetCurrentDirectory_U(
2202 ULONG MaximumLength
,
2209 RtlGetFullPathName_U(
2213 OUT PWSTR
*ShortName
2219 RtlGetFullPathName_Ustr(
2220 IN PUNICODE_STRING FileName
,
2223 OUT PWSTR
*ShortName
,
2224 OUT PBOOLEAN InvalidName
,
2225 OUT RTL_PATH_TYPE
*PathType
2231 RtlIsDosDeviceName_U(
2238 RtlIsDosDeviceName_Ustr(
2239 IN PUNICODE_STRING Name
2246 RtlIsNameLegalDOS8Dot3(
2247 IN PCUNICODE_STRING Name
,
2248 IN OUT POEM_STRING OemName OPTIONAL
,
2249 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2255 RtlQueryEnvironmentVariable_U(
2257 PUNICODE_STRING Name
,
2258 PUNICODE_STRING Value
2264 RtlSetCurrentDirectory_U(
2265 IN PUNICODE_STRING name
2271 RtlSetEnvironmentVariable(
2273 PUNICODE_STRING Name
,
2274 PUNICODE_STRING Value
2278 // Critical Section/Resource Functions
2283 RtlDeleteCriticalSection (
2284 IN PRTL_CRITICAL_SECTION CriticalSection
2290 RtlEnterCriticalSection(
2291 IN PRTL_CRITICAL_SECTION CriticalSection
2297 RtlInitializeCriticalSection(
2298 IN PRTL_CRITICAL_SECTION CriticalSection
2304 RtlInitializeCriticalSectionAndSpinCount(
2305 IN PRTL_CRITICAL_SECTION CriticalSection
,
2312 RtlLeaveCriticalSection(
2313 IN PRTL_CRITICAL_SECTION CriticalSection
2319 RtlTryEnterCriticalSection(
2320 IN PRTL_CRITICAL_SECTION CriticalSection
2326 RtlpUnWaitCriticalSection(
2327 IN PRTL_CRITICAL_SECTION CriticalSection
2333 RtlpWaitForCriticalSection(
2334 IN PRTL_CRITICAL_SECTION CriticalSection
2340 RtlAcquireResourceExclusive(
2341 IN PRTL_RESOURCE Resource
,
2348 RtlAcquireResourceShared(
2349 IN PRTL_RESOURCE Resource
,
2356 RtlConvertExclusiveToShared(
2357 IN PRTL_RESOURCE Resource
2363 RtlConvertSharedToExclusive(
2364 IN PRTL_RESOURCE Resource
2371 IN PRTL_RESOURCE Resource
2378 IN PRTL_RESOURCE Resource
2384 RtlInitializeResource(
2385 IN PRTL_RESOURCE Resource
2392 IN PRTL_RESOURCE Resource
2396 // Compression Functions
2402 IN USHORT CompressionFormatAndEngine
,
2403 IN PUCHAR UncompressedBuffer
,
2404 IN ULONG UncompressedBufferSize
,
2405 OUT PUCHAR CompressedBuffer
,
2406 IN ULONG CompressedBufferSize
,
2407 IN ULONG UncompressedChunkSize
,
2408 OUT PULONG FinalCompressedSize
,
2415 RtlDecompressBuffer(
2416 IN USHORT CompressionFormat
,
2417 OUT PUCHAR UncompressedBuffer
,
2418 IN ULONG UncompressedBufferSize
,
2419 IN PUCHAR CompressedBuffer
,
2420 IN ULONG CompressedBufferSize
,
2421 OUT PULONG FinalUncompressedSize
2427 RtlGetCompressionWorkSpaceSize(
2428 IN USHORT CompressionFormatAndEngine
,
2429 OUT PULONG CompressBufferWorkSpaceSize
,
2430 OUT PULONG CompressFragmentWorkSpaceSize
2434 // Debug Info Functions
2437 PRTL_DEBUG_INFORMATION
2439 RtlCreateQueryDebugBuffer(
2441 IN BOOLEAN EventPair
2447 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer
);
2452 RtlQueryProcessDebugInformation(
2454 IN ULONG DebugInfoClassMask
,
2455 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2465 IN PRTL_BITMAP BitMapHeader
,
2466 IN ULONG StartingIndex
,
2474 IN PRTL_BITMAP BitMapHeader
,
2475 IN ULONG StartingIndex
,
2483 IN PRTL_BITMAP BitMapHeader
,
2484 IN ULONG StartingIndex
,
2485 IN ULONG NumberToClear
2492 IN PRTL_BITMAP BitMapHeader
,
2493 IN ULONG NumberToFind
,
2500 RtlFindClearBitsAndSet(
2501 IN PRTL_BITMAP BitMapHeader
,
2502 IN ULONG NumberToFind
,
2509 RtlFindNextForwardRunClear(
2510 IN PRTL_BITMAP BitMapHeader
,
2512 IN PULONG StartingRunIndex
2518 RtlInitializeBitMap(
2519 IN PRTL_BITMAP BitMapHeader
,
2520 IN PULONG BitMapBuffer
,
2521 IN ULONG SizeOfBitMap
2528 IN PRTL_BITMAP BitMapHeader
2535 PRTL_BITMAP BitMapHeader
,
2543 IN PRTL_BITMAP BitMapHeader
,
2544 IN ULONG StartingIndex
,
2545 IN ULONG NumberToSet
2552 PRTL_BITMAP BitMapHeader
2559 PRTL_BITMAP BitMapHeader
,
2572 WAITORTIMERCALLBACKFUNC Callback
,
2582 RtlCreateTimerQueue(PHANDLE TimerQueue
);
2590 HANDLE CompletionEvent
2606 RtlDeleteTimerQueueEx(
2608 HANDLE CompletionEvent
2614 RtlDeleteTimerQueue(HANDLE TimerQueue
);
2621 InterlockedPushListSList(
2622 IN PSLIST_HEADER ListHead
,
2623 IN PSLIST_ENTRY List
,
2624 IN PSLIST_ENTRY ListEnd
,
2629 // Range List functions
2634 RtlFreeRangeList(IN PRTL_RANGE_LIST RangeList
);
2650 IN ULONG ComponentId
,
2662 IN ULONG MaximumResponseLength
2673 DbgLoadImageSymbols(
2676 IN ULONG_PTR ProcessId
2681 DbgUnLoadImageSymbols(
2684 IN ULONG_PTR ProcessId
2695 // Generic Table Functions
2697 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
2701 RtlInsertElementGenericTable(
2702 IN PRTL_GENERIC_TABLE Table
,
2704 IN ULONG BufferSize
,
2705 OUT PBOOLEAN NewElement OPTIONAL
2711 RtlInsertElementGenericTableFull(
2712 IN PRTL_GENERIC_TABLE Table
,
2714 IN ULONG BufferSize
,
2715 OUT PBOOLEAN NewElement OPTIONAL
,
2716 IN PVOID NodeOrParent
,
2717 IN TABLE_SEARCH_RESULT SearchResult
2723 RtlIsGenericTableEmpty(
2724 IN PRTL_GENERIC_TABLE Table
2730 RtlLookupElementGenericTableFull(
2731 IN PRTL_GENERIC_TABLE Table
,
2733 OUT PVOID
*NodeOrParent
,
2734 OUT TABLE_SEARCH_RESULT
*SearchResult
2739 // Handle Table Functions
2742 PRTL_HANDLE_TABLE_ENTRY
2745 IN PRTL_HANDLE_TABLE HandleTable
,
2752 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable
);
2758 IN PRTL_HANDLE_TABLE HandleTable
,
2759 IN PRTL_HANDLE_TABLE_ENTRY Handle
2765 RtlInitializeHandleTable(
2767 IN ULONG HandleSize
,
2768 IN PRTL_HANDLE_TABLE HandleTable
2775 IN PRTL_HANDLE_TABLE HandleTable
,
2776 IN PRTL_HANDLE_TABLE_ENTRY Handle
2782 RtlIsValidIndexHandle(
2783 IN PRTL_HANDLE_TABLE HandleTable
,
2785 OUT PRTL_HANDLE_TABLE_ENTRY
*Handle
2795 IN PVOID BaseAddress
,
2799 OUT PRTL_MESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
2805 RtlGetNtGlobalFlags(VOID
);
2810 RtlImageDirectoryEntryToData(
2812 BOOLEAN MappedAsImage
,
2821 PIMAGE_NT_HEADERS NtHeader
,
2824 PIMAGE_SECTION_HEADER
*SectionHeader
2830 RtlImageNtHeader(IN PVOID BaseAddress
);
2837 IN PVOID BaseAddress
,
2839 IN PIMAGE_NT_HEADERS
*NtHeader
2843 PIMAGE_SECTION_HEADER
2845 RtlImageRvaToSection(
2846 PIMAGE_NT_HEADERS NtHeader
,
2854 LdrRelocateImageWithBias(
2855 IN PVOID NewAddress
,
2856 IN LONGLONG AdditionalBias
,
2864 // Activation Context Functions
2866 #ifdef NTOS_MODE_USER
2871 RtlActivateActivationContext(
2874 OUT PULONG_PTR Cookie
2880 RtlAddRefActivationContext(
2888 RtlActivateActivationContextUnsafeFast(
2889 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
,
2896 RtlAllocateActivationContextStack(
2903 RtlCreateActivationContext(
2905 IN OUT PVOID ReturnedData
2911 RtlGetActiveActivationContext(
2918 RtlReleaseActivationContext(
2925 RtlDeactivateActivationContext(
2933 RtlFreeThreadActivationContextStack(void);
2938 RtlDeactivateActivationContextUnsafeFast(
2939 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
2945 RtlDosApplyFileIsolationRedirection_Ustr(
2947 IN PUNICODE_STRING OriginalName
,
2948 IN PUNICODE_STRING Extension
,
2949 IN OUT PUNICODE_STRING RedirectedName
,
2950 IN OUT PUNICODE_STRING RedirectedName2
,
2951 IN OUT PUNICODE_STRING
*OriginalName2
,
2960 RtlFindActivationContextSectionString(
2962 IN
const GUID
*ExtensionGuid
,
2963 IN ULONG SectionType
,
2964 IN PUNICODE_STRING SectionName
,
2965 IN OUT PVOID ReturnedData
2971 RtlQueryInformationActivationContext(
2974 PVOID pvSubInstance
,
2977 SIZE_T cbBuffer OPTIONAL
,
2978 SIZE_T
*pcbWrittenOrRequired OPTIONAL
2984 RtlZombifyActivationContext(
2992 // Registry Functions
2997 RtlCheckRegistryKey(
3005 RtlCreateRegistryKey(
3006 IN ULONG RelativeTo
,
3013 RtlFormatCurrentUserKeyPath(
3014 IN OUT PUNICODE_STRING KeyPath
3021 OUT HANDLE KeyHandle
,
3022 IN ACCESS_MASK DesiredAccess
,
3023 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3031 IN ACCESS_MASK DesiredAccess
,
3032 OUT PHANDLE KeyHandle
3038 RtlQueryRegistryValues(
3039 IN ULONG RelativeTo
,
3041 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
3043 IN PVOID Environment
3049 RtlWriteRegistryValue(
3064 RtlGetDefaultCodePage(
3065 OUT PUSHORT AnsiCodePage
,
3066 OUT PUSHORT OemCodePage
3073 IN PUSHORT AnsiTableBase
,
3074 IN PUSHORT OemTableBase
,
3075 IN PUSHORT CaseTableBase
,
3076 OUT PNLSTABLEINFO NlsTable
3082 RtlInitCodePageTable(
3083 IN PUSHORT TableBase
,
3084 OUT PCPTABLEINFO CodePageTable
3090 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable
);
3092 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
3095 // Misc conversion functions
3100 RtlConvertLongToLargeInteger(
3104 LARGE_INTEGER Result
;
3106 Result
.QuadPart
= SignedInteger
;
3113 RtlEnlargedIntegerMultiply(
3118 LARGE_INTEGER Product
;
3120 Product
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3127 RtlEnlargedUnsignedDivide(
3128 IN ULARGE_INTEGER Dividend
,
3130 IN PULONG Remainder OPTIONAL
3135 Quotient
= (ULONG
)(Dividend
.QuadPart
/ Divisor
);
3137 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
3146 RtlEnlargedUnsignedMultiply(
3151 LARGE_INTEGER Product
;
3153 Product
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3176 IN USHORT PartialCrc
,
3182 // Network Functions
3187 RtlIpv4StringToAddressW(
3190 OUT PWCHAR Terminator
,
3191 OUT
struct in_addr
*Addr
3197 RtlIpv6StringToAddressA(
3199 OUT PCHAR
*Terminator
,
3200 OUT
struct in6_addr
*Addr
3206 RtlIpv6StringToAddressW(
3208 OUT PCHAR
*Terminator
,
3209 OUT
struct in6_addr
*Addr
3215 RtlIpv6StringToAddressExA(
3216 IN PCHAR AddressString
,
3217 IN
struct in6_addr
*Address
,
3225 RtlIpv6StringToAddressExW(
3226 IN PWCHAR AddressName
,
3227 IN
struct in6_addr
*Address
,
3239 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3244 RtlSecondsSince1970ToTime(
3245 IN ULONG SecondsSince1970
,
3246 OUT PLARGE_INTEGER Time
3252 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3257 RtlTimeFieldsToTime(
3258 PTIME_FIELDS TimeFields
,
3265 RtlTimeToSecondsSince1970(
3266 PLARGE_INTEGER Time
,
3267 OUT PULONG SecondsSince1970
3273 RtlTimeToTimeFields(
3274 PLARGE_INTEGER Time
,
3275 PTIME_FIELDS TimeFields
3281 RtlSystemTimeToLocalTime(
3282 IN PLARGE_INTEGER SystemTime
,
3283 OUT PLARGE_INTEGER LocalTime
3287 // Version Functions
3292 RtlVerifyVersionInfo(
3293 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3295 IN ULONGLONG ConditionMask
3301 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3306 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType
);
3309 // Secure Memory Functions
3311 #ifdef NTOS_MODE_USER
3315 RtlRegisterSecureMemoryCacheCallback(
3316 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback
);
3321 RtlFlushSecureMemoryCache(
3322 IN PVOID MemoryCache
,
3323 IN OPTIONAL SIZE_T MemoryLength