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
,
713 RtlQueryHeapInformation (
715 IN HEAP_INFORMATION_CLASS HeapInformationClass
,
716 OUT PVOID HeapInformation OPTIONAL
,
717 IN SIZE_T HeapInformationLength OPTIONAL
,
718 OUT PSIZE_T ReturnLength OPTIONAL
728 IN BOOLEAN ResetCounters
,
729 OUT PRTL_HEAP_TAG_INFO HeapTagInfo
745 RtlSetHeapInformation (
747 IN HEAP_INFORMATION_CLASS HeapInformationClass
,
748 IN PVOID HeapInformation OPTIONAL
,
749 IN SIZE_T HeapInformationLength OPTIONAL
762 RtlMultipleAllocateHeap (
773 RtlMultipleFreeHeap (
786 OUT PRTL_HEAP_USAGE Usage
801 IN PVOID BaseAddress
,
810 IN PVOID BaseAddress
,
811 IN ULONG UserFlagsReset
,
812 IN ULONG UserFlagsSet
821 IN PVOID MemoryPointer
837 IN HANDLE HeapHandle
,
841 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
844 // Security Functions
849 RtlAbsoluteToSelfRelativeSD(
850 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
851 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
852 IN PULONG BufferLength
858 RtlAddAccessAllowedAce(
861 ACCESS_MASK AccessMask
,
868 RtlAddAccessAllowedAceEx(
870 IN ULONG dwAceRevision
,
872 IN ACCESS_MASK AccessMask
,
879 RtlAddAccessAllowedObjectAce(
881 IN ULONG dwAceRevision
,
883 IN ACCESS_MASK AccessMask
,
884 IN GUID
*ObjectTypeGuid OPTIONAL
,
885 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
892 RtlAddAccessDeniedAce(
895 ACCESS_MASK AccessMask
,
902 RtlAddAccessDeniedAceEx(
906 IN ACCESS_MASK AccessMask
,
913 RtlAddAccessDeniedObjectAce(
915 IN ULONG dwAceRevision
,
917 IN ACCESS_MASK AccessMask
,
918 IN GUID
*ObjectTypeGuid OPTIONAL
,
919 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
929 ULONG StartingAceIndex
,
937 RtlAddAuditAccessAce(
940 ACCESS_MASK AccessMask
,
953 OUT PVOID
*ReturnedState
959 RtlAddAuditAccessAceEx(
963 IN ACCESS_MASK AccessMask
,
972 RtlAddAuditAccessObjectAce(
976 IN ACCESS_MASK AccessMask
,
977 IN GUID
*ObjectTypeGuid OPTIONAL
,
978 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
991 IN ULONG MandatoryFlags
,
1000 IN BOOLEAN NewValue
,
1001 IN BOOLEAN ForThread
,
1002 OUT PBOOLEAN OldValue
1008 RtlAllocateAndInitializeSid(
1009 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1010 IN UCHAR SubAuthorityCount
,
1011 IN ULONG SubAuthority0
,
1012 IN ULONG SubAuthority1
,
1013 IN ULONG SubAuthority2
,
1014 IN ULONG SubAuthority3
,
1015 IN ULONG SubAuthority4
,
1016 IN ULONG SubAuthority5
,
1017 IN ULONG SubAuthority6
,
1018 IN ULONG SubAuthority7
,
1025 RtlAreAllAccessesGranted(
1026 ACCESS_MASK GrantedAccess
,
1027 ACCESS_MASK DesiredAccess
1033 RtlAreAnyAccessesGranted(
1034 ACCESS_MASK GrantedAccess
,
1035 ACCESS_MASK DesiredAccess
1049 RtlCopyLuidAndAttributesArray(
1051 PLUID_AND_ATTRIBUTES Src
,
1052 PLUID_AND_ATTRIBUTES Dest
1058 RtlCopySidAndAttributesArray(
1060 PSID_AND_ATTRIBUTES Src
,
1062 PSID_AND_ATTRIBUTES Dest
,
1064 PVOID
* RemainingSidArea
,
1065 PULONG RemainingSidAreaSize
1071 RtlConvertSidToUnicodeString(
1072 OUT PUNICODE_STRING DestinationString
,
1074 IN BOOLEAN AllocateDestinationString
1082 IN PSID Destination
,
1098 RtlCreateSecurityDescriptor(
1099 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1106 RtlCreateSecurityDescriptorRelative(
1107 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor
,
1114 RtlCopySecurityDescriptor(
1115 IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor
,
1116 OUT PSECURITY_DESCRIPTOR pDestinationSecurityDescriptor
1170 RtlGetControlSecurityDescriptor(
1171 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1172 OUT PSECURITY_DESCRIPTOR_CONTROL Control
,
1179 RtlGetDaclSecurityDescriptor(
1180 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1181 OUT PBOOLEAN DaclPresent
,
1183 OUT PBOOLEAN DaclDefaulted
1189 RtlGetSaclSecurityDescriptor(
1190 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1191 OUT PBOOLEAN SaclPresent
,
1193 OUT PBOOLEAN SaclDefaulted
1199 RtlGetGroupSecurityDescriptor(
1200 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1202 OUT PBOOLEAN GroupDefaulted
1208 RtlGetOwnerSecurityDescriptor(
1209 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1211 OUT PBOOLEAN OwnerDefaulted
1217 RtlGetSecurityDescriptorRMControl(
1218 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1219 OUT PUCHAR RMControl
1223 PSID_IDENTIFIER_AUTHORITY
1225 RtlIdentifierAuthoritySid(PSID Sid
);
1230 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
1237 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1238 IN UCHAR SubAuthorityCount
1244 RtlLengthRequiredSid(IN ULONG SubAuthorityCount
);
1249 RtlLengthSid(IN PSID Sid
);
1254 RtlMakeSelfRelativeSD(
1255 IN PSECURITY_DESCRIPTOR AbsoluteSD
,
1256 OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1257 IN OUT PULONG BufferLength
);
1263 PACCESS_MASK AccessMask
,
1264 PGENERIC_MAPPING GenericMapping
1267 #ifdef NTOS_MODE_USER
1272 RtlQueryInformationAcl(
1275 ULONG InformationLength
,
1276 ACL_INFORMATION_CLASS InformationClass
1284 RtlReleasePrivilege(
1285 IN PVOID ReturnedState
1291 RtlSelfRelativeToAbsoluteSD(
1292 IN PSECURITY_DESCRIPTOR SelfRelativeSD
,
1293 OUT PSECURITY_DESCRIPTOR AbsoluteSD
,
1294 IN PULONG AbsoluteSDSize
,
1300 IN PULONG OwnerSize
,
1301 IN PSID PrimaryGroup
,
1302 IN PULONG PrimaryGroupSize
1308 RtlSelfRelativeToAbsoluteSD2(
1309 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1310 OUT PULONG BufferSize
1316 RtlSetAttributesSecurityDescriptor(
1317 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1318 IN SECURITY_DESCRIPTOR_CONTROL Control
,
1325 RtlSetControlSecurityDescriptor(
1326 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1327 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest
,
1328 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
1334 RtlSetDaclSecurityDescriptor (
1335 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1336 IN BOOLEAN DaclPresent
,
1338 IN BOOLEAN DaclDefaulted
1344 RtlSetGroupSecurityDescriptor(
1345 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1347 IN BOOLEAN GroupDefaulted
1350 #ifdef NTOS_MODE_USER
1355 RtlSetInformationAcl(
1358 ULONG InformationLength
,
1359 ACL_INFORMATION_CLASS InformationClass
1367 RtlSetOwnerSecurityDescriptor(
1368 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1370 IN BOOLEAN OwnerDefaulted
1376 RtlSetSaclSecurityDescriptor(
1377 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1378 IN BOOLEAN SaclPresent
,
1380 IN BOOLEAN SaclDefaulted
1386 RtlSetSecurityDescriptorRMControl(
1387 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1394 RtlSubAuthorityCountSid(
1403 IN ULONG SubAuthority
1409 RtlValidRelativeSecurityDescriptor(
1410 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
1411 IN ULONG SecurityDescriptorLength
,
1412 IN SECURITY_INFORMATION RequiredInformation
1418 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
1423 RtlValidSid(IN PSID Sid
);
1428 RtlValidAcl(PACL Acl
);
1433 RtlDeleteSecurityObject(
1434 IN PSECURITY_DESCRIPTOR
*ObjectDescriptor
1440 RtlNewSecurityObject(
1441 IN PSECURITY_DESCRIPTOR ParentDescriptor
,
1442 IN PSECURITY_DESCRIPTOR CreatorDescriptor
,
1443 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
1444 IN BOOLEAN IsDirectoryObject
,
1446 IN PGENERIC_MAPPING GenericMapping
1452 RtlQuerySecurityObject(
1453 IN PSECURITY_DESCRIPTOR ObjectDescriptor
,
1454 IN SECURITY_INFORMATION SecurityInformation
,
1455 OUT PSECURITY_DESCRIPTOR ResultantDescriptor
,
1456 IN ULONG DescriptorLength
,
1457 OUT PULONG ReturnLength
1463 RtlSetSecurityObject(
1464 IN SECURITY_INFORMATION SecurityInformation
,
1465 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
1466 OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
1467 IN PGENERIC_MAPPING GenericMapping
,
1472 // Single-Character Functions
1477 RtlLargeIntegerToChar(
1478 IN PLARGE_INTEGER Value
,
1487 RtlUpperChar(CHAR Source
);
1492 RtlUpcaseUnicodeChar(WCHAR Source
);
1497 RtlDowncaseUnicodeChar(IN WCHAR Source
);
1512 RtlIntegerToUnicode(
1514 IN ULONG Base OPTIONAL
,
1515 IN ULONG Length OPTIONAL
,
1516 IN OUT LPWSTR String
1522 RtlIntegerToUnicodeString(
1525 IN OUT PUNICODE_STRING String
1538 // Byte Swap Functions
1540 #ifdef NTOS_MODE_USER
1542 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
1543 ((defined(_M_AMD64) || \
1544 defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
1546 unsigned short __cdecl
_byteswap_ushort(unsigned short);
1547 unsigned long __cdecl
_byteswap_ulong (unsigned long);
1548 unsigned __int64 __cdecl
_byteswap_uint64(unsigned __int64
);
1549 #pragma intrinsic(_byteswap_ushort)
1550 #pragma intrinsic(_byteswap_ulong)
1551 #pragma intrinsic(_byteswap_uint64)
1552 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1553 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1554 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1556 #elif defined (__GNUC__)
1558 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1559 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1560 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1564 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1568 RtlUshortByteSwap(IN USHORT Source
);
1573 RtlUlongByteSwap(IN ULONG Source
);
1578 RtlUlonglongByteSwap(IN ULONGLONG Source
);
1582 #endif // NTOS_MODE_USER
1585 // Unicode->Ansi String Functions
1590 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString
);
1592 #ifdef NTOS_MODE_USER
1594 #define RtlUnicodeStringToAnsiSize(STRING) ( \
1595 NLS_MB_CODE_PAGE_TAG ? \
1596 RtlxUnicodeStringToAnsiSize(STRING) : \
1597 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1605 RtlUnicodeStringToAnsiString(
1606 PANSI_STRING DestinationString
,
1607 PCUNICODE_STRING SourceString
,
1608 BOOLEAN AllocateDestinationString
1612 // Unicode->OEM String Functions
1617 RtlUpcaseUnicodeStringToOemString(
1618 POEM_STRING DestinationString
,
1619 PCUNICODE_STRING SourceString
,
1620 BOOLEAN AllocateDestinationString
1626 RtlUpcaseUnicodeStringToCountedOemString(
1627 IN OUT POEM_STRING DestinationString
,
1628 IN PCUNICODE_STRING SourceString
,
1629 IN BOOLEAN AllocateDestinationString
1635 RtlUnicodeStringToOemString(
1636 POEM_STRING DestinationString
,
1637 PCUNICODE_STRING SourceString
,
1638 BOOLEAN AllocateDestinationString
1644 RtlUpcaseUnicodeToOemN(
1648 PCWCH UnicodeString
,
1655 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString
);
1657 #ifdef NTOS_MODE_USER
1659 #define RtlUnicodeStringToOemSize(STRING) ( \
1660 NLS_MB_OEM_CODE_PAGE_TAG ? \
1661 RtlxUnicodeStringToOemSize(STRING) : \
1662 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1665 #define RtlUnicodeStringToCountedOemSize(STRING) ( \
1666 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
1678 PCWCH UnicodeString
,
1683 // Unicode->MultiByte String Functions
1688 RtlUnicodeToMultiByteN(
1692 PWCHAR UnicodeString
,
1699 RtlUpcaseUnicodeToMultiByteN(
1703 PCWCH UnicodeString
,
1710 RtlUnicodeToMultiByteSize(
1712 PCWCH UnicodeString
,
1719 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString
);
1722 // OEM to Unicode Functions
1727 RtlOemStringToUnicodeString(
1728 PUNICODE_STRING DestinationString
,
1729 PCOEM_STRING SourceString
,
1730 BOOLEAN AllocateDestinationString
1737 PWSTR UnicodeString
,
1738 ULONG MaxBytesInUnicodeString
,
1739 PULONG BytesInUnicodeString
,
1741 ULONG BytesInOemString
1744 #ifdef NTOS_MODE_USER
1746 #define RtlOemStringToUnicodeSize(STRING) ( \
1747 NLS_MB_OEM_CODE_PAGE_TAG ? \
1748 RtlxOemStringToUnicodeSize(STRING) : \
1749 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1752 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1753 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1759 // Ansi->Unicode String Functions
1764 RtlxAnsiStringToUnicodeSize(
1765 PCANSI_STRING AnsiString
1771 RtlAnsiStringToUnicodeString(
1772 PUNICODE_STRING DestinationString
,
1773 PCANSI_STRING SourceString
,
1774 BOOLEAN AllocateDestinationString
1777 #ifdef NTOS_MODE_USER
1779 #define RtlAnsiStringToUnicodeSize(STRING) ( \
1780 NLS_MB_CODE_PAGE_TAG ? \
1781 RtlxAnsiStringToUnicodeSize(STRING) : \
1782 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1790 RtlCreateUnicodeStringFromAsciiz(
1791 OUT PUNICODE_STRING Destination
,
1796 // Unicode String Functions
1801 RtlAppendUnicodeToString(
1802 PUNICODE_STRING Destination
,
1809 RtlAppendUnicodeStringToString(
1810 PUNICODE_STRING Destination
,
1811 PCUNICODE_STRING Source
1817 RtlCompareUnicodeString(
1818 PCUNICODE_STRING String1
,
1819 PCUNICODE_STRING String2
,
1820 BOOLEAN CaseInsensitive
1826 RtlCopyUnicodeString(
1827 PUNICODE_STRING DestinationString
,
1828 PCUNICODE_STRING SourceString
1834 RtlCreateUnicodeString(
1835 PUNICODE_STRING DestinationString
,
1839 #ifdef NTOS_MODE_USER
1844 RtlDowncaseUnicodeString(
1845 IN OUT PUNICODE_STRING UniDest
,
1846 IN PCUNICODE_STRING UniSource
,
1847 IN BOOLEAN AllocateDestinationString
1853 RtlDuplicateUnicodeString(
1855 IN PCUNICODE_STRING SourceString
,
1856 OUT PUNICODE_STRING DestinationString
1866 IN PVOID Destination
,
1876 RtlEqualUnicodeString(
1877 PCUNICODE_STRING String1
,
1878 PCUNICODE_STRING String2
,
1879 BOOLEAN CaseInsensitive
1885 RtlFindCharInUnicodeString(
1887 IN PUNICODE_STRING SearchString
,
1888 IN PCUNICODE_STRING MatchString
,
1889 OUT PUSHORT Position
1895 RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString
);
1900 RtlHashUnicodeString(
1901 IN CONST UNICODE_STRING
*String
,
1902 IN BOOLEAN CaseInSensitive
,
1903 IN ULONG HashAlgorithm
,
1904 OUT PULONG HashValue
1910 RtlInitUnicodeString(
1911 IN OUT PUNICODE_STRING DestinationString
,
1912 IN PCWSTR SourceString
1918 RtlInitUnicodeStringEx(
1919 OUT PUNICODE_STRING DestinationString
,
1920 IN PCWSTR SourceString OPTIONAL
1936 PCANSI_STRING String1
,
1937 PCANSI_STRING String2
,
1938 BOOLEAN CaseInsensitive
1944 RtlPrefixUnicodeString(
1945 PCUNICODE_STRING String1
,
1946 PCUNICODE_STRING String2
,
1947 BOOLEAN CaseInsensitive
1953 RtlUpcaseUnicodeString(
1954 PUNICODE_STRING DestinationString
,
1955 PCUNICODE_STRING SourceString
,
1956 BOOLEAN AllocateDestinationString
1962 RtlUnicodeStringToInteger(
1963 PCUNICODE_STRING String
,
1971 RtlValidateUnicodeString(
1973 IN PCUNICODE_STRING String
1977 // Ansi String Functions
1982 RtlFreeAnsiString(IN PANSI_STRING AnsiString
);
1988 PANSI_STRING DestinationString
,
1995 RtlInitAnsiStringEx(
1996 PANSI_STRING DestinationString
,
2001 // OEM String Functions
2006 RtlFreeOemString(IN POEM_STRING OemString
);
2009 // MultiByte->Unicode String Functions
2014 RtlMultiByteToUnicodeN(
2015 PWCHAR UnicodeString
,
2025 RtlMultiByteToUnicodeSize(
2037 RtlAddAtomToAtomTable(
2038 IN PRTL_ATOM_TABLE AtomTable
,
2048 IN OUT PRTL_ATOM_TABLE
*AtomTable
2054 RtlDeleteAtomFromAtomTable(
2055 IN PRTL_ATOM_TABLE AtomTable
,
2062 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable
);
2067 RtlQueryAtomInAtomTable(
2068 IN PRTL_ATOM_TABLE AtomTable
,
2070 IN OUT PULONG RefCount OPTIONAL
,
2071 IN OUT PULONG PinCount OPTIONAL
,
2072 IN OUT PWSTR AtomName OPTIONAL
,
2073 IN OUT PULONG NameLength OPTIONAL
2079 RtlPinAtomInAtomTable(
2080 IN PRTL_ATOM_TABLE AtomTable
,
2087 RtlLookupAtomInAtomTable(
2088 IN PRTL_ATOM_TABLE AtomTable
,
2094 // Process Management Functions
2106 RtlAcquirePebLock(VOID
);
2111 RtlCreateProcessParameters (
2112 OUT PRTL_USER_PROCESS_PARAMETERS
*ProcessParameters
,
2113 IN PUNICODE_STRING ImagePathName OPTIONAL
,
2114 IN PUNICODE_STRING DllPath OPTIONAL
,
2115 IN PUNICODE_STRING CurrentDirectory OPTIONAL
,
2116 IN PUNICODE_STRING CommandLine OPTIONAL
,
2117 IN PWSTR Environment OPTIONAL
,
2118 IN PUNICODE_STRING WindowTitle OPTIONAL
,
2119 IN PUNICODE_STRING DesktopInfo OPTIONAL
,
2120 IN PUNICODE_STRING ShellInfo OPTIONAL
,
2121 IN PUNICODE_STRING RuntimeInfo OPTIONAL
2127 RtlCreateUserProcess(
2128 IN PUNICODE_STRING ImageFileName
,
2129 IN ULONG Attributes
,
2130 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
,
2131 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL
,
2132 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL
,
2133 IN HANDLE ParentProcess OPTIONAL
,
2134 IN BOOLEAN CurrentDirectory
,
2135 IN HANDLE DebugPort OPTIONAL
,
2136 IN HANDLE ExceptionPort OPTIONAL
,
2137 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
2143 RtlCreateUserThread(
2144 IN HANDLE ProcessHandle
,
2145 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
2146 IN BOOLEAN CreateSuspended
,
2147 IN ULONG StackZeroBits
,
2148 IN SIZE_T StackReserve
,
2149 IN SIZE_T StackCommit
,
2150 IN PTHREAD_START_ROUTINE StartAddress
,
2152 IN OUT PHANDLE ThreadHandle
,
2153 IN OUT PCLIENT_ID ClientId
2157 PRTL_USER_PROCESS_PARAMETERS
2159 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2164 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2169 RtlExitUserThread(NTSTATUS Status
);
2174 RtlInitializeContext(
2175 IN HANDLE ProcessHandle
,
2176 OUT PCONTEXT ThreadContext
,
2177 IN PVOID ThreadStartParam OPTIONAL
,
2178 IN PTHREAD_START_ROUTINE ThreadStartAddress
,
2179 IN PINITIAL_TEB InitialTeb
2185 RtlIsThreadWithinLoaderCallout(VOID
);
2188 PRTL_USER_PROCESS_PARAMETERS
2190 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2195 RtlReleasePebLock(VOID
);
2204 IN ULONG ArgumentCount
,
2205 IN PULONG Arguments
,
2206 IN BOOLEAN PassContext
,
2207 IN BOOLEAN AlreadySuspended
2213 RtlSetProcessIsCritical(
2214 IN BOOLEAN NewValue
,
2215 OUT PBOOLEAN OldValue OPTIONAL
,
2216 IN BOOLEAN NeedBreaks
2222 RtlGetCurrentProcessorNumber(
2226 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
2229 // Thread Pool Functions
2234 RtlDeregisterWaitEx(
2235 IN HANDLE hWaitHandle
,
2236 IN HANDLE hCompletionEvent
2243 IN HANDLE hWaitHandle
2250 IN WORKERCALLBACKFUNC Function
,
2251 IN PVOID Context OPTIONAL
,
2258 RtlSetIoCompletionCallback(
2259 IN HANDLE FileHandle
,
2260 IN PIO_APC_ROUTINE Callback
,
2268 IN PHANDLE phNewWaitObject
,
2270 IN WAITORTIMERCALLBACKFUNC Callback
,
2272 IN ULONG ulMilliseconds
,
2277 // Environment/Path Functions
2282 RtlCreateEnvironment(
2290 RtlComputePrivatizedDllName_U(
2291 IN PUNICODE_STRING DllName
,
2292 OUT PUNICODE_STRING RealName
,
2293 OUT PUNICODE_STRING LocalName
2299 RtlDestroyEnvironment(
2300 IN PWSTR Environment
2306 RtlDoesFileExists_U(
2313 RtlDoesFileExists_UstrEx(
2314 IN PCUNICODE_STRING FileName
,
2315 IN BOOLEAN SucceedIfBusy
2321 RtlDetermineDosPathNameType_U(
2328 RtlDetermineDosPathNameType_Ustr(
2329 IN PCUNICODE_STRING Path
2338 IN PCWSTR Extension
,
2339 IN ULONG BufferSize
,
2347 RtlDosPathNameToNtPathName_U(
2348 IN PCWSTR DosPathName
,
2349 OUT PUNICODE_STRING NtPathName
,
2350 OUT PCWSTR
*NtFileNamePart
,
2351 OUT CURDIR
*DirectoryInfo
2357 RtlExpandEnvironmentStrings_U(
2359 PUNICODE_STRING Source
,
2360 PUNICODE_STRING Destination
,
2367 RtlGetCurrentDirectory_U(
2368 ULONG MaximumLength
,
2375 RtlGetFullPathName_U(
2379 OUT PWSTR
*ShortName
2385 RtlGetFullPathName_Ustr(
2386 IN PUNICODE_STRING FileName
,
2389 OUT PWSTR
*ShortName
,
2390 OUT PBOOLEAN InvalidName
,
2391 OUT RTL_PATH_TYPE
*PathType
2397 RtlIsDosDeviceName_U(
2404 RtlIsDosDeviceName_Ustr(
2405 IN PUNICODE_STRING Name
2412 RtlIsNameLegalDOS8Dot3(
2413 IN PCUNICODE_STRING Name
,
2414 IN OUT POEM_STRING OemName OPTIONAL
,
2415 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2421 RtlQueryEnvironmentVariable_U(
2423 PUNICODE_STRING Name
,
2424 PUNICODE_STRING Value
2430 RtlSetCurrentDirectory_U(
2431 IN PUNICODE_STRING name
2437 RtlSetEnvironmentVariable(
2439 PUNICODE_STRING Name
,
2440 PUNICODE_STRING Value
2444 // Critical Section/Resource Functions
2449 RtlDeleteCriticalSection (
2450 IN PRTL_CRITICAL_SECTION CriticalSection
2456 RtlEnterCriticalSection(
2457 IN PRTL_CRITICAL_SECTION CriticalSection
2463 RtlInitializeCriticalSection(
2464 IN PRTL_CRITICAL_SECTION CriticalSection
2470 RtlInitializeCriticalSectionAndSpinCount(
2471 IN PRTL_CRITICAL_SECTION CriticalSection
,
2478 RtlLeaveCriticalSection(
2479 IN PRTL_CRITICAL_SECTION CriticalSection
2485 RtlTryEnterCriticalSection(
2486 IN PRTL_CRITICAL_SECTION CriticalSection
2492 RtlpUnWaitCriticalSection(
2493 IN PRTL_CRITICAL_SECTION CriticalSection
2499 RtlpWaitForCriticalSection(
2500 IN PRTL_CRITICAL_SECTION CriticalSection
2506 RtlAcquireResourceExclusive(
2507 IN PRTL_RESOURCE Resource
,
2514 RtlAcquireResourceShared(
2515 IN PRTL_RESOURCE Resource
,
2522 RtlConvertExclusiveToShared(
2523 IN PRTL_RESOURCE Resource
2529 RtlConvertSharedToExclusive(
2530 IN PRTL_RESOURCE Resource
2537 IN PRTL_RESOURCE Resource
2544 IN PRTL_RESOURCE Resource
2550 RtlInitializeResource(
2551 IN PRTL_RESOURCE Resource
2558 IN PRTL_RESOURCE Resource
2562 // Compression Functions
2568 IN USHORT CompressionFormatAndEngine
,
2569 IN PUCHAR UncompressedBuffer
,
2570 IN ULONG UncompressedBufferSize
,
2571 OUT PUCHAR CompressedBuffer
,
2572 IN ULONG CompressedBufferSize
,
2573 IN ULONG UncompressedChunkSize
,
2574 OUT PULONG FinalCompressedSize
,
2581 RtlDecompressBuffer(
2582 IN USHORT CompressionFormat
,
2583 OUT PUCHAR UncompressedBuffer
,
2584 IN ULONG UncompressedBufferSize
,
2585 IN PUCHAR CompressedBuffer
,
2586 IN ULONG CompressedBufferSize
,
2587 OUT PULONG FinalUncompressedSize
2593 RtlGetCompressionWorkSpaceSize(
2594 IN USHORT CompressionFormatAndEngine
,
2595 OUT PULONG CompressBufferWorkSpaceSize
,
2596 OUT PULONG CompressFragmentWorkSpaceSize
2600 // Debug Info Functions
2603 PRTL_DEBUG_INFORMATION
2605 RtlCreateQueryDebugBuffer(
2607 IN BOOLEAN EventPair
2613 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer
);
2618 RtlQueryProcessDebugInformation(
2620 IN ULONG DebugInfoClassMask
,
2621 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2631 IN PRTL_BITMAP BitMapHeader
,
2632 IN ULONG StartingIndex
,
2640 IN PRTL_BITMAP BitMapHeader
,
2641 IN ULONG StartingIndex
,
2649 IN PRTL_BITMAP BitMapHeader
,
2650 IN ULONG StartingIndex
,
2651 IN ULONG NumberToClear
2658 IN PRTL_BITMAP BitMapHeader
,
2659 IN ULONG NumberToFind
,
2666 RtlFindClearBitsAndSet(
2667 IN PRTL_BITMAP BitMapHeader
,
2668 IN ULONG NumberToFind
,
2675 RtlFindNextForwardRunClear(
2676 IN PRTL_BITMAP BitMapHeader
,
2678 IN PULONG StartingRunIndex
2684 RtlInitializeBitMap(
2685 IN PRTL_BITMAP BitMapHeader
,
2686 IN PULONG BitMapBuffer
,
2687 IN ULONG SizeOfBitMap
2694 IN PRTL_BITMAP BitMapHeader
2701 PRTL_BITMAP BitMapHeader
,
2709 IN PRTL_BITMAP BitMapHeader
,
2710 IN ULONG StartingIndex
,
2711 IN ULONG NumberToSet
2718 PRTL_BITMAP BitMapHeader
2725 PRTL_BITMAP BitMapHeader
,
2738 WAITORTIMERCALLBACKFUNC Callback
,
2748 RtlCreateTimerQueue(PHANDLE TimerQueue
);
2756 HANDLE CompletionEvent
2772 RtlDeleteTimerQueueEx(
2774 HANDLE CompletionEvent
2780 RtlDeleteTimerQueue(HANDLE TimerQueue
);
2787 InterlockedPushListSList(
2788 IN PSLIST_HEADER ListHead
,
2789 IN PSLIST_ENTRY List
,
2790 IN PSLIST_ENTRY ListEnd
,
2795 // Range List functions
2800 RtlInitializeRangeList(
2801 IN OUT PRTL_RANGE_LIST RangeList
2808 IN PRTL_RANGE_LIST RangeList
2815 IN OUT PRTL_RANGE_LIST RangeList
,
2818 IN UCHAR Attributes
,
2820 IN PVOID UserData OPTIONAL
,
2821 IN PVOID Owner OPTIONAL
2838 IN ULONG ComponentId
,
2850 IN ULONG MaximumResponseLength
2861 DbgLoadImageSymbols(
2864 IN ULONG_PTR ProcessId
2869 DbgUnLoadImageSymbols(
2872 IN ULONG_PTR ProcessId
2883 // Generic Table Functions
2885 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
2889 RtlInsertElementGenericTable(
2890 IN PRTL_GENERIC_TABLE Table
,
2892 IN ULONG BufferSize
,
2893 OUT PBOOLEAN NewElement OPTIONAL
2899 RtlInsertElementGenericTableFull(
2900 IN PRTL_GENERIC_TABLE Table
,
2902 IN ULONG BufferSize
,
2903 OUT PBOOLEAN NewElement OPTIONAL
,
2904 IN PVOID NodeOrParent
,
2905 IN TABLE_SEARCH_RESULT SearchResult
2911 RtlIsGenericTableEmpty(
2912 IN PRTL_GENERIC_TABLE Table
2918 RtlLookupElementGenericTableFull(
2919 IN PRTL_GENERIC_TABLE Table
,
2921 OUT PVOID
*NodeOrParent
,
2922 OUT TABLE_SEARCH_RESULT
*SearchResult
2927 // Handle Table Functions
2930 PRTL_HANDLE_TABLE_ENTRY
2933 IN PRTL_HANDLE_TABLE HandleTable
,
2940 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable
);
2946 IN PRTL_HANDLE_TABLE HandleTable
,
2947 IN PRTL_HANDLE_TABLE_ENTRY Handle
2953 RtlInitializeHandleTable(
2955 IN ULONG HandleSize
,
2956 IN PRTL_HANDLE_TABLE HandleTable
2963 IN PRTL_HANDLE_TABLE HandleTable
,
2964 IN PRTL_HANDLE_TABLE_ENTRY Handle
2970 RtlIsValidIndexHandle(
2971 IN PRTL_HANDLE_TABLE HandleTable
,
2973 OUT PRTL_HANDLE_TABLE_ENTRY
*Handle
2983 IN PVOID BaseAddress
,
2987 OUT PMESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
2993 RtlGetNtGlobalFlags(VOID
);
2998 RtlImageDirectoryEntryToData(
3000 BOOLEAN MappedAsImage
,
3009 PIMAGE_NT_HEADERS NtHeader
,
3012 PIMAGE_SECTION_HEADER
*SectionHeader
3018 RtlImageNtHeader(IN PVOID BaseAddress
);
3025 IN PVOID BaseAddress
,
3027 IN PIMAGE_NT_HEADERS
*NtHeader
3031 PIMAGE_SECTION_HEADER
3033 RtlImageRvaToSection(
3034 PIMAGE_NT_HEADERS NtHeader
,
3042 LdrRelocateImageWithBias(
3043 IN PVOID NewAddress
,
3044 IN LONGLONG AdditionalBias
,
3052 // Activation Context Functions
3054 #ifdef NTOS_MODE_USER
3059 RtlActivateActivationContext(
3062 OUT PULONG_PTR Cookie
3068 RtlAddRefActivationContext(
3076 RtlActivateActivationContextUnsafeFast(
3077 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
,
3084 RtlAllocateActivationContextStack(
3091 RtlCreateActivationContext(
3093 IN OUT PVOID ReturnedData
3099 RtlGetActiveActivationContext(
3106 RtlReleaseActivationContext(
3113 RtlDeactivateActivationContext(
3121 RtlFreeThreadActivationContextStack(void);
3126 RtlDeactivateActivationContextUnsafeFast(
3127 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
3133 RtlDosApplyFileIsolationRedirection_Ustr(
3135 IN PUNICODE_STRING OriginalName
,
3136 IN PUNICODE_STRING Extension
,
3137 IN OUT PUNICODE_STRING RedirectedName
,
3138 IN OUT PUNICODE_STRING RedirectedName2
,
3139 IN OUT PUNICODE_STRING
*OriginalName2
,
3148 RtlFindActivationContextSectionString(
3150 IN
const GUID
*ExtensionGuid
,
3151 IN ULONG SectionType
,
3152 IN PUNICODE_STRING SectionName
,
3153 IN OUT PVOID ReturnedData
3159 RtlQueryInformationActivationContext(
3162 PVOID pvSubInstance
,
3165 SIZE_T cbBuffer OPTIONAL
,
3166 SIZE_T
*pcbWrittenOrRequired OPTIONAL
3172 RtlZombifyActivationContext(
3180 // Registry Functions
3185 RtlCheckRegistryKey(
3193 RtlCreateRegistryKey(
3194 IN ULONG RelativeTo
,
3201 RtlFormatCurrentUserKeyPath(
3202 IN OUT PUNICODE_STRING KeyPath
3209 OUT HANDLE KeyHandle
,
3210 IN ACCESS_MASK DesiredAccess
,
3211 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3219 IN ACCESS_MASK DesiredAccess
,
3220 OUT PHANDLE KeyHandle
3226 RtlQueryRegistryValues(
3227 IN ULONG RelativeTo
,
3229 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
3231 IN PVOID Environment
3237 RtlWriteRegistryValue(
3252 RtlGetDefaultCodePage(
3253 OUT PUSHORT AnsiCodePage
,
3254 OUT PUSHORT OemCodePage
3261 IN PUSHORT AnsiTableBase
,
3262 IN PUSHORT OemTableBase
,
3263 IN PUSHORT CaseTableBase
,
3264 OUT PNLSTABLEINFO NlsTable
3270 RtlInitCodePageTable(
3271 IN PUSHORT TableBase
,
3272 OUT PCPTABLEINFO CodePageTable
3278 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable
);
3280 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
3283 // Misc conversion functions
3288 RtlConvertLongToLargeInteger(
3292 LARGE_INTEGER Result
;
3294 Result
.QuadPart
= SignedInteger
;
3301 RtlEnlargedIntegerMultiply(
3306 LARGE_INTEGER Product
;
3308 Product
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3315 RtlEnlargedUnsignedDivide(
3316 IN ULARGE_INTEGER Dividend
,
3318 IN PULONG Remainder OPTIONAL
3323 Quotient
= (ULONG
)(Dividend
.QuadPart
/ Divisor
);
3325 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
3334 RtlEnlargedUnsignedMultiply(
3339 LARGE_INTEGER Product
;
3341 Product
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3364 IN ULONG InitialCrc
,
3370 // Network Functions
3375 RtlIpv4StringToAddressW(
3378 OUT LPWSTR
*Terminator
,
3379 OUT
struct in_addr
*Addr
3385 RtlIpv6StringToAddressA(
3387 OUT PCHAR
*Terminator
,
3388 OUT
struct in6_addr
*Addr
3394 RtlIpv6StringToAddressW(
3396 OUT PCHAR
*Terminator
,
3397 OUT
struct in6_addr
*Addr
3403 RtlIpv6StringToAddressExA(
3404 IN PCHAR AddressString
,
3405 IN
struct in6_addr
*Address
,
3413 RtlIpv6StringToAddressExW(
3414 IN PWCHAR AddressName
,
3415 IN
struct in6_addr
*Address
,
3427 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3432 RtlSecondsSince1970ToTime(
3433 IN ULONG SecondsSince1970
,
3434 OUT PLARGE_INTEGER Time
3440 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3445 RtlTimeFieldsToTime(
3446 PTIME_FIELDS TimeFields
,
3453 RtlTimeToSecondsSince1970(
3454 PLARGE_INTEGER Time
,
3455 OUT PULONG SecondsSince1970
3461 RtlTimeToTimeFields(
3462 PLARGE_INTEGER Time
,
3463 PTIME_FIELDS TimeFields
3469 RtlSystemTimeToLocalTime(
3470 IN PLARGE_INTEGER SystemTime
,
3471 OUT PLARGE_INTEGER LocalTime
3475 // Version Functions
3480 RtlVerifyVersionInfo(
3481 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3483 IN ULONGLONG ConditionMask
3489 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3494 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType
);
3497 // Secure Memory Functions
3499 #ifdef NTOS_MODE_USER
3503 RtlRegisterSecureMemoryCacheCallback(
3504 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback
);
3509 RtlFlushSecureMemoryCache(
3510 IN PVOID MemoryCache
,
3511 IN OPTIONAL SIZE_T MemoryLength
3516 // Boot Status Data Functions
3518 #ifdef NTOS_MODE_USER
3522 RtlCreateBootStatusDataFile(
3529 RtlGetSetBootStatusData(
3541 RtlLockBootStatusData(
3542 OUT PHANDLE FileHandle
3548 RtlUnlockBootStatusData(
3549 IN HANDLE FileHandle