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
;
177 RtlInitEmptyAnsiString(OUT PANSI_STRING AnsiString
,
179 IN USHORT BufferSize
)
181 AnsiString
->Length
= 0;
182 AnsiString
->MaximumLength
= BufferSize
;
183 AnsiString
->Buffer
= Buffer
;
189 #define RtlEqualLuid(L1, L2) (((L1)->HighPart == (L2)->HighPart) && \
190 ((L1)->LowPart == (L2)->LowPart))
194 RtlConvertUlongToLuid(ULONG Ulong
)
198 TempLuid
.LowPart
= Ulong
;
199 TempLuid
.HighPart
= 0;
209 #define ASSERT( exp ) \
211 (RtlAssert( #exp, __FILE__, __LINE__, NULL ),FALSE) : \
214 #define ASSERTMSG( msg, exp ) \
216 (RtlAssert( #exp, __FILE__, __LINE__, msg ),FALSE) : \
221 #define ASSERT( exp ) ((void) 0)
222 #define ASSERTMSG( msg, exp ) ((void) 0)
227 #ifdef NTOS_KERNEL_RUNTIME
230 // Executing RTL functions at DISPATCH_LEVEL or higher will result in a
233 #define RTL_PAGED_CODE PAGED_CODE
238 // This macro does nothing in user mode
240 #define RTL_PAGED_CODE NOP_FUNCTION
245 // RTL Splay Tree Functions
247 #ifndef RTL_USE_AVL_TABLES
252 RtlInitializeGenericTable(
253 OUT PRTL_GENERIC_TABLE Table
,
254 IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
,
255 IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
,
256 IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine
,
257 IN PVOID TableContext OPTIONAL
263 RtlInsertElementGenericTable(
264 IN PRTL_GENERIC_TABLE Table
,
267 OUT PBOOLEAN NewElement OPTIONAL
273 RtlInsertElementGenericTableFull(
274 IN PRTL_GENERIC_TABLE Table
,
277 OUT PBOOLEAN NewElement OPTIONAL
,
278 IN PVOID NodeOrParent
,
279 IN TABLE_SEARCH_RESULT SearchResult
285 RtlDeleteElementGenericTable(
286 IN PRTL_GENERIC_TABLE Table
,
293 RtlLookupElementGenericTable(
294 IN PRTL_GENERIC_TABLE Table
,
301 RtlLookupElementGenericTableFull(
302 IN PRTL_GENERIC_TABLE Table
,
304 OUT PVOID
*NodeOrParent
,
305 OUT TABLE_SEARCH_RESULT
*SearchResult
311 RtlEnumerateGenericTable(
312 IN PRTL_GENERIC_TABLE Table
,
319 RtlEnumerateGenericTableWithoutSplaying(
320 IN PRTL_GENERIC_TABLE Table
,
321 IN OUT PVOID
*RestartKey
327 RtlGetElementGenericTable(
328 IN PRTL_GENERIC_TABLE Table
,
335 RtlNumberGenericTableElements(
336 IN PRTL_GENERIC_TABLE Table
342 RtlIsGenericTableEmpty(
343 IN PRTL_GENERIC_TABLE Table
346 #endif /* !RTL_USE_AVL_TABLES */
352 IN PRTL_SPLAY_LINKS Links
359 IN PRTL_SPLAY_LINKS Links
366 IN PRTL_SPLAY_LINKS Links
,
367 OUT PRTL_SPLAY_LINKS
*Root
374 IN PRTL_SPLAY_LINKS Links
380 RtlSubtreePredecessor(
381 IN PRTL_SPLAY_LINKS Links
388 IN PRTL_SPLAY_LINKS Links
395 IN PRTL_SPLAY_LINKS Links
398 #define RtlIsLeftChild(Links) \
399 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
401 #define RtlIsRightChild(Links) \
402 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
404 #define RtlRightChild(Links) \
405 ((PRTL_SPLAY_LINKS)(Links))->RightChild
407 #define RtlIsRoot(Links) \
408 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
410 #define RtlLeftChild(Links) \
411 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
413 #define RtlParent(Links) \
414 ((PRTL_SPLAY_LINKS)(Links))->Parent
416 #define RtlInitializeSplayLinks(Links) \
418 PRTL_SPLAY_LINKS _SplayLinks; \
419 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
420 _SplayLinks->Parent = _SplayLinks; \
421 _SplayLinks->LeftChild = NULL; \
422 _SplayLinks->RightChild = NULL; \
425 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
427 PRTL_SPLAY_LINKS _SplayParent; \
428 PRTL_SPLAY_LINKS _SplayChild; \
429 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
430 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
431 _SplayParent->LeftChild = _SplayChild; \
432 _SplayChild->Parent = _SplayParent; \
435 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
437 PRTL_SPLAY_LINKS _SplayParent; \
438 PRTL_SPLAY_LINKS _SplayChild; \
439 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
440 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
441 _SplayParent->RightChild = _SplayChild; \
442 _SplayChild->Parent = _SplayParent; \
446 // RTL AVL Tree Functions
451 RtlInitializeGenericTableAvl(
452 OUT PRTL_AVL_TABLE Table
,
453 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
454 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
455 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
456 IN PVOID TableContext OPTIONAL
462 RtlInsertElementGenericTableAvl(
463 IN PRTL_AVL_TABLE Table
,
466 OUT PBOOLEAN NewElement OPTIONAL
472 RtlInsertElementGenericTableFullAvl(
473 IN PRTL_AVL_TABLE Table
,
476 OUT PBOOLEAN NewElement OPTIONAL
,
477 IN PVOID NodeOrParent
,
478 IN TABLE_SEARCH_RESULT SearchResult
484 RtlDeleteElementGenericTableAvl(
485 IN PRTL_AVL_TABLE Table
,
492 RtlLookupElementGenericTableAvl(
493 IN PRTL_AVL_TABLE Table
,
500 RtlLookupElementGenericTableFullAvl(
501 IN PRTL_AVL_TABLE Table
,
503 OUT PVOID
*NodeOrParent
,
504 OUT TABLE_SEARCH_RESULT
*SearchResult
510 RtlEnumerateGenericTableAvl(
511 IN PRTL_AVL_TABLE Table
,
518 RtlEnumerateGenericTableWithoutSplayingAvl(
519 IN PRTL_AVL_TABLE Table
,
520 IN OUT PVOID
*RestartKey
526 RtlLookupFirstMatchingElementGenericTableAvl(
527 IN PRTL_AVL_TABLE Table
,
529 OUT PVOID
*RestartKey
535 RtlEnumerateGenericTableLikeADirectory(
536 IN PRTL_AVL_TABLE Table
,
537 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL
,
538 IN PVOID MatchData OPTIONAL
,
540 IN OUT PVOID
*RestartKey
,
541 IN OUT PULONG DeleteCount
,
548 RtlGetElementGenericTableAvl(
549 IN PRTL_AVL_TABLE Table
,
556 RtlNumberGenericTableElementsAvl(
557 IN PRTL_AVL_TABLE Table
563 RtlIsGenericTableEmptyAvl(
564 IN PRTL_AVL_TABLE Table
567 #ifdef RTL_USE_AVL_TABLES
569 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
570 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
571 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
572 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
573 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
574 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
575 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
576 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
577 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
578 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
579 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
581 #endif /* RTL_USE_AVL_TABLES */
583 #endif /* NTOS_MODE_USER */
586 // Error and Exception Functions
591 RtlAddVectoredExceptionHandler(
592 IN ULONG FirstHandler
,
593 IN PVECTORED_EXCEPTION_HANDLER VectoredHandler
600 IN PVOID FailedAssertion
,
609 RtlSetUnhandledExceptionFilter(
610 IN PVOID TopLevelExceptionFilter
617 OUT PCONTEXT ContextRecord
637 RtlEncodeSystemPointer(
644 RtlDecodeSystemPointer(
651 RtlDispatchException(
652 IN PEXCEPTION_RECORD ExceptionRecord
,
659 RtlNtStatusToDosError(
666 RtlNtStatusToDosErrorNoTeb(
673 RtlSetLastWin32ErrorAndNtStatusFromNtStatus(
681 IN PEXCEPTION_RECORD ExceptionRecord
695 RtlUnhandledExceptionFilter(
696 IN
struct _EXCEPTION_POINTERS
* ExceptionInfo
703 IN PVOID TargetFrame OPTIONAL
,
704 IN PVOID TargetIp OPTIONAL
,
705 IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL
,
724 RtlLogStackBackTrace(
735 IN HANDLE HeapHandle
,
745 IN PVOID BaseAddress OPTIONAL
,
746 IN SIZE_T SizeToReserve OPTIONAL
,
747 IN SIZE_T SizeToCommit OPTIONAL
,
748 IN PVOID Lock OPTIONAL
,
749 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
756 IN HANDLE HeapHandle
,
774 IN PVOID BaseAddress OPTIONAL
,
775 IN SIZE_T SizeToReserve OPTIONAL
,
776 IN SIZE_T SizeToCommit OPTIONAL
,
777 IN PVOID Lock OPTIONAL
,
778 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
802 IN HANDLE HeapHandle
,
826 IN PVOID BaseAddress
,
827 OUT PVOID
*UserValue
,
842 RtlQueryHeapInformation (
844 IN HEAP_INFORMATION_CLASS HeapInformationClass
,
845 OUT PVOID HeapInformation OPTIONAL
,
846 IN SIZE_T HeapInformationLength OPTIONAL
,
847 OUT PSIZE_T ReturnLength OPTIONAL
857 IN BOOLEAN ResetCounters
,
858 OUT PRTL_HEAP_TAG_INFO HeapTagInfo
874 RtlSetHeapInformation (
876 IN HEAP_INFORMATION_CLASS HeapInformationClass
,
877 IN PVOID HeapInformation OPTIONAL
,
878 IN SIZE_T HeapInformationLength OPTIONAL
891 RtlMultipleAllocateHeap (
902 RtlMultipleFreeHeap (
915 OUT PRTL_HEAP_USAGE Usage
930 IN PVOID BaseAddress
,
939 IN PVOID BaseAddress
,
940 IN ULONG UserFlagsReset
,
941 IN ULONG UserFlagsSet
950 IN PVOID MemoryPointer
966 IN HANDLE HeapHandle
,
970 #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap)
973 // Security Functions
978 RtlAbsoluteToSelfRelativeSD(
979 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
980 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
981 IN PULONG BufferLength
987 RtlAddAccessAllowedAce(
990 ACCESS_MASK AccessMask
,
997 RtlAddAccessAllowedAceEx(
999 IN ULONG dwAceRevision
,
1001 IN ACCESS_MASK AccessMask
,
1008 RtlAddAccessAllowedObjectAce(
1010 IN ULONG dwAceRevision
,
1012 IN ACCESS_MASK AccessMask
,
1013 IN GUID
*ObjectTypeGuid OPTIONAL
,
1014 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
1021 RtlAddAccessDeniedAce(
1024 ACCESS_MASK AccessMask
,
1031 RtlAddAccessDeniedAceEx(
1035 IN ACCESS_MASK AccessMask
,
1042 RtlAddAccessDeniedObjectAce(
1044 IN ULONG dwAceRevision
,
1046 IN ACCESS_MASK AccessMask
,
1047 IN GUID
*ObjectTypeGuid OPTIONAL
,
1048 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
1058 ULONG StartingAceIndex
,
1066 RtlAddAuditAccessAce(
1069 ACCESS_MASK AccessMask
,
1078 RtlAcquirePrivilege(
1079 IN PULONG Privilege
,
1082 OUT PVOID
*ReturnedState
1088 RtlAddAuditAccessAceEx(
1092 IN ACCESS_MASK AccessMask
,
1101 RtlAddAuditAccessObjectAce(
1105 IN ACCESS_MASK AccessMask
,
1106 IN GUID
*ObjectTypeGuid OPTIONAL
,
1107 IN GUID
*InheritedObjectTypeGuid OPTIONAL
,
1120 IN ULONG MandatoryFlags
,
1129 IN BOOLEAN NewValue
,
1130 IN BOOLEAN ForThread
,
1131 OUT PBOOLEAN OldValue
1137 RtlAllocateAndInitializeSid(
1138 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1139 IN UCHAR SubAuthorityCount
,
1140 IN ULONG SubAuthority0
,
1141 IN ULONG SubAuthority1
,
1142 IN ULONG SubAuthority2
,
1143 IN ULONG SubAuthority3
,
1144 IN ULONG SubAuthority4
,
1145 IN ULONG SubAuthority5
,
1146 IN ULONG SubAuthority6
,
1147 IN ULONG SubAuthority7
,
1154 RtlAreAllAccessesGranted(
1155 ACCESS_MASK GrantedAccess
,
1156 ACCESS_MASK DesiredAccess
1162 RtlAreAnyAccessesGranted(
1163 ACCESS_MASK GrantedAccess
,
1164 ACCESS_MASK DesiredAccess
1178 RtlCopyLuidAndAttributesArray(
1180 PLUID_AND_ATTRIBUTES Src
,
1181 PLUID_AND_ATTRIBUTES Dest
1187 RtlCopySidAndAttributesArray(
1189 PSID_AND_ATTRIBUTES Src
,
1191 PSID_AND_ATTRIBUTES Dest
,
1193 PVOID
* RemainingSidArea
,
1194 PULONG RemainingSidAreaSize
1200 RtlConvertSidToUnicodeString(
1201 OUT PUNICODE_STRING DestinationString
,
1203 IN BOOLEAN AllocateDestinationString
1211 IN PSID Destination
,
1227 RtlCreateSecurityDescriptor(
1228 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1235 RtlCreateSecurityDescriptorRelative(
1236 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor
,
1243 RtlCopySecurityDescriptor(
1244 IN PSECURITY_DESCRIPTOR pSourceSecurityDescriptor
,
1245 OUT PSECURITY_DESCRIPTOR pDestinationSecurityDescriptor
1299 RtlGetControlSecurityDescriptor(
1300 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1301 OUT PSECURITY_DESCRIPTOR_CONTROL Control
,
1308 RtlGetDaclSecurityDescriptor(
1309 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1310 OUT PBOOLEAN DaclPresent
,
1312 OUT PBOOLEAN DaclDefaulted
1318 RtlGetSaclSecurityDescriptor(
1319 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1320 OUT PBOOLEAN SaclPresent
,
1322 OUT PBOOLEAN SaclDefaulted
1328 RtlGetGroupSecurityDescriptor(
1329 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1331 OUT PBOOLEAN GroupDefaulted
1337 RtlGetOwnerSecurityDescriptor(
1338 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1340 OUT PBOOLEAN OwnerDefaulted
1346 RtlGetSecurityDescriptorRMControl(
1347 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1348 OUT PUCHAR RMControl
1352 PSID_IDENTIFIER_AUTHORITY
1354 RtlIdentifierAuthoritySid(PSID Sid
);
1359 RtlImpersonateSelf(IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
1366 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1367 IN UCHAR SubAuthorityCount
1373 RtlLengthRequiredSid(IN ULONG SubAuthorityCount
);
1378 RtlLengthSid(IN PSID Sid
);
1383 RtlMakeSelfRelativeSD(
1384 IN PSECURITY_DESCRIPTOR AbsoluteSD
,
1385 OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1386 IN OUT PULONG BufferLength
);
1392 PACCESS_MASK AccessMask
,
1393 PGENERIC_MAPPING GenericMapping
1396 #ifdef NTOS_MODE_USER
1401 RtlQueryInformationAcl(
1404 ULONG InformationLength
,
1405 ACL_INFORMATION_CLASS InformationClass
1413 RtlReleasePrivilege(
1414 IN PVOID ReturnedState
1420 RtlSelfRelativeToAbsoluteSD(
1421 IN PSECURITY_DESCRIPTOR SelfRelativeSD
,
1422 OUT PSECURITY_DESCRIPTOR AbsoluteSD
,
1423 IN PULONG AbsoluteSDSize
,
1429 IN PULONG OwnerSize
,
1430 IN PSID PrimaryGroup
,
1431 IN PULONG PrimaryGroupSize
1437 RtlSelfRelativeToAbsoluteSD2(
1438 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSD
,
1439 OUT PULONG BufferSize
1445 RtlSetAttributesSecurityDescriptor(
1446 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1447 IN SECURITY_DESCRIPTOR_CONTROL Control
,
1454 RtlSetControlSecurityDescriptor(
1455 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1456 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest
,
1457 IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet
1463 RtlSetDaclSecurityDescriptor (
1464 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1465 IN BOOLEAN DaclPresent
,
1467 IN BOOLEAN DaclDefaulted
1473 RtlSetGroupSecurityDescriptor(
1474 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1476 IN BOOLEAN GroupDefaulted
1479 #ifdef NTOS_MODE_USER
1484 RtlSetInformationAcl(
1487 ULONG InformationLength
,
1488 ACL_INFORMATION_CLASS InformationClass
1496 RtlSetOwnerSecurityDescriptor(
1497 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1499 IN BOOLEAN OwnerDefaulted
1505 RtlSetSaclSecurityDescriptor(
1506 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1507 IN BOOLEAN SaclPresent
,
1509 IN BOOLEAN SaclDefaulted
1515 RtlSetSecurityDescriptorRMControl(
1516 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1523 RtlSubAuthorityCountSid(
1532 IN ULONG SubAuthority
1538 RtlValidRelativeSecurityDescriptor(
1539 IN PSECURITY_DESCRIPTOR SecurityDescriptorInput
,
1540 IN ULONG SecurityDescriptorLength
,
1541 IN SECURITY_INFORMATION RequiredInformation
1547 RtlValidSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
1552 RtlValidSid(IN PSID Sid
);
1557 RtlValidAcl(PACL Acl
);
1562 RtlDeleteSecurityObject(
1563 IN PSECURITY_DESCRIPTOR
*ObjectDescriptor
1569 RtlNewSecurityObject(
1570 IN PSECURITY_DESCRIPTOR ParentDescriptor
,
1571 IN PSECURITY_DESCRIPTOR CreatorDescriptor
,
1572 OUT PSECURITY_DESCRIPTOR
*NewDescriptor
,
1573 IN BOOLEAN IsDirectoryObject
,
1575 IN PGENERIC_MAPPING GenericMapping
1581 RtlQuerySecurityObject(
1582 IN PSECURITY_DESCRIPTOR ObjectDescriptor
,
1583 IN SECURITY_INFORMATION SecurityInformation
,
1584 OUT PSECURITY_DESCRIPTOR ResultantDescriptor
,
1585 IN ULONG DescriptorLength
,
1586 OUT PULONG ReturnLength
1592 RtlSetSecurityObject(
1593 IN SECURITY_INFORMATION SecurityInformation
,
1594 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
1595 OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
1596 IN PGENERIC_MAPPING GenericMapping
,
1601 // Single-Character Functions
1606 RtlLargeIntegerToChar(
1607 IN PLARGE_INTEGER Value
,
1616 RtlUpperChar(CHAR Source
);
1621 RtlUpcaseUnicodeChar(WCHAR Source
);
1626 RtlDowncaseUnicodeChar(IN WCHAR Source
);
1641 RtlIntegerToUnicode(
1643 IN ULONG Base OPTIONAL
,
1644 IN ULONG Length OPTIONAL
,
1645 IN OUT LPWSTR String
1651 RtlIntegerToUnicodeString(
1654 IN OUT PUNICODE_STRING String
1667 // Byte Swap Functions
1669 #ifdef NTOS_MODE_USER
1671 #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || \
1672 ((defined(_M_AMD64) || \
1673 defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
1675 unsigned short __cdecl
_byteswap_ushort(unsigned short);
1676 unsigned long __cdecl
_byteswap_ulong (unsigned long);
1677 unsigned __int64 __cdecl
_byteswap_uint64(unsigned __int64
);
1678 #pragma intrinsic(_byteswap_ushort)
1679 #pragma intrinsic(_byteswap_ulong)
1680 #pragma intrinsic(_byteswap_uint64)
1681 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1682 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1683 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1685 #elif defined (__GNUC__)
1687 #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
1688 #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
1689 #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
1693 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1697 RtlUshortByteSwap(IN USHORT Source
);
1702 RtlUlongByteSwap(IN ULONG Source
);
1707 RtlUlonglongByteSwap(IN ULONGLONG Source
);
1711 #endif // NTOS_MODE_USER
1714 // Unicode->Ansi String Functions
1719 RtlxUnicodeStringToAnsiSize(IN PCUNICODE_STRING UnicodeString
);
1721 #ifdef NTOS_MODE_USER
1723 #define RtlUnicodeStringToAnsiSize(STRING) ( \
1724 NLS_MB_CODE_PAGE_TAG ? \
1725 RtlxUnicodeStringToAnsiSize(STRING) : \
1726 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1734 RtlUnicodeStringToAnsiString(
1735 PANSI_STRING DestinationString
,
1736 PCUNICODE_STRING SourceString
,
1737 BOOLEAN AllocateDestinationString
1741 // Unicode->OEM String Functions
1746 RtlUpcaseUnicodeStringToOemString(
1747 POEM_STRING DestinationString
,
1748 PCUNICODE_STRING SourceString
,
1749 BOOLEAN AllocateDestinationString
1755 RtlUpcaseUnicodeStringToCountedOemString(
1756 IN OUT POEM_STRING DestinationString
,
1757 IN PCUNICODE_STRING SourceString
,
1758 IN BOOLEAN AllocateDestinationString
1764 RtlUnicodeStringToOemString(
1765 POEM_STRING DestinationString
,
1766 PCUNICODE_STRING SourceString
,
1767 BOOLEAN AllocateDestinationString
1773 RtlUpcaseUnicodeToOemN(
1777 PCWCH UnicodeString
,
1784 RtlxUnicodeStringToOemSize(IN PCUNICODE_STRING UnicodeString
);
1786 #ifdef NTOS_MODE_USER
1788 #define RtlUnicodeStringToOemSize(STRING) ( \
1789 NLS_MB_OEM_CODE_PAGE_TAG ? \
1790 RtlxUnicodeStringToOemSize(STRING) : \
1791 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1794 #define RtlUnicodeStringToCountedOemSize(STRING) ( \
1795 (ULONG)(RtlUnicodeStringToOemSize(STRING) - sizeof(ANSI_NULL)) \
1807 PCWCH UnicodeString
,
1812 // Unicode->MultiByte String Functions
1817 RtlUnicodeToMultiByteN(
1821 PWCHAR UnicodeString
,
1828 RtlUpcaseUnicodeToMultiByteN(
1832 PCWCH UnicodeString
,
1839 RtlUnicodeToMultiByteSize(
1841 PCWCH UnicodeString
,
1848 RtlxOemStringToUnicodeSize(IN PCOEM_STRING OemString
);
1851 // OEM to Unicode Functions
1856 RtlOemStringToUnicodeString(
1857 PUNICODE_STRING DestinationString
,
1858 PCOEM_STRING SourceString
,
1859 BOOLEAN AllocateDestinationString
1866 PWSTR UnicodeString
,
1867 ULONG MaxBytesInUnicodeString
,
1868 PULONG BytesInUnicodeString
,
1870 ULONG BytesInOemString
1873 #ifdef NTOS_MODE_USER
1875 #define RtlOemStringToUnicodeSize(STRING) ( \
1876 NLS_MB_OEM_CODE_PAGE_TAG ? \
1877 RtlxOemStringToUnicodeSize(STRING) : \
1878 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1881 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1882 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1888 // Ansi->Unicode String Functions
1893 RtlxAnsiStringToUnicodeSize(
1894 PCANSI_STRING AnsiString
1900 RtlAnsiStringToUnicodeString(
1901 PUNICODE_STRING DestinationString
,
1902 PCANSI_STRING SourceString
,
1903 BOOLEAN AllocateDestinationString
1906 #ifdef NTOS_MODE_USER
1908 #define RtlAnsiStringToUnicodeSize(STRING) ( \
1909 NLS_MB_CODE_PAGE_TAG ? \
1910 RtlxAnsiStringToUnicodeSize(STRING) : \
1911 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1919 RtlCreateUnicodeStringFromAsciiz(
1920 OUT PUNICODE_STRING Destination
,
1925 // Unicode String Functions
1930 RtlAppendUnicodeToString(
1931 PUNICODE_STRING Destination
,
1938 RtlAppendUnicodeStringToString(
1939 PUNICODE_STRING Destination
,
1940 PCUNICODE_STRING Source
1946 RtlCompareUnicodeString(
1947 PCUNICODE_STRING String1
,
1948 PCUNICODE_STRING String2
,
1949 BOOLEAN CaseInsensitive
1955 RtlCopyUnicodeString(
1956 PUNICODE_STRING DestinationString
,
1957 PCUNICODE_STRING SourceString
1963 RtlCreateUnicodeString(
1964 PUNICODE_STRING DestinationString
,
1968 #ifdef NTOS_MODE_USER
1973 RtlDowncaseUnicodeString(
1974 IN OUT PUNICODE_STRING UniDest
,
1975 IN PCUNICODE_STRING UniSource
,
1976 IN BOOLEAN AllocateDestinationString
1982 RtlDuplicateUnicodeString(
1984 IN PCUNICODE_STRING SourceString
,
1985 OUT PUNICODE_STRING DestinationString
1995 IN PVOID Destination
,
2003 RtlCompareMemoryUlong(
2009 #define RtlCopyBytes RtlCopyMemory
2010 #define RtlFillBytes RtlFillMemory
2011 #define RtlZeroBytes RtlZeroMemory
2018 RtlEqualUnicodeString(
2019 PCUNICODE_STRING String1
,
2020 PCUNICODE_STRING String2
,
2021 BOOLEAN CaseInsensitive
2027 RtlFindCharInUnicodeString(
2029 IN PUNICODE_STRING SearchString
,
2030 IN PCUNICODE_STRING MatchString
,
2031 OUT PUSHORT Position
2037 RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString
);
2042 RtlHashUnicodeString(
2043 IN CONST UNICODE_STRING
*String
,
2044 IN BOOLEAN CaseInSensitive
,
2045 IN ULONG HashAlgorithm
,
2046 OUT PULONG HashValue
2052 RtlInitUnicodeString(
2053 IN OUT PUNICODE_STRING DestinationString
,
2054 IN PCWSTR SourceString
2060 RtlInitUnicodeStringEx(
2061 OUT PUNICODE_STRING DestinationString
,
2062 IN PCWSTR SourceString OPTIONAL
2078 PCANSI_STRING String1
,
2079 PCANSI_STRING String2
,
2080 BOOLEAN CaseInsensitive
2086 RtlPrefixUnicodeString(
2087 PCUNICODE_STRING String1
,
2088 PCUNICODE_STRING String2
,
2089 BOOLEAN CaseInsensitive
2095 RtlUpcaseUnicodeString(
2096 PUNICODE_STRING DestinationString
,
2097 PCUNICODE_STRING SourceString
,
2098 BOOLEAN AllocateDestinationString
2104 RtlUnicodeStringToInteger(
2105 PCUNICODE_STRING String
,
2113 RtlValidateUnicodeString(
2115 IN PCUNICODE_STRING String
2119 // Ansi String Functions
2124 RtlFreeAnsiString(IN PANSI_STRING AnsiString
);
2130 PANSI_STRING DestinationString
,
2137 RtlInitAnsiStringEx(
2138 PANSI_STRING DestinationString
,
2143 // OEM String Functions
2148 RtlFreeOemString(IN POEM_STRING OemString
);
2151 // MultiByte->Unicode String Functions
2156 RtlMultiByteToUnicodeN(
2157 PWCHAR UnicodeString
,
2167 RtlMultiByteToUnicodeSize(
2179 RtlAddAtomToAtomTable(
2180 IN PRTL_ATOM_TABLE AtomTable
,
2190 IN OUT PRTL_ATOM_TABLE
*AtomTable
2196 RtlDeleteAtomFromAtomTable(
2197 IN PRTL_ATOM_TABLE AtomTable
,
2204 RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable
);
2209 RtlQueryAtomInAtomTable(
2210 IN PRTL_ATOM_TABLE AtomTable
,
2212 IN OUT PULONG RefCount OPTIONAL
,
2213 IN OUT PULONG PinCount OPTIONAL
,
2214 IN OUT PWSTR AtomName OPTIONAL
,
2215 IN OUT PULONG NameLength OPTIONAL
2221 RtlPinAtomInAtomTable(
2222 IN PRTL_ATOM_TABLE AtomTable
,
2229 RtlLookupAtomInAtomTable(
2230 IN PRTL_ATOM_TABLE AtomTable
,
2236 // Process Management Functions
2248 RtlAcquirePebLock(VOID
);
2253 RtlCreateProcessParameters (
2254 OUT PRTL_USER_PROCESS_PARAMETERS
*ProcessParameters
,
2255 IN PUNICODE_STRING ImagePathName OPTIONAL
,
2256 IN PUNICODE_STRING DllPath OPTIONAL
,
2257 IN PUNICODE_STRING CurrentDirectory OPTIONAL
,
2258 IN PUNICODE_STRING CommandLine OPTIONAL
,
2259 IN PWSTR Environment OPTIONAL
,
2260 IN PUNICODE_STRING WindowTitle OPTIONAL
,
2261 IN PUNICODE_STRING DesktopInfo OPTIONAL
,
2262 IN PUNICODE_STRING ShellInfo OPTIONAL
,
2263 IN PUNICODE_STRING RuntimeInfo OPTIONAL
2269 RtlCreateUserProcess(
2270 IN PUNICODE_STRING ImageFileName
,
2271 IN ULONG Attributes
,
2272 IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
,
2273 IN PSECURITY_DESCRIPTOR ProcessSecutityDescriptor OPTIONAL
,
2274 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor OPTIONAL
,
2275 IN HANDLE ParentProcess OPTIONAL
,
2276 IN BOOLEAN CurrentDirectory
,
2277 IN HANDLE DebugPort OPTIONAL
,
2278 IN HANDLE ExceptionPort OPTIONAL
,
2279 OUT PRTL_USER_PROCESS_INFORMATION ProcessInfo
2285 RtlCreateUserThread(
2286 IN HANDLE ProcessHandle
,
2287 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
2288 IN BOOLEAN CreateSuspended
,
2289 IN ULONG StackZeroBits
,
2290 IN SIZE_T StackReserve
,
2291 IN SIZE_T StackCommit
,
2292 IN PTHREAD_START_ROUTINE StartAddress
,
2294 IN OUT PHANDLE ThreadHandle
,
2295 IN OUT PCLIENT_ID ClientId
2299 PRTL_USER_PROCESS_PARAMETERS
2301 RtlDeNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2306 RtlDestroyProcessParameters(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2311 RtlExitUserThread(NTSTATUS Status
);
2316 RtlInitializeContext(
2317 IN HANDLE ProcessHandle
,
2318 OUT PCONTEXT ThreadContext
,
2319 IN PVOID ThreadStartParam OPTIONAL
,
2320 IN PTHREAD_START_ROUTINE ThreadStartAddress
,
2321 IN PINITIAL_TEB InitialTeb
2327 RtlIsThreadWithinLoaderCallout(VOID
);
2330 PRTL_USER_PROCESS_PARAMETERS
2332 RtlNormalizeProcessParams(IN PRTL_USER_PROCESS_PARAMETERS ProcessParameters
);
2337 RtlReleasePebLock(VOID
);
2346 IN ULONG ArgumentCount
,
2347 IN PULONG Arguments
,
2348 IN BOOLEAN PassContext
,
2349 IN BOOLEAN AlreadySuspended
2355 RtlSetProcessIsCritical(
2356 IN BOOLEAN NewValue
,
2357 OUT PBOOLEAN OldValue OPTIONAL
,
2358 IN BOOLEAN NeedBreaks
2364 RtlGetCurrentProcessorNumber(
2368 #define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
2371 // Thread Pool Functions
2376 RtlDeregisterWaitEx(
2377 IN HANDLE hWaitHandle
,
2378 IN HANDLE hCompletionEvent
2385 IN HANDLE hWaitHandle
2392 IN WORKERCALLBACKFUNC Function
,
2393 IN PVOID Context OPTIONAL
,
2400 RtlSetIoCompletionCallback(
2401 IN HANDLE FileHandle
,
2402 IN PIO_APC_ROUTINE Callback
,
2410 IN PHANDLE phNewWaitObject
,
2412 IN WAITORTIMERCALLBACKFUNC Callback
,
2414 IN ULONG ulMilliseconds
,
2419 // Environment/Path Functions
2424 RtlCreateEnvironment(
2432 RtlComputePrivatizedDllName_U(
2433 IN PUNICODE_STRING DllName
,
2434 OUT PUNICODE_STRING RealName
,
2435 OUT PUNICODE_STRING LocalName
2441 RtlDestroyEnvironment(
2442 IN PWSTR Environment
2448 RtlDoesFileExists_U(
2455 RtlDoesFileExists_UstrEx(
2456 IN PCUNICODE_STRING FileName
,
2457 IN BOOLEAN SucceedIfBusy
2463 RtlDetermineDosPathNameType_U(
2470 RtlDetermineDosPathNameType_Ustr(
2471 IN PCUNICODE_STRING Path
2480 IN PCWSTR Extension
,
2481 IN ULONG BufferSize
,
2489 RtlDosPathNameToNtPathName_U(
2490 IN PCWSTR DosPathName
,
2491 OUT PUNICODE_STRING NtPathName
,
2492 OUT PCWSTR
*NtFileNamePart
,
2493 OUT PRTL_RELATIVE_NAME_U DirectoryInfo
2499 RtlExpandEnvironmentStrings_U(
2501 PUNICODE_STRING Source
,
2502 PUNICODE_STRING Destination
,
2509 RtlGetCurrentDirectory_U(
2510 ULONG MaximumLength
,
2517 RtlGetFullPathName_U(
2521 OUT PWSTR
*ShortName
2527 RtlIsDosDeviceName_U(
2534 RtlIsDosDeviceName_Ustr(
2535 IN PUNICODE_STRING Name
2542 RtlIsNameLegalDOS8Dot3(
2543 IN PCUNICODE_STRING Name
,
2544 IN OUT POEM_STRING OemName OPTIONAL
,
2545 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
2551 RtlQueryEnvironmentVariable_U(
2553 PUNICODE_STRING Name
,
2554 PUNICODE_STRING Value
2559 RtlReleaseRelativeName(
2560 IN PRTL_RELATIVE_NAME_U RelativeName
2566 RtlSetCurrentDirectory_U(
2567 IN PUNICODE_STRING name
2573 RtlSetEnvironmentVariable(
2575 PUNICODE_STRING Name
,
2576 PUNICODE_STRING Value
2580 // Critical Section/Resource Functions
2585 RtlDeleteCriticalSection (
2586 IN PRTL_CRITICAL_SECTION CriticalSection
2592 RtlEnterCriticalSection(
2593 IN PRTL_CRITICAL_SECTION CriticalSection
2599 RtlInitializeCriticalSection(
2600 IN PRTL_CRITICAL_SECTION CriticalSection
2606 RtlInitializeCriticalSectionAndSpinCount(
2607 IN PRTL_CRITICAL_SECTION CriticalSection
,
2614 RtlLeaveCriticalSection(
2615 IN PRTL_CRITICAL_SECTION CriticalSection
2621 RtlTryEnterCriticalSection(
2622 IN PRTL_CRITICAL_SECTION CriticalSection
2628 RtlpUnWaitCriticalSection(
2629 IN PRTL_CRITICAL_SECTION CriticalSection
2635 RtlpWaitForCriticalSection(
2636 IN PRTL_CRITICAL_SECTION CriticalSection
2642 RtlAcquireResourceExclusive(
2643 IN PRTL_RESOURCE Resource
,
2650 RtlAcquireResourceShared(
2651 IN PRTL_RESOURCE Resource
,
2658 RtlConvertExclusiveToShared(
2659 IN PRTL_RESOURCE Resource
2665 RtlConvertSharedToExclusive(
2666 IN PRTL_RESOURCE Resource
2673 IN PRTL_RESOURCE Resource
2680 IN PRTL_RESOURCE Resource
2686 RtlInitializeResource(
2687 IN PRTL_RESOURCE Resource
2694 IN PRTL_RESOURCE Resource
2698 // Compression Functions
2704 IN USHORT CompressionFormatAndEngine
,
2705 IN PUCHAR UncompressedBuffer
,
2706 IN ULONG UncompressedBufferSize
,
2707 OUT PUCHAR CompressedBuffer
,
2708 IN ULONG CompressedBufferSize
,
2709 IN ULONG UncompressedChunkSize
,
2710 OUT PULONG FinalCompressedSize
,
2717 RtlDecompressBuffer(
2718 IN USHORT CompressionFormat
,
2719 OUT PUCHAR UncompressedBuffer
,
2720 IN ULONG UncompressedBufferSize
,
2721 IN PUCHAR CompressedBuffer
,
2722 IN ULONG CompressedBufferSize
,
2723 OUT PULONG FinalUncompressedSize
2729 RtlGetCompressionWorkSpaceSize(
2730 IN USHORT CompressionFormatAndEngine
,
2731 OUT PULONG CompressBufferWorkSpaceSize
,
2732 OUT PULONG CompressFragmentWorkSpaceSize
2736 // Debug Info Functions
2739 PRTL_DEBUG_INFORMATION
2741 RtlCreateQueryDebugBuffer(
2743 IN BOOLEAN EventPair
2749 RtlDestroyQueryDebugBuffer(IN PRTL_DEBUG_INFORMATION DebugBuffer
);
2754 RtlQueryProcessDebugInformation(
2756 IN ULONG DebugInfoClassMask
,
2757 IN OUT PRTL_DEBUG_INFORMATION DebugBuffer
2767 IN PRTL_BITMAP BitMapHeader
,
2768 IN ULONG StartingIndex
,
2776 IN PRTL_BITMAP BitMapHeader
,
2777 IN ULONG StartingIndex
,
2785 IN PRTL_BITMAP BitMapHeader
,
2786 IN ULONG StartingIndex
,
2787 IN ULONG NumberToClear
2794 IN PRTL_BITMAP BitMapHeader
,
2795 IN ULONG NumberToFind
,
2802 RtlFindClearBitsAndSet(
2803 IN PRTL_BITMAP BitMapHeader
,
2804 IN ULONG NumberToFind
,
2811 RtlFindNextForwardRunClear(
2812 IN PRTL_BITMAP BitMapHeader
,
2814 IN PULONG StartingRunIndex
2820 RtlInitializeBitMap(
2821 IN PRTL_BITMAP BitMapHeader
,
2822 IN PULONG BitMapBuffer
,
2823 IN ULONG SizeOfBitMap
2830 IN PRTL_BITMAP BitMapHeader
2837 PRTL_BITMAP BitMapHeader
,
2845 IN PRTL_BITMAP BitMapHeader
,
2846 IN ULONG StartingIndex
,
2847 IN ULONG NumberToSet
2854 PRTL_BITMAP BitMapHeader
2861 PRTL_BITMAP BitMapHeader
,
2874 WAITORTIMERCALLBACKFUNC Callback
,
2884 RtlCreateTimerQueue(PHANDLE TimerQueue
);
2892 HANDLE CompletionEvent
2908 RtlDeleteTimerQueueEx(
2910 HANDLE CompletionEvent
2916 RtlDeleteTimerQueue(HANDLE TimerQueue
);
2923 InterlockedPushListSList(
2924 IN PSLIST_HEADER ListHead
,
2925 IN PSLIST_ENTRY List
,
2926 IN PSLIST_ENTRY ListEnd
,
2931 // Range List functions
2936 RtlInitializeRangeList(
2937 IN OUT PRTL_RANGE_LIST RangeList
2944 IN PRTL_RANGE_LIST RangeList
2951 IN OUT PRTL_RANGE_LIST RangeList
,
2954 IN UCHAR Attributes
,
2956 IN PVOID UserData OPTIONAL
,
2957 IN PVOID Owner OPTIONAL
2974 IN ULONG ComponentId
,
2986 IN ULONG MaximumResponseLength
2997 DbgLoadImageSymbols(
3000 IN ULONG_PTR ProcessId
3005 DbgUnLoadImageSymbols(
3008 IN ULONG_PTR ProcessId
3019 // Generic Table Functions
3021 #if defined(NTOS_MODE_USER) || defined(_NTIFS_)
3025 RtlInsertElementGenericTable(
3026 IN PRTL_GENERIC_TABLE Table
,
3028 IN ULONG BufferSize
,
3029 OUT PBOOLEAN NewElement OPTIONAL
3035 RtlInsertElementGenericTableFull(
3036 IN PRTL_GENERIC_TABLE Table
,
3038 IN ULONG BufferSize
,
3039 OUT PBOOLEAN NewElement OPTIONAL
,
3040 IN PVOID NodeOrParent
,
3041 IN TABLE_SEARCH_RESULT SearchResult
3047 RtlIsGenericTableEmpty(
3048 IN PRTL_GENERIC_TABLE Table
3054 RtlLookupElementGenericTableFull(
3055 IN PRTL_GENERIC_TABLE Table
,
3057 OUT PVOID
*NodeOrParent
,
3058 OUT TABLE_SEARCH_RESULT
*SearchResult
3063 // Handle Table Functions
3066 PRTL_HANDLE_TABLE_ENTRY
3069 IN PRTL_HANDLE_TABLE HandleTable
,
3076 RtlDestroyHandleTable(IN PRTL_HANDLE_TABLE HandleTable
);
3082 IN PRTL_HANDLE_TABLE HandleTable
,
3083 IN PRTL_HANDLE_TABLE_ENTRY Handle
3089 RtlInitializeHandleTable(
3091 IN ULONG HandleSize
,
3092 IN PRTL_HANDLE_TABLE HandleTable
3099 IN PRTL_HANDLE_TABLE HandleTable
,
3100 IN PRTL_HANDLE_TABLE_ENTRY Handle
3106 RtlIsValidIndexHandle(
3107 IN PRTL_HANDLE_TABLE HandleTable
,
3109 OUT PRTL_HANDLE_TABLE_ENTRY
*Handle
3119 IN PVOID BaseAddress
,
3123 OUT PMESSAGE_RESOURCE_ENTRY
*MessageResourceEntry
3129 RtlGetNtGlobalFlags(VOID
);
3134 RtlImageDirectoryEntryToData(
3136 BOOLEAN MappedAsImage
,
3145 PIMAGE_NT_HEADERS NtHeader
,
3148 PIMAGE_SECTION_HEADER
*SectionHeader
3154 RtlImageNtHeader(IN PVOID BaseAddress
);
3161 IN PVOID BaseAddress
,
3163 IN PIMAGE_NT_HEADERS
*NtHeader
3167 PIMAGE_SECTION_HEADER
3169 RtlImageRvaToSection(
3170 PIMAGE_NT_HEADERS NtHeader
,
3178 LdrRelocateImageWithBias(
3179 IN PVOID NewAddress
,
3180 IN LONGLONG AdditionalBias
,
3188 // Activation Context Functions
3190 #ifdef NTOS_MODE_USER
3194 RtlActivateActivationContextEx(
3198 IN PULONG_PTR Cookie
3204 RtlActivateActivationContext(
3207 OUT PULONG_PTR Cookie
3213 RtlAddRefActivationContext(
3218 PRTL_ACTIVATION_CONTEXT_STACK_FRAME
3220 RtlActivateActivationContextUnsafeFast(
3221 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
,
3228 RtlAllocateActivationContextStack(
3235 RtlCreateActivationContext(
3237 IN OUT PVOID ReturnedData
3243 RtlGetActiveActivationContext(
3250 RtlReleaseActivationContext(
3257 RtlDeactivateActivationContext(
3265 RtlFreeThreadActivationContextStack(void);
3268 PRTL_ACTIVATION_CONTEXT_STACK_FRAME
3270 RtlDeactivateActivationContextUnsafeFast(
3271 IN PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED Frame
3277 RtlDosApplyFileIsolationRedirection_Ustr(
3279 IN PUNICODE_STRING OriginalName
,
3280 IN PUNICODE_STRING Extension
,
3281 IN OUT PUNICODE_STRING RedirectedName
,
3282 IN OUT PUNICODE_STRING RedirectedName2
,
3283 IN OUT PUNICODE_STRING
*OriginalName2
,
3292 RtlFindActivationContextSectionString(
3294 IN
const GUID
*ExtensionGuid
,
3295 IN ULONG SectionType
,
3296 IN PUNICODE_STRING SectionName
,
3297 IN OUT PVOID ReturnedData
3303 RtlQueryInformationActivationContext(
3306 PVOID pvSubInstance
,
3309 SIZE_T cbBuffer OPTIONAL
,
3310 SIZE_T
*pcbWrittenOrRequired OPTIONAL
3316 RtlZombifyActivationContext(
3324 // Registry Functions
3329 RtlCheckRegistryKey(
3337 RtlCreateRegistryKey(
3338 IN ULONG RelativeTo
,
3345 RtlFormatCurrentUserKeyPath(
3346 IN OUT PUNICODE_STRING KeyPath
3353 OUT HANDLE KeyHandle
,
3354 IN ACCESS_MASK DesiredAccess
,
3355 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3363 IN ACCESS_MASK DesiredAccess
,
3364 OUT PHANDLE KeyHandle
3370 RtlQueryRegistryValues(
3371 IN ULONG RelativeTo
,
3373 IN PRTL_QUERY_REGISTRY_TABLE QueryTable
,
3375 IN PVOID Environment
3381 RtlWriteRegistryValue(
3396 RtlGetDefaultCodePage(
3397 OUT PUSHORT AnsiCodePage
,
3398 OUT PUSHORT OemCodePage
3405 IN PUSHORT AnsiTableBase
,
3406 IN PUSHORT OemTableBase
,
3407 IN PUSHORT CaseTableBase
,
3408 OUT PNLSTABLEINFO NlsTable
3414 RtlInitCodePageTable(
3415 IN PUSHORT TableBase
,
3416 OUT PCPTABLEINFO CodePageTable
3422 RtlResetRtlTranslations(IN PNLSTABLEINFO NlsTable
);
3424 #if defined(NTOS_MODE_USER) && !defined(NO_RTL_INLINES)
3427 // Misc conversion functions
3432 RtlConvertLongToLargeInteger(
3436 LARGE_INTEGER Result
;
3438 Result
.QuadPart
= SignedInteger
;
3445 RtlEnlargedIntegerMultiply(
3450 LARGE_INTEGER Product
;
3452 Product
.QuadPart
= (LONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3459 RtlEnlargedUnsignedDivide(
3460 IN ULARGE_INTEGER Dividend
,
3462 IN PULONG Remainder OPTIONAL
3467 Quotient
= (ULONG
)(Dividend
.QuadPart
/ Divisor
);
3469 *Remainder
= (ULONG
)(Dividend
.QuadPart
% Divisor
);
3478 RtlEnlargedUnsignedMultiply(
3483 LARGE_INTEGER Product
;
3485 Product
.QuadPart
= (ULONGLONG
)Multiplicand
* (ULONGLONG
)Multiplier
;
3508 IN ULONG InitialCrc
,
3514 // Network Functions
3519 RtlIpv4StringToAddressW(
3522 OUT LPWSTR
*Terminator
,
3523 OUT
struct in_addr
*Addr
3529 RtlIpv6StringToAddressA(
3531 OUT PCHAR
*Terminator
,
3532 OUT
struct in6_addr
*Addr
3538 RtlIpv6StringToAddressW(
3540 OUT PCHAR
*Terminator
,
3541 OUT
struct in6_addr
*Addr
3547 RtlIpv6StringToAddressExA(
3548 IN PCHAR AddressString
,
3549 IN
struct in6_addr
*Address
,
3557 RtlIpv6StringToAddressExW(
3558 IN PWCHAR AddressName
,
3559 IN
struct in6_addr
*Address
,
3571 RtlQueryTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3576 RtlSecondsSince1970ToTime(
3577 IN ULONG SecondsSince1970
,
3578 OUT PLARGE_INTEGER Time
3584 RtlSetTimeZoneInformation(PRTL_TIME_ZONE_INFORMATION TimeZoneInformation
);
3589 RtlTimeFieldsToTime(
3590 PTIME_FIELDS TimeFields
,
3597 RtlTimeToSecondsSince1970(
3598 PLARGE_INTEGER Time
,
3599 OUT PULONG SecondsSince1970
3605 RtlTimeToTimeFields(
3606 PLARGE_INTEGER Time
,
3607 PTIME_FIELDS TimeFields
3613 RtlSystemTimeToLocalTime(
3614 IN PLARGE_INTEGER SystemTime
,
3615 OUT PLARGE_INTEGER LocalTime
3619 // Version Functions
3624 RtlVerifyVersionInfo(
3625 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3627 IN ULONGLONG ConditionMask
3633 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3638 RtlGetNtProductType(OUT PNT_PRODUCT_TYPE ProductType
);
3641 // Secure Memory Functions
3643 #ifdef NTOS_MODE_USER
3647 RtlRegisterSecureMemoryCacheCallback(
3648 IN PRTL_SECURE_MEMORY_CACHE_CALLBACK Callback
);
3653 RtlFlushSecureMemoryCache(
3654 IN PVOID MemoryCache
,
3655 IN OPTIONAL SIZE_T MemoryLength
3660 // Boot Status Data Functions
3662 #ifdef NTOS_MODE_USER
3666 RtlCreateBootStatusDataFile(
3673 RtlGetSetBootStatusData(
3685 RtlLockBootStatusData(
3686 OUT PHANDLE FileHandle
3692 RtlUnlockBootStatusData(
3693 IN HANDLE FileHandle