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; \
333 // RTL AVL Tree Functions
338 RtlInitializeGenericTableAvl(
339 OUT PRTL_AVL_TABLE Table
,
340 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
341 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
342 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
343 IN PVOID TableContext OPTIONAL
349 RtlInsertElementGenericTableAvl(
350 IN PRTL_AVL_TABLE Table
,
353 OUT PBOOLEAN NewElement OPTIONAL
359 RtlInsertElementGenericTableFullAvl(
360 IN PRTL_AVL_TABLE Table
,
363 OUT PBOOLEAN NewElement OPTIONAL
,
364 IN PVOID NodeOrParent
,
365 IN TABLE_SEARCH_RESULT SearchResult
371 RtlDeleteElementGenericTableAvl(
372 IN PRTL_AVL_TABLE Table
,
379 RtlLookupElementGenericTableAvl(
380 IN PRTL_AVL_TABLE Table
,
387 RtlLookupElementGenericTableFullAvl(
388 IN PRTL_AVL_TABLE Table
,
390 OUT PVOID
*NodeOrParent
,
391 OUT TABLE_SEARCH_RESULT
*SearchResult
397 RtlEnumerateGenericTableAvl(
398 IN PRTL_AVL_TABLE Table
,
405 RtlEnumerateGenericTableWithoutSplayingAvl(
406 IN PRTL_AVL_TABLE Table
,
407 IN OUT PVOID
*RestartKey
413 RtlLookupFirstMatchingElementGenericTableAvl(
414 IN PRTL_AVL_TABLE Table
,
416 OUT PVOID
*RestartKey
422 RtlEnumerateGenericTableLikeADirectory(
423 IN PRTL_AVL_TABLE Table
,
424 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL
,
425 IN PVOID MatchData OPTIONAL
,
427 IN OUT PVOID
*RestartKey
,
428 IN OUT PULONG DeleteCount
,
435 RtlGetElementGenericTableAvl(
436 IN PRTL_AVL_TABLE Table
,
443 RtlNumberGenericTableElementsAvl(
444 IN PRTL_AVL_TABLE Table
450 RtlIsGenericTableEmptyAvl(
451 IN PRTL_AVL_TABLE Table
457 // Error and Exception Functions
462 RtlAddVectoredExceptionHandler(
463 IN ULONG FirstHandler
,
464 IN PVECTORED_EXCEPTION_HANDLER VectoredHandler
471 IN PVOID FailedAssertion
,
480 RtlSetUnhandledExceptionFilter(
481 IN PVOID TopLevelExceptionFilter
488 OUT PCONTEXT ContextRecord
508 RtlEncodeSystemPointer(
515 RtlDecodeSystemPointer(
522 RtlDispatchException(
523 IN PEXCEPTION_RECORD ExceptionRecord
,
530 RtlNtStatusToDosError(
537 RtlNtStatusToDosErrorNoTeb(
544 RtlSetLastWin32ErrorAndNtStatusFromNtStatus(
552 IN PEXCEPTION_RECORD ExceptionRecord
566 RtlUnhandledExceptionFilter(
567 IN
struct _EXCEPTION_POINTERS
* ExceptionInfo
574 IN PVOID TargetFrame OPTIONAL
,
575 IN PVOID TargetIp OPTIONAL
,
576 IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL
,
595 RtlLogStackBackTrace(
606 IN HANDLE HeapHandle
,
616 IN PVOID BaseAddress OPTIONAL
,
617 IN SIZE_T SizeToReserve OPTIONAL
,
618 IN SIZE_T SizeToCommit OPTIONAL
,
619 IN PVOID Lock OPTIONAL
,
620 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
627 IN HANDLE HeapHandle
,
645 IN PVOID BaseAddress OPTIONAL
,
646 IN SIZE_T SizeToReserve OPTIONAL
,
647 IN SIZE_T SizeToCommit OPTIONAL
,
648 IN PVOID Lock OPTIONAL
,
649 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
673 IN HANDLE HeapHandle
,
697 IN PVOID BaseAddress
,
698 OUT PVOID
*UserValue
,
717 IN BOOLEAN ResetCounters
,
718 OUT PRTL_HEAP_TAG_INFO HeapTagInfo
744 OUT PRTL_HEAP_USAGE Usage
759 IN PVOID BaseAddress
,
768 IN PVOID BaseAddress
,
778 IN PVOID MemoryPointer
794 IN HANDLE HeapHandle
,
798 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
801 // Security Functions
806 RtlAbsoluteToSelfRelativeSD(
807 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
808 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
809 IN PULONG BufferLength
815 RtlAddAccessAllowedAce(
818 ACCESS_MASK AccessMask
,
825 RtlAddAccessAllowedAceEx(
827 IN ULONG dwAceRevision
,
829 IN ACCESS_MASK AccessMask
,
836 RtlAddAccessAllowedObjectAce(
838 IN ULONG dwAceRevision
,
840 IN ACCESS_MASK AccessMask
,
841 IN GUID
*ObjectTypeGuid OPTIONAL
,
842 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
849 RtlAddAccessDeniedAce(
852 ACCESS_MASK AccessMask
,
859 RtlAddAccessDeniedAceEx(
863 IN ACCESS_MASK AccessMask
,
870 RtlAddAccessDeniedObjectAce(
872 IN ULONG dwAceRevision
,
874 IN ACCESS_MASK AccessMask
,
875 IN GUID
*ObjectTypeGuid OPTIONAL
,
876 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
886 ULONG StartingAceIndex
,
894 RtlAddAuditAccessAce(
897 ACCESS_MASK AccessMask
,
910 OUT PVOID
*ReturnedState
916 RtlAddAuditAccessAceEx(
920 IN ACCESS_MASK AccessMask
,
929 RtlAddAuditAccessObjectAce(
933 IN ACCESS_MASK AccessMask
,
934 IN GUID
*ObjectTypeGuid OPTIONAL
,
935 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
948 IN ULONG MandatoryFlags
,
958 IN BOOLEAN ForThread
,
959 OUT PBOOLEAN OldValue
965 RtlAllocateAndInitializeSid(
966 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
967 IN UCHAR SubAuthorityCount
,
968 IN ULONG SubAuthority0
,
969 IN ULONG SubAuthority1
,
970 IN ULONG SubAuthority2
,
971 IN ULONG SubAuthority3
,
972 IN ULONG SubAuthority4
,
973 IN ULONG SubAuthority5
,
974 IN ULONG SubAuthority6
,
975 IN ULONG SubAuthority7
,
982 RtlAreAllAccessesGranted(
983 ACCESS_MASK GrantedAccess
,
984 ACCESS_MASK DesiredAccess
990 RtlAreAnyAccessesGranted(
991 ACCESS_MASK GrantedAccess
,
992 ACCESS_MASK DesiredAccess
1006 RtlCopyLuidAndAttributesArray(
1008 PLUID_AND_ATTRIBUTES Src
,
1009 PLUID_AND_ATTRIBUTES Dest
1015 RtlCopySidAndAttributesArray(
1017 PSID_AND_ATTRIBUTES Src
,
1019 PSID_AND_ATTRIBUTES Dest
,
1021 PVOID
* RemainingSidArea
,
1022 PULONG RemainingSidAreaSize
1028 RtlConvertSidToUnicodeString(
1029 OUT PUNICODE_STRING DestinationString
,
1031 IN BOOLEAN AllocateDestinationString
1039 IN PSID Destination
,
1055 RtlCreateSecurityDescriptor(
1056 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1063 RtlCreateSecurityDescriptorRelative(
1064 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor
,
1071 RtlCopySecurityDescriptor(
1072 IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor
,
1073 OUT PSECURITY_DESCRIPTOR pDestinationSecurityDescriptor
1127 RtlGetControlSecurityDescriptor(
1128 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1129 OUT PSECURITY_DESCRIPTOR_CONTROL Control
,
1136 RtlGetDaclSecurityDescriptor(
1137 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1138 OUT PBOOLEAN DaclPresent
,
1140 OUT PBOOLEAN DaclDefaulted
1146 RtlGetSaclSecurityDescriptor(
1147 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1148 OUT PBOOLEAN SaclPresent
,
1150 OUT PBOOLEAN SaclDefaulted
1156 RtlGetGroupSecurityDescriptor(
1157 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1159 OUT PBOOLEAN GroupDefaulted
1165 RtlGetOwnerSecurityDescriptor(
1166 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1168 OUT PBOOLEAN OwnerDefaulted
1174 RtlGetSecurityDescriptorRMControl(
1175 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1176 OUT PUCHAR RMControl
1180 PSID_IDENTIFIER_AUTHORITY
1182 RtlIdentifierAuthoritySid(PSID Sid
);
1187 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
1194 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1195 IN UCHAR SubAuthorityCount
1201 RtlLengthRequiredSid(IN ULONG SubAuthorityCount
);
1206 RtlLengthSid(IN PSID Sid
);
1211 RtlMakeSelfRelativeSD(
1212 IN PSECURITY_DESCRIPTOR AbsoluteSD
,
1213 OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1214 IN OUT PULONG BufferLength
);
1220 PACCESS_MASK AccessMask
,
1221 PGENERIC_MAPPING GenericMapping
1224 #ifdef NTOS_MODE_USER
1229 RtlQueryInformationAcl(
1232 ULONG InformationLength
,
1233 ACL_INFORMATION_CLASS InformationClass
1241 RtlReleasePrivilege(
1242 IN PVOID ReturnedState
1248 RtlSelfRelativeToAbsoluteSD(
1249 IN PSECURITY_DESCRIPTOR SelfRelativeSD
,
1250 OUT PSECURITY_DESCRIPTOR AbsoluteSD
,
1251 IN PULONG AbsoluteSDSize
,
1257 IN PULONG OwnerSize
,
1258 IN PSID PrimaryGroup
,
1259 IN PULONG PrimaryGroupSize
1265 RtlSelfRelativeToAbsoluteSD2(
1266 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1267 OUT PULONG BufferSize
1273 RtlSetAttributesSecurityDescriptor(
1274 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1275 IN SECURITY_DESCRIPTOR_CONTROL Control
,
1282 RtlSetControlSecurityDescriptor(
1283 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1284 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest
,
1285 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
1291 RtlSetDaclSecurityDescriptor (
1292 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1293 IN BOOLEAN DaclPresent
,
1295 IN BOOLEAN DaclDefaulted
1301 RtlSetGroupSecurityDescriptor(
1302 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1304 IN BOOLEAN GroupDefaulted
1307 #ifdef NTOS_MODE_USER
1312 RtlSetInformationAcl(
1315 ULONG InformationLength
,
1316 ACL_INFORMATION_CLASS InformationClass
1324 RtlSetOwnerSecurityDescriptor(
1325 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1327 IN BOOLEAN OwnerDefaulted
1333 RtlSetSaclSecurityDescriptor(
1334 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1335 IN BOOLEAN SaclPresent
,
1337 IN BOOLEAN SaclDefaulted
1343 RtlSetSecurityDescriptorRMControl(
1344 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1351 RtlSubAuthorityCountSid(
1360 IN ULONG SubAuthority
1366 RtlValidRelativeSecurityDescriptor(
1367 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
1368 IN ULONG SecurityDescriptorLength
,
1369 IN SECURITY_INFORMATION RequiredInformation
1375 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
1380 RtlValidSid(IN PSID Sid
);
1385 RtlValidAcl(PACL Acl
);
1390 RtlDeleteSecurityObject(
1391 IN PSECURITY_DESCRIPTOR
*ObjectDescriptor
1397 RtlNewSecurityObject(
1398 IN PSECURITY_DESCRIPTOR ParentDescriptor
,
1399 IN PSECURITY_DESCRIPTOR CreatorDescriptor
,
1400 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
1401 IN BOOLEAN IsDirectoryObject
,
1403 IN PGENERIC_MAPPING GenericMapping
1409 RtlQuerySecurityObject(
1410 IN PSECURITY_DESCRIPTOR ObjectDescriptor
,
1411 IN SECURITY_INFORMATION SecurityInformation
,
1412 OUT PSECURITY_DESCRIPTOR ResultantDescriptor
,
1413 IN ULONG DescriptorLength
,
1414 OUT PULONG ReturnLength
1420 RtlSetSecurityObject(
1421 IN SECURITY_INFORMATION SecurityInformation
,
1422 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
1423 OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
1424 IN PGENERIC_MAPPING GenericMapping
,
1429 // Single-Character Functions
1434 RtlLargeIntegerToChar(
1435 IN PLARGE_INTEGER Value
,
1444 RtlUpperChar(CHAR Source
);
1449 RtlUpcaseUnicodeChar(WCHAR Source
);
1454 RtlDowncaseUnicodeChar(IN WCHAR Source
);
1469 RtlIntegerToUnicode(
1471 IN ULONG Base OPTIONAL
,
1472 IN ULONG Length OPTIONAL
,
1473 IN OUT LPWSTR String
1479 RtlIntegerToUnicodeString(
1482 IN OUT PUNICODE_STRING String
1495 // Byte Swap Functions
1497 #ifdef NTOS_MODE_USER
1499 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
1500 ((defined(_M_AMD64) || \
1501 defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
1503 unsigned short __cdecl
_byteswap_ushort(unsigned short);
1504 unsigned long __cdecl
_byteswap_ulong (unsigned long);
1505 unsigned __int64 __cdecl
_byteswap_uint64(unsigned __int64
);
1506 #pragma intrinsic(_byteswap_ushort)
1507 #pragma intrinsic(_byteswap_ulong)
1508 #pragma intrinsic(_byteswap_uint64)
1509 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1510 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1511 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1513 #elif defined (__GNUC__)
1515 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1516 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1517 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1521 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1525 RtlUshortByteSwap(IN USHORT Source
);
1530 RtlUlongByteSwap(IN ULONG Source
);
1535 RtlUlonglongByteSwap(IN ULONGLONG Source
);
1539 #endif // NTOS_MODE_USER
1542 // Unicode->Ansi String Functions
1547 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString
);
1549 #ifdef NTOS_MODE_USER
1551 #define RtlUnicodeStringToAnsiSize(STRING) ( \
1552 NLS_MB_CODE_PAGE_TAG ? \
1553 RtlxUnicodeStringToAnsiSize(STRING) : \
1554 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1562 RtlUnicodeStringToAnsiString(
1563 PANSI_STRING DestinationString
,
1564 PCUNICODE_STRING SourceString
,
1565 BOOLEAN AllocateDestinationString
1569 // Unicode->OEM String Functions
1574 RtlUpcaseUnicodeStringToOemString(
1575 POEM_STRING DestinationString
,
1576 PCUNICODE_STRING SourceString
,
1577 BOOLEAN AllocateDestinationString
1583 RtlUpcaseUnicodeStringToCountedOemString(
1584 IN OUT POEM_STRING DestinationString
,
1585 IN PCUNICODE_STRING SourceString
,
1586 IN BOOLEAN AllocateDestinationString
1592 RtlUnicodeStringToOemString(
1593 POEM_STRING DestinationString
,
1594 PCUNICODE_STRING SourceString
,
1595 BOOLEAN AllocateDestinationString
1601 RtlUpcaseUnicodeToOemN(
1605 PCWCH UnicodeString
,
1612 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString
);
1614 #ifdef NTOS_MODE_USER
1616 #define RtlUnicodeStringToOemSize(STRING) ( \
1617 NLS_MB_OEM_CODE_PAGE_TAG ? \
1618 RtlxUnicodeStringToOemSize(STRING) : \
1619 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1622 #define RtlUnicodeStringToCountedOemSize(STRING) ( \
1623 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
1635 PCWCH UnicodeString
,
1640 // Unicode->MultiByte String Functions
1645 RtlUnicodeToMultiByteN(
1649 PWCHAR UnicodeString
,
1656 RtlUpcaseUnicodeToMultiByteN(
1660 PCWCH UnicodeString
,
1667 RtlUnicodeToMultiByteSize(
1669 PCWCH UnicodeString
,
1676 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString
);
1679 // OEM to Unicode Functions
1684 RtlOemStringToUnicodeString(
1685 PUNICODE_STRING DestinationString
,
1686 PCOEM_STRING SourceString
,
1687 BOOLEAN AllocateDestinationString
1694 PWSTR UnicodeString
,
1695 ULONG MaxBytesInUnicodeString
,
1696 PULONG BytesInUnicodeString
,
1698 ULONG BytesInOemString
1701 #ifdef NTOS_MODE_USER
1703 #define RtlOemStringToUnicodeSize(STRING) ( \
1704 NLS_MB_OEM_CODE_PAGE_TAG ? \
1705 RtlxOemStringToUnicodeSize(STRING) : \
1706 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1709 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1710 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1716 // Ansi->Unicode String Functions
1721 RtlxAnsiStringToUnicodeSize(
1722 PCANSI_STRING AnsiString
1728 RtlAnsiStringToUnicodeString(
1729 PUNICODE_STRING DestinationString
,
1730 PCANSI_STRING SourceString
,
1731 BOOLEAN AllocateDestinationString
1734 #ifdef NTOS_MODE_USER
1736 #define RtlAnsiStringToUnicodeSize(STRING) ( \
1737 NLS_MB_CODE_PAGE_TAG ? \
1738 RtlxAnsiStringToUnicodeSize(STRING) : \
1739 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1747 RtlCreateUnicodeStringFromAsciiz(
1748 OUT PUNICODE_STRING Destination
,
1753 // Unicode String Functions
1758 RtlAppendUnicodeToString(
1759 PUNICODE_STRING Destination
,
1766 RtlAppendUnicodeStringToString(
1767 PUNICODE_STRING Destination
,
1768 PCUNICODE_STRING Source
1774 RtlCompareUnicodeString(
1775 PCUNICODE_STRING String1
,
1776 PCUNICODE_STRING String2
,
1777 BOOLEAN CaseInsensitive
1783 RtlCopyUnicodeString(
1784 PUNICODE_STRING DestinationString
,
1785 PCUNICODE_STRING SourceString
1791 RtlCreateUnicodeString(
1792 PUNICODE_STRING DestinationString
,
1796 #ifdef NTOS_MODE_USER
1801 RtlDowncaseUnicodeString(
1802 IN OUT PUNICODE_STRING UniDest
,
1803 IN PCUNICODE_STRING UniSource
,
1804 IN BOOLEAN AllocateDestinationString
1810 RtlDuplicateUnicodeString(
1812 IN PCUNICODE_STRING SourceString
,
1813 OUT PUNICODE_STRING DestinationString
1823 IN PVOID Destination
,
1833 RtlEqualUnicodeString(
1834 PCUNICODE_STRING String1
,
1835 PCUNICODE_STRING String2
,
1836 BOOLEAN CaseInsensitive
1842 RtlFindCharInUnicodeString(
1844 IN PUNICODE_STRING SearchString
,
1845 IN PCUNICODE_STRING MatchString
,
1846 OUT PUSHORT Position
1852 RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString
);
1857 RtlHashUnicodeString(
1858 IN CONST UNICODE_STRING
*String
,
1859 IN BOOLEAN CaseInSensitive
,
1860 IN ULONG HashAlgorithm
,
1861 OUT PULONG HashValue
1867 RtlInitUnicodeString(
1868 IN OUT PUNICODE_STRING DestinationString
,
1869 IN PCWSTR SourceString
1875 RtlInitUnicodeStringEx(
1876 OUT PUNICODE_STRING DestinationString
,
1877 IN PCWSTR SourceString OPTIONAL
1893 PCANSI_STRING String1
,
1894 PCANSI_STRING String2
,
1895 BOOLEAN CaseInsensitive
1901 RtlPrefixUnicodeString(
1902 PCUNICODE_STRING String1
,
1903 PCUNICODE_STRING String2
,
1904 BOOLEAN CaseInsensitive
1910 RtlUpcaseUnicodeString(
1911 PUNICODE_STRING DestinationString
,
1912 PCUNICODE_STRING SourceString
,
1913 BOOLEAN AllocateDestinationString
1919 RtlUnicodeStringToInteger(
1920 PCUNICODE_STRING String
,
1928 RtlValidateUnicodeString(
1930 IN PCUNICODE_STRING String
1934 // Ansi String Functions
1939 RtlFreeAnsiString(IN PANSI_STRING AnsiString
);
1945 PANSI_STRING DestinationString
,
1952 RtlInitAnsiStringEx(
1953 PANSI_STRING DestinationString
,
1958 // OEM String Functions
1963 RtlFreeOemString(IN POEM_STRING OemString
);
1966 // MultiByte->Unicode String Functions
1971 RtlMultiByteToUnicodeN(
1972 PWCHAR UnicodeString
,
1982 RtlMultiByteToUnicodeSize(
1994 RtlAddAtomToAtomTable(
1995 IN PRTL_ATOM_TABLE AtomTable
,
2005 IN OUT PRTL_ATOM_TABLE
*AtomTable
2011 RtlDeleteAtomFromAtomTable(
2012 IN PRTL_ATOM_TABLE AtomTable
,
2019 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable
);
2024 RtlQueryAtomInAtomTable(
2025 IN PRTL_ATOM_TABLE AtomTable
,
2027 IN OUT PULONG RefCount OPTIONAL
,
2028 IN OUT PULONG PinCount OPTIONAL
,
2029 IN OUT PWSTR AtomName OPTIONAL
,
2030 IN OUT PULONG NameLength OPTIONAL
2036 RtlPinAtomInAtomTable(
2037 IN PRTL_ATOM_TABLE AtomTable
,
2044 RtlLookupAtomInAtomTable(
2045 IN PRTL_ATOM_TABLE AtomTable
,
2051 // Process Management Functions
2063 RtlAcquirePebLock(VOID
);
2068 RtlCreateProcessParameters (
2069 OUT PRTL_USER_PROCESS_PARAMETERS
*ProcessParameters
,
2070 IN PUNICODE_STRING ImagePathName OPTIONAL
,
2071 IN PUNICODE_STRING DllPath OPTIONAL
,
2072 IN PUNICODE_STRING CurrentDirectory OPTIONAL
,
2073 IN PUNICODE_STRING CommandLine OPTIONAL
,
2074 IN PWSTR Environment OPTIONAL
,
2075 IN PUNICODE_STRING WindowTitle OPTIONAL
,
2076 IN PUNICODE_STRING DesktopInfo OPTIONAL
,
2077 IN PUNICODE_STRING ShellInfo OPTIONAL
,
2078 IN PUNICODE_STRING RuntimeInfo OPTIONAL
2084 RtlCreateUserProcess(
2085 IN PUNICODE_STRING ImageFileName
,
2086 IN ULONG Attributes
,
2087 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
,
2088 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL
,
2089 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL
,
2090 IN HANDLE ParentProcess OPTIONAL
,
2091 IN BOOLEAN CurrentDirectory
,
2092 IN HANDLE DebugPort OPTIONAL
,
2093 IN HANDLE ExceptionPort OPTIONAL
,
2094 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
2100 RtlCreateUserThread(
2101 IN HANDLE ProcessHandle
,
2102 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
2103 IN BOOLEAN CreateSuspended
,
2104 IN ULONG StackZeroBits
,
2105 IN SIZE_T StackReserve
,
2106 IN SIZE_T StackCommit
,
2107 IN PTHREAD_START_ROUTINE StartAddress
,
2109 IN OUT PHANDLE ThreadHandle
,
2110 IN OUT PCLIENT_ID ClientId
2114 PRTL_USER_PROCESS_PARAMETERS
2116 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2121 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2126 RtlExitUserThread(NTSTATUS Status
);
2131 RtlInitializeContext(
2132 IN HANDLE ProcessHandle
,
2133 OUT PCONTEXT ThreadContext
,
2134 IN PVOID ThreadStartParam OPTIONAL
,
2135 IN PTHREAD_START_ROUTINE ThreadStartAddress
,
2136 IN PINITIAL_TEB InitialTeb
2142 RtlIsThreadWithinLoaderCallout(VOID
);
2145 PRTL_USER_PROCESS_PARAMETERS
2147 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2152 RtlReleasePebLock(VOID
);
2161 IN ULONG ArgumentCount
,
2162 IN PULONG Arguments
,
2163 IN BOOLEAN PassContext
,
2164 IN BOOLEAN AlreadySuspended
2170 RtlSetProcessIsCritical(
2171 IN BOOLEAN NewValue
,
2172 OUT PBOOLEAN OldValue OPTIONAL
,
2173 IN BOOLEAN NeedBreaks
2179 RtlGetCurrentProcessorNumber(
2183 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
2186 // Thread Pool Functions
2191 RtlDeregisterWaitEx(
2192 IN HANDLE hWaitHandle
,
2193 IN HANDLE hCompletionEvent
2200 IN HANDLE hWaitHandle
2207 IN WORKERCALLBACKFUNC Function
,
2208 IN PVOID Context OPTIONAL
,
2215 RtlSetIoCompletionCallback(
2216 IN HANDLE FileHandle
,
2217 IN PIO_APC_ROUTINE Callback
,
2225 IN PHANDLE phNewWaitObject
,
2227 IN WAITORTIMERCALLBACKFUNC Callback
,
2229 IN ULONG ulMilliseconds
,
2234 // Environment/Path Functions
2239 RtlCreateEnvironment(
2247 RtlComputePrivatizedDllName_U(
2248 IN PUNICODE_STRING DllName
,
2249 OUT PUNICODE_STRING RealName
,
2250 OUT PUNICODE_STRING LocalName
2256 RtlDestroyEnvironment(
2257 IN PWSTR Environment
2263 RtlDoesFileExists_U(
2270 RtlDoesFileExists_UstrEx(
2271 IN PCUNICODE_STRING FileName
,
2272 IN BOOLEAN SucceedIfBusy
2278 RtlDetermineDosPathNameType_U(
2285 RtlDetermineDosPathNameType_Ustr(
2286 IN PCUNICODE_STRING Path
2295 IN PCWSTR Extension
,
2296 IN ULONG BufferSize
,
2304 RtlDosPathNameToNtPathName_U(
2305 IN PCWSTR DosPathName
,
2306 OUT PUNICODE_STRING NtPathName
,
2307 OUT PCWSTR
*NtFileNamePart
,
2308 OUT CURDIR
*DirectoryInfo
2314 RtlExpandEnvironmentStrings_U(
2316 PUNICODE_STRING Source
,
2317 PUNICODE_STRING Destination
,
2324 RtlGetCurrentDirectory_U(
2325 ULONG MaximumLength
,
2332 RtlGetFullPathName_U(
2336 OUT PWSTR
*ShortName
2342 RtlGetFullPathName_Ustr(
2343 IN PUNICODE_STRING FileName
,
2346 OUT PWSTR
*ShortName
,
2347 OUT PBOOLEAN InvalidName
,
2348 OUT RTL_PATH_TYPE
*PathType
2354 RtlIsDosDeviceName_U(
2361 RtlIsDosDeviceName_Ustr(
2362 IN PUNICODE_STRING Name
2369 RtlIsNameLegalDOS8Dot3(
2370 IN PCUNICODE_STRING Name
,
2371 IN OUT POEM_STRING OemName OPTIONAL
,
2372 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2378 RtlQueryEnvironmentVariable_U(
2380 PUNICODE_STRING Name
,
2381 PUNICODE_STRING Value
2387 RtlSetCurrentDirectory_U(
2388 IN PUNICODE_STRING name
2394 RtlSetEnvironmentVariable(
2396 PUNICODE_STRING Name
,
2397 PUNICODE_STRING Value
2401 // Critical Section/Resource Functions
2406 RtlDeleteCriticalSection (
2407 IN PRTL_CRITICAL_SECTION CriticalSection
2413 RtlEnterCriticalSection(
2414 IN PRTL_CRITICAL_SECTION CriticalSection
2420 RtlInitializeCriticalSection(
2421 IN PRTL_CRITICAL_SECTION CriticalSection
2427 RtlInitializeCriticalSectionAndSpinCount(
2428 IN PRTL_CRITICAL_SECTION CriticalSection
,
2435 RtlLeaveCriticalSection(
2436 IN PRTL_CRITICAL_SECTION CriticalSection
2442 RtlTryEnterCriticalSection(
2443 IN PRTL_CRITICAL_SECTION CriticalSection
2449 RtlpUnWaitCriticalSection(
2450 IN PRTL_CRITICAL_SECTION CriticalSection
2456 RtlpWaitForCriticalSection(
2457 IN PRTL_CRITICAL_SECTION CriticalSection
2463 RtlAcquireResourceExclusive(
2464 IN PRTL_RESOURCE Resource
,
2471 RtlAcquireResourceShared(
2472 IN PRTL_RESOURCE Resource
,
2479 RtlConvertExclusiveToShared(
2480 IN PRTL_RESOURCE Resource
2486 RtlConvertSharedToExclusive(
2487 IN PRTL_RESOURCE Resource
2494 IN PRTL_RESOURCE Resource
2501 IN PRTL_RESOURCE Resource
2507 RtlInitializeResource(
2508 IN PRTL_RESOURCE Resource
2515 IN PRTL_RESOURCE Resource
2519 // Compression Functions
2525 IN USHORT CompressionFormatAndEngine
,
2526 IN PUCHAR UncompressedBuffer
,
2527 IN ULONG UncompressedBufferSize
,
2528 OUT PUCHAR CompressedBuffer
,
2529 IN ULONG CompressedBufferSize
,
2530 IN ULONG UncompressedChunkSize
,
2531 OUT PULONG FinalCompressedSize
,
2538 RtlDecompressBuffer(
2539 IN USHORT CompressionFormat
,
2540 OUT PUCHAR UncompressedBuffer
,
2541 IN ULONG UncompressedBufferSize
,
2542 IN PUCHAR CompressedBuffer
,
2543 IN ULONG CompressedBufferSize
,
2544 OUT PULONG FinalUncompressedSize
2550 RtlGetCompressionWorkSpaceSize(
2551 IN USHORT CompressionFormatAndEngine
,
2552 OUT PULONG CompressBufferWorkSpaceSize
,
2553 OUT PULONG CompressFragmentWorkSpaceSize
2557 // Debug Info Functions
2560 PRTL_DEBUG_INFORMATION
2562 RtlCreateQueryDebugBuffer(
2564 IN BOOLEAN EventPair
2570 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer
);
2575 RtlQueryProcessDebugInformation(
2577 IN ULONG DebugInfoClassMask
,
2578 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2588 IN PRTL_BITMAP BitMapHeader
,
2589 IN ULONG StartingIndex
,
2597 IN PRTL_BITMAP BitMapHeader
,
2598 IN ULONG StartingIndex
,
2606 IN PRTL_BITMAP BitMapHeader
,
2607 IN ULONG StartingIndex
,
2608 IN ULONG NumberToClear
2615 IN PRTL_BITMAP BitMapHeader
,
2616 IN ULONG NumberToFind
,
2623 RtlFindClearBitsAndSet(
2624 IN PRTL_BITMAP BitMapHeader
,
2625 IN ULONG NumberToFind
,
2632 RtlFindNextForwardRunClear(
2633 IN PRTL_BITMAP BitMapHeader
,
2635 IN PULONG StartingRunIndex
2641 RtlInitializeBitMap(
2642 IN PRTL_BITMAP BitMapHeader
,
2643 IN PULONG BitMapBuffer
,
2644 IN ULONG SizeOfBitMap
2651 IN PRTL_BITMAP BitMapHeader
2658 PRTL_BITMAP BitMapHeader
,
2666 IN PRTL_BITMAP BitMapHeader
,
2667 IN ULONG StartingIndex
,
2668 IN ULONG NumberToSet
2675 PRTL_BITMAP BitMapHeader
2682 PRTL_BITMAP BitMapHeader
,
2695 WAITORTIMERCALLBACKFUNC Callback
,
2705 RtlCreateTimerQueue(PHANDLE TimerQueue
);
2713 HANDLE CompletionEvent
2729 RtlDeleteTimerQueueEx(
2731 HANDLE CompletionEvent
2737 RtlDeleteTimerQueue(HANDLE TimerQueue
);
2744 InterlockedPushListSList(
2745 IN PSLIST_HEADER ListHead
,
2746 IN PSLIST_ENTRY List
,
2747 IN PSLIST_ENTRY ListEnd
,
2752 // Range List functions
2757 RtlInitializeRangeList(
2758 IN OUT PRTL_RANGE_LIST RangeList
2765 IN PRTL_RANGE_LIST RangeList
2772 IN OUT PRTL_RANGE_LIST RangeList
,
2775 IN UCHAR Attributes
,
2777 IN PVOID UserData OPTIONAL
,
2778 IN PVOID Owner OPTIONAL
2795 IN ULONG ComponentId
,
2807 IN ULONG MaximumResponseLength
2818 DbgLoadImageSymbols(
2821 IN ULONG_PTR ProcessId
2826 DbgUnLoadImageSymbols(
2829 IN ULONG_PTR ProcessId
2840 // Generic Table Functions
2842 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
2846 RtlInsertElementGenericTable(
2847 IN PRTL_GENERIC_TABLE Table
,
2849 IN ULONG BufferSize
,
2850 OUT PBOOLEAN NewElement OPTIONAL
2856 RtlInsertElementGenericTableFull(
2857 IN PRTL_GENERIC_TABLE Table
,
2859 IN ULONG BufferSize
,
2860 OUT PBOOLEAN NewElement OPTIONAL
,
2861 IN PVOID NodeOrParent
,
2862 IN TABLE_SEARCH_RESULT SearchResult
2868 RtlIsGenericTableEmpty(
2869 IN PRTL_GENERIC_TABLE Table
2875 RtlLookupElementGenericTableFull(
2876 IN PRTL_GENERIC_TABLE Table
,
2878 OUT PVOID
*NodeOrParent
,
2879 OUT TABLE_SEARCH_RESULT
*SearchResult
2884 // Handle Table Functions
2887 PRTL_HANDLE_TABLE_ENTRY
2890 IN PRTL_HANDLE_TABLE HandleTable
,
2897 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable
);
2903 IN PRTL_HANDLE_TABLE HandleTable
,
2904 IN PRTL_HANDLE_TABLE_ENTRY Handle
2910 RtlInitializeHandleTable(
2912 IN ULONG HandleSize
,
2913 IN PRTL_HANDLE_TABLE HandleTable
2920 IN PRTL_HANDLE_TABLE HandleTable
,
2921 IN PRTL_HANDLE_TABLE_ENTRY Handle
2927 RtlIsValidIndexHandle(
2928 IN PRTL_HANDLE_TABLE HandleTable
,
2930 OUT PRTL_HANDLE_TABLE_ENTRY
*Handle
2940 IN PVOID BaseAddress
,
2944 OUT PMESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
2950 RtlGetNtGlobalFlags(VOID
);
2955 RtlImageDirectoryEntryToData(
2957 BOOLEAN MappedAsImage
,
2966 PIMAGE_NT_HEADERS NtHeader
,
2969 PIMAGE_SECTION_HEADER
*SectionHeader
2975 RtlImageNtHeader(IN PVOID BaseAddress
);
2982 IN PVOID BaseAddress
,
2984 IN PIMAGE_NT_HEADERS
*NtHeader
2988 PIMAGE_SECTION_HEADER
2990 RtlImageRvaToSection(
2991 PIMAGE_NT_HEADERS NtHeader
,
2999 LdrRelocateImageWithBias(
3000 IN PVOID NewAddress
,
3001 IN LONGLONG AdditionalBias
,
3009 // Activation Context Functions
3011 #ifdef NTOS_MODE_USER
3016 RtlActivateActivationContext(
3019 OUT PULONG_PTR Cookie
3025 RtlAddRefActivationContext(
3033 RtlActivateActivationContextUnsafeFast(
3034 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
,
3041 RtlAllocateActivationContextStack(
3048 RtlCreateActivationContext(
3050 IN OUT PVOID ReturnedData
3056 RtlGetActiveActivationContext(
3063 RtlReleaseActivationContext(
3070 RtlDeactivateActivationContext(
3078 RtlFreeThreadActivationContextStack(void);
3083 RtlDeactivateActivationContextUnsafeFast(
3084 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
3090 RtlDosApplyFileIsolationRedirection_Ustr(
3092 IN PUNICODE_STRING OriginalName
,
3093 IN PUNICODE_STRING Extension
,
3094 IN OUT PUNICODE_STRING RedirectedName
,
3095 IN OUT PUNICODE_STRING RedirectedName2
,
3096 IN OUT PUNICODE_STRING
*OriginalName2
,
3105 RtlFindActivationContextSectionString(
3107 IN
const GUID
*ExtensionGuid
,
3108 IN ULONG SectionType
,
3109 IN PUNICODE_STRING SectionName
,
3110 IN OUT PVOID ReturnedData
3116 RtlQueryInformationActivationContext(
3119 PVOID pvSubInstance
,
3122 SIZE_T cbBuffer OPTIONAL
,
3123 SIZE_T
*pcbWrittenOrRequired OPTIONAL
3129 RtlZombifyActivationContext(
3137 // Registry Functions
3142 RtlCheckRegistryKey(
3150 RtlCreateRegistryKey(
3151 IN ULONG RelativeTo
,
3158 RtlFormatCurrentUserKeyPath(
3159 IN OUT PUNICODE_STRING KeyPath
3166 OUT HANDLE KeyHandle
,
3167 IN ACCESS_MASK DesiredAccess
,
3168 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3176 IN ACCESS_MASK DesiredAccess
,
3177 OUT PHANDLE KeyHandle
3183 RtlQueryRegistryValues(
3184 IN ULONG RelativeTo
,
3186 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
3188 IN PVOID Environment
3194 RtlWriteRegistryValue(
3209 RtlGetDefaultCodePage(
3210 OUT PUSHORT AnsiCodePage
,
3211 OUT PUSHORT OemCodePage
3218 IN PUSHORT AnsiTableBase
,
3219 IN PUSHORT OemTableBase
,
3220 IN PUSHORT CaseTableBase
,
3221 OUT PNLSTABLEINFO NlsTable
3227 RtlInitCodePageTable(
3228 IN PUSHORT TableBase
,
3229 OUT PCPTABLEINFO CodePageTable
3235 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable
);
3237 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
3240 // Misc conversion functions
3245 RtlConvertLongToLargeInteger(
3249 LARGE_INTEGER Result
;
3251 Result
.QuadPart
= SignedInteger
;
3258 RtlEnlargedIntegerMultiply(
3263 LARGE_INTEGER Product
;
3265 Product
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3272 RtlEnlargedUnsignedDivide(
3273 IN ULARGE_INTEGER Dividend
,
3275 IN PULONG Remainder OPTIONAL
3280 Quotient
= (ULONG
)(Dividend
.QuadPart
/ Divisor
);
3282 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
3291 RtlEnlargedUnsignedMultiply(
3296 LARGE_INTEGER Product
;
3298 Product
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3321 IN USHORT PartialCrc
,
3327 // Network Functions
3332 RtlIpv4StringToAddressW(
3335 OUT LPWSTR
*Terminator
,
3336 OUT
struct in_addr
*Addr
3342 RtlIpv6StringToAddressA(
3344 OUT PCHAR
*Terminator
,
3345 OUT
struct in6_addr
*Addr
3351 RtlIpv6StringToAddressW(
3353 OUT PCHAR
*Terminator
,
3354 OUT
struct in6_addr
*Addr
3360 RtlIpv6StringToAddressExA(
3361 IN PCHAR AddressString
,
3362 IN
struct in6_addr
*Address
,
3370 RtlIpv6StringToAddressExW(
3371 IN PWCHAR AddressName
,
3372 IN
struct in6_addr
*Address
,
3384 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3389 RtlSecondsSince1970ToTime(
3390 IN ULONG SecondsSince1970
,
3391 OUT PLARGE_INTEGER Time
3397 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3402 RtlTimeFieldsToTime(
3403 PTIME_FIELDS TimeFields
,
3410 RtlTimeToSecondsSince1970(
3411 PLARGE_INTEGER Time
,
3412 OUT PULONG SecondsSince1970
3418 RtlTimeToTimeFields(
3419 PLARGE_INTEGER Time
,
3420 PTIME_FIELDS TimeFields
3426 RtlSystemTimeToLocalTime(
3427 IN PLARGE_INTEGER SystemTime
,
3428 OUT PLARGE_INTEGER LocalTime
3432 // Version Functions
3437 RtlVerifyVersionInfo(
3438 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3440 IN ULONGLONG ConditionMask
3446 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3451 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType
);
3454 // Secure Memory Functions
3456 #ifdef NTOS_MODE_USER
3460 RtlRegisterSecureMemoryCacheCallback(
3461 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback
);
3466 RtlFlushSecureMemoryCache(
3467 IN PVOID MemoryCache
,
3468 IN OPTIONAL SIZE_T MemoryLength
3473 // Boot Status Data Functions
3475 #ifdef NTOS_MODE_USER
3479 RtlCreateBootStatusDataFile(
3486 RtlGetSetBootStatusData(
3498 RtlLockBootStatusData(
3505 RtlUnlockBootStatusData(