[RTL/NDK/NTDLL]
[reactos.git] / reactos / include / ndk / rtlfuncs.h
index 815e815..405e16d 100644 (file)
@@ -608,8 +608,6 @@ RtlIsGenericTableEmptyAvl(
 
 #endif /* RTL_USE_AVL_TABLES */
 
-#endif /* NTOS_MODE_USER */
-
 //
 // Error and Exception Functions
 //
@@ -639,6 +637,8 @@ RtlSetUnhandledExceptionFilter(
     _In_ PRTLP_UNHANDLED_EXCEPTION_FILTER TopLevelExceptionFilter
 );
 
+#endif /* NTOS_MODE_USER */
+
 NTSYSAPI
 VOID
 NTAPI
@@ -861,7 +861,7 @@ RtlGetUserInfoHeap(
     _In_ PVOID HeapHandle,
     _In_ ULONG Flags,
     _In_ PVOID BaseAddress,
-    _Out_opt_ PVOID *UserValue,
+    _Inout_opt_ PVOID *UserValue,
     _Out_opt_ PULONG UserFlags
 );
 
@@ -876,13 +876,14 @@ RtlProtectHeap(
 NTSYSAPI
 NTSTATUS
 NTAPI
-RtlQueryHeapInformation (
+RtlQueryHeapInformation(
     _In_ PVOID HeapHandle,
     _In_ HEAP_INFORMATION_CLASS HeapInformationClass,
-    _Out_opt_ PVOID HeapInformation,
-    _In_opt_ SIZE_T HeapInformationLength,
-    _Out_opt_ PSIZE_T ReturnLength
-    );
+    _Out_ PVOID HeapInformation,
+    _In_ SIZE_T HeapInformationLength,
+    _When_(HeapInformationClass==HeapCompatibilityInformation, _On_failure_(_Out_opt_))
+        _Out_opt_ PSIZE_T ReturnLength
+);
 
 _Ret_opt_z_
 NTSYSAPI
@@ -909,16 +910,15 @@ RtlReAllocateHeap(
     _In_ SIZE_T Size
 );
 
-_Success_(return != 0)
 NTSYSAPI
 NTSTATUS
 NTAPI
-RtlSetHeapInformation (
+RtlSetHeapInformation(
     _In_ PVOID HeapHandle,
     _In_ HEAP_INFORMATION_CLASS HeapInformationClass,
-    _In_opt_ PVOID HeapInformation,
-    _In_opt_ SIZE_T HeapInformationLength
-    );
+    _When_(HeapInformationClass==HeapCompatibilityInformation,_In_) PVOID HeapInformation,
+    _In_ SIZE_T HeapInformationLength
+);
 
 NTSYSAPI
 BOOLEAN
@@ -990,7 +990,7 @@ NTAPI
 RtlValidateHeap(
     _In_ HANDLE Heap,
     _In_ ULONG Flags,
-    _In_ PVOID P
+    _In_opt_ PVOID P
 );
 
 NTSYSAPI
@@ -1468,21 +1468,22 @@ RtlReleasePrivilege(
     _In_ PVOID ReturnedState
 );
 
+_IRQL_requires_max_(APC_LEVEL)
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlSelfRelativeToAbsoluteSD(
-    _In_ PSECURITY_DESCRIPTOR SelfRelativeSD,
-    _Out_ PSECURITY_DESCRIPTOR AbsoluteSD,
-    _In_ PULONG AbsoluteSDSize,
-    _In_ PACL Dacl,
-    _In_ PULONG DaclSize,
-    _In_ PACL Sacl,
-    _In_ PULONG SaclSize,
-    _In_ PSID Owner,
-    _In_ PULONG OwnerSize,
-    _In_ PSID PrimaryGroup,
-    _In_ PULONG PrimaryGroupSize
+    _In_ PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
+    _Out_writes_bytes_to_opt_(*AbsoluteSecurityDescriptorSize, *AbsoluteSecurityDescriptorSize) PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
+    _Inout_ PULONG AbsoluteSecurityDescriptorSize,
+    _Out_writes_bytes_to_opt_(*DaclSize, *DaclSize) PACL Dacl,
+    _Inout_ PULONG DaclSize,
+    _Out_writes_bytes_to_opt_(*SaclSize, *SaclSize) PACL Sacl,
+    _Inout_ PULONG SaclSize,
+    _Out_writes_bytes_to_opt_(*OwnerSize, *OwnerSize) PSID Owner,
+    _Inout_ PULONG OwnerSize,
+    _Out_writes_bytes_to_opt_(*PrimaryGroupSize, *PrimaryGroupSize) PSID PrimaryGroup,
+    _Inout_ PULONG PrimaryGroupSize
 );
 
 NTSYSAPI
@@ -1522,13 +1523,14 @@ RtlSetDaclSecurityDescriptor(
     _In_opt_ BOOLEAN DaclDefaulted
 );
 
+_IRQL_requires_max_(APC_LEVEL)
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlSetGroupSecurityDescriptor(
     _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor,
-    _In_ PSID Group,
-    _In_ BOOLEAN GroupDefaulted
+    _In_opt_ PSID Group,
+    _In_opt_ BOOLEAN GroupDefaulted
 );
 
 #ifdef NTOS_MODE_USER
@@ -1665,7 +1667,7 @@ RtlLargeIntegerToChar(
     _In_ PLARGE_INTEGER Value,
     _In_ ULONG Base,
     _In_ ULONG Length,
-    _Inout_ PCHAR String
+    _Out_ PCHAR String
 );
 
 NTSYSAPI
@@ -1690,7 +1692,7 @@ RtlIntegerToChar(
     _In_ ULONG Value,
     _In_ ULONG Base,
     _In_ ULONG Length,
-    _Inout_ PCHAR String
+    _Out_ PCHAR String
 );
 
 NTSYSAPI
@@ -1811,6 +1813,7 @@ RtlUpcaseUnicodeStringToOemString(
 
 _IRQL_requires_max_(PASSIVE_LEVEL)
 _Must_inspect_result_
+//_At_(DestinationString->Buffer, _Post_bytecount_(DestinationString->Length))
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -2109,10 +2112,21 @@ RtlFindCharInUnicodeString(
     _Out_ PUSHORT Position
 );
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 NTSYSAPI
 VOID
 NTAPI
-RtlFreeUnicodeString(IN PUNICODE_STRING UnicodeString);
+RtlFreeUnicodeString(
+    _Inout_ _At_(UnicodeString->Buffer, __drv_freesMem(Mem))
+        PUNICODE_STRING UnicodeString
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlEraseUnicodeString(
+    _Inout_ PUNICODE_STRING String
+);
 
 NTSYSAPI
 NTSTATUS
@@ -2126,8 +2140,12 @@ RtlHashUnicodeString(
 
 _IRQL_requires_max_(DISPATCH_LEVEL)
 _At_(DestinationString->Buffer, _Post_equal_to_(SourceString))
+_When_(SourceString != NULL,
 _At_(DestinationString->Length, _Post_equal_to_(_String_length_(SourceString) * sizeof(WCHAR)))
-_At_(DestinationString->MaximumLength, _Post_equal_to_((_String_length_(SourceString)+1) * sizeof(WCHAR)))
+_At_(DestinationString->MaximumLength, _Post_equal_to_(DestinationString->Length + sizeof(WCHAR))))
+_When_(SourceString == NULL,
+_At_(DestinationString->Length, _Post_equal_to_(0))
+_At_(DestinationString->MaximumLength, _Post_equal_to_(0)))
 NTSYSAPI
 VOID
 NTAPI
@@ -2154,22 +2172,74 @@ RtlIsTextUnicode(
     INT *Flags
 );
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
+_Must_inspect_result_
 NTSYSAPI
 BOOLEAN
 NTAPI
 RtlPrefixString(
-    PCANSI_STRING String1,
-    PCANSI_STRING String2,
-    BOOLEAN CaseInsensitive
+    _In_ const STRING *String1,
+    _In_ const STRING *String2,
+    _In_ BOOLEAN CaseInsensitive
 );
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
+_Must_inspect_result_
 NTSYSAPI
 BOOLEAN
 NTAPI
 RtlPrefixUnicodeString(
-    PCUNICODE_STRING String1,
-    PCUNICODE_STRING String2,
-    BOOLEAN CaseInsensitive
+    _In_ PCUNICODE_STRING String1,
+    _In_ PCUNICODE_STRING String2,
+    _In_ BOOLEAN CaseInsensitive
+);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+NTSYSAPI
+VOID
+NTAPI
+RtlUpperString(
+    _Inout_ PSTRING DestinationString,
+    _In_ const STRING *SourceString
+);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+_Must_inspect_result_
+NTSYSAPI
+LONG
+NTAPI
+RtlCompareString(
+    _In_ const STRING *String1,
+    _In_ const STRING *String2,
+    _In_ BOOLEAN CaseInSensitive
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlCopyString(
+    _Out_ PSTRING DestinationString,
+    _In_opt_ const STRING *SourceString
+);
+
+_IRQL_requires_max_(PASSIVE_LEVEL)
+_Must_inspect_result_
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlEqualString(
+    _In_ const STRING *String1,
+    _In_ const STRING *String2,
+    _In_ BOOLEAN CaseInSensitive
+);
+
+_IRQL_requires_max_(APC_LEVEL)
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlAppendStringToString(
+    _Inout_ PSTRING Destination,
+    _In_ const STRING *Source
 );
 
 _IRQL_requires_max_(PASSIVE_LEVEL)
@@ -2183,7 +2253,7 @@ RtlUpcaseUnicodeString(
         PUNICODE_STRING DestinationString,
     _In_ PCUNICODE_STRING SourceString,
     _In_ BOOLEAN AllocateDestinationString
-    );
+);
 
 _IRQL_requires_max_(PASSIVE_LEVEL)
 NTSYSAPI
@@ -2215,20 +2285,22 @@ RtlFreeAnsiString(
         PANSI_STRING AnsiString
 );
 
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSYSAPI
 VOID
 NTAPI
 RtlInitAnsiString(
     _Out_ PANSI_STRING DestinationString,
-    _In_z_ PCSZ SourceString
+    _In_opt_z_ __drv_aliasesMem PCSZ SourceString
 );
 
+_IRQL_requires_max_(DISPATCH_LEVEL)
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlInitAnsiStringEx(
     _Out_ PANSI_STRING DestinationString,
-    _In_z_ PCSZ SourceString
+    _In_opt_z_ __drv_aliasesMem PCSZ SourceString
 );
 
 //
@@ -2258,13 +2330,14 @@ RtlMultiByteToUnicodeN(
     _In_ ULONG BytesInMultiByteString
 );
 
+_IRQL_requires_max_(PASSIVE_LEVEL)
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlMultiByteToUnicodeSize(
-    _Out_ PULONG UnicodeSize,
-    _In_z_ PCSTR MbString,
-    _In_ ULONG MbSize
+    _Out_ PULONG BytesInUnicodeString,
+    _In_reads_bytes_(BytesInMultiByteString) const CHAR *MultiByteString,
+    _In_ ULONG BytesInMultiByteString
 );
 
 //
@@ -2306,9 +2379,9 @@ NTAPI
 RtlQueryAtomInAtomTable(
     _In_ PRTL_ATOM_TABLE AtomTable,
     _In_ RTL_ATOM Atom,
-    _Inout_opt_ PULONG RefCount,
-    _Inout_opt_ PULONG PinCount,
-    _Inout_opt_ PWSTR AtomName,
+    _Out_opt_ PULONG RefCount,
+    _Out_opt_ PULONG PinCount,
+    _Out_opt_z_bytecap_(*NameLength) PWSTR AtomName,
     _Inout_opt_ PULONG NameLength
 );
 
@@ -2349,7 +2422,7 @@ NTSTATUS
 NTAPI
 RtlCreateProcessParameters (
     _Out_ PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
-    _In_opt_ PUNICODE_STRING ImagePathName,
+    _In_ PUNICODE_STRING ImagePathName,
     _In_opt_ PUNICODE_STRING DllPath,
     _In_opt_ PUNICODE_STRING CurrentDirectory,
     _In_opt_ PUNICODE_STRING CommandLine,
@@ -2376,21 +2449,39 @@ RtlCreateUserProcess(
     _Out_ PRTL_USER_PROCESS_INFORMATION ProcessInfo
 );
 
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCreateUserThread(
+    _In_ PVOID ThreadContext,
+    _Out_ HANDLE *OutThreadHandle,
+    _Reserved_ PVOID Reserved1,
+    _Reserved_ PVOID Reserved2,
+    _Reserved_ PVOID Reserved3,
+    _Reserved_ PVOID Reserved4,
+    _Reserved_ PVOID Reserved5,
+    _Reserved_ PVOID Reserved6,
+    _Reserved_ PVOID Reserved7,
+    _Reserved_ PVOID Reserved8
+);
+#else
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlCreateUserThread(
     _In_ HANDLE ProcessHandle,
-    _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
+    _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor,
     _In_ BOOLEAN CreateSuspended,
     _In_ ULONG StackZeroBits,
     _In_ SIZE_T StackReserve,
     _In_ SIZE_T StackCommit,
     _In_ PTHREAD_START_ROUTINE StartAddress,
     _In_ PVOID Parameter,
-    _Inout_ PHANDLE ThreadHandle,
-    _Inout_ PCLIENT_ID ClientId
+    _Out_opt_ PHANDLE ThreadHandle,
+    _Out_opt_ PCLIENT_ID ClientId
 );
+#endif
 
 NTSYSAPI
 PRTL_USER_PROCESS_PARAMETERS
@@ -2473,7 +2564,7 @@ RtlRemoteCall(
 
 NTSYSAPI
 NTSTATUS
-NTAPI
+__cdecl
 RtlSetProcessIsCritical(
     _In_ BOOLEAN NewValue,
     _Out_opt_ PBOOLEAN OldValue,
@@ -2482,7 +2573,7 @@ RtlSetProcessIsCritical(
 
 NTSYSAPI
 NTSTATUS
-NTAPI
+__cdecl
 RtlSetThreadIsCritical(
     _In_ BOOLEAN NewValue,
     _Out_opt_ PBOOLEAN OldValue,
@@ -2514,7 +2605,7 @@ NTSTATUS
 NTAPI
 RtlDeregisterWaitEx(
     _In_ HANDLE hWaitHandle,
-    _In_ HANDLE hCompletionEvent
+    _In_opt_ HANDLE hCompletionEvent
 );
 
 NTSYSAPI
@@ -2589,7 +2680,7 @@ RtlDoesFileExists_U(
 );
 
 NTSYSAPI
-ULONG
+RTL_PATH_TYPE
 NTAPI
 RtlDetermineDosPathNameType_U(
     _In_ PCWSTR Path
@@ -2626,10 +2717,10 @@ NTSYSAPI
 BOOLEAN
 NTAPI
 RtlDosPathNameToNtPathName_U(
-    _In_ PCWSTR DosPathName,
+    _In_opt_z_ PCWSTR DosPathName,
     _Out_ PUNICODE_STRING NtPathName,
-    _Out_ PCWSTR *NtFileNamePart,
-    _Out_ PRTL_RELATIVE_NAME_U DirectoryInfo
+    _Out_opt_ PCWSTR *NtFileNamePart,
+    _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo
 );
 
 NTSYSAPI
@@ -2642,13 +2733,14 @@ RtlDosPathNameToRelativeNtPathName_U(
     _Out_ PRTL_RELATIVE_NAME_U RelativeName
 );
 
+_At_(Destination->Buffer, _Out_bytecap_(Destination->MaximumLength))
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlExpandEnvironmentStrings_U(
     _In_z_ PWSTR Environment,
     _In_ PUNICODE_STRING Source,
-    _Out_ PUNICODE_STRING Destination,
+    _Inout_ PUNICODE_STRING Destination,
     _Out_ PULONG Length
 );
 
@@ -2657,7 +2749,7 @@ ULONG
 NTAPI
 RtlGetCurrentDirectory_U(
     _In_ ULONG MaximumLength,
-    _Out_z_bytecap_(MaximumLength) PWSTR Buffer
+    _Out_bytecap_(MaximumLength) PWSTR Buffer
 );
 
 NTSYSAPI
@@ -2666,8 +2758,8 @@ NTAPI
 RtlGetFullPathName_U(
     _In_ PCWSTR FileName,
     _In_ ULONG Size,
-    _In_ PWSTR Buffer,
-    _Out_ PWSTR *ShortName
+    _Out_z_bytecap_(Size) PWSTR Buffer,
+    _Out_opt_ PWSTR *ShortName
 );
 
 #if (NTDDI_VERSION >= NTDDI_WIN7)
@@ -2687,13 +2779,22 @@ NTSTATUS
 NTAPI
 RtlGetFullPathName_UstrEx(
     _In_ PUNICODE_STRING FileName,
-    _In_ PUNICODE_STRING StaticString,
-    _In_ PUNICODE_STRING DynamicString,
-    _In_ PUNICODE_STRING *StringUsed,
-    _In_ PSIZE_T FilePartSize,
-    _Out_ PBOOLEAN NameInvalid,
+    _In_opt_ PUNICODE_STRING StaticString,
+    _In_opt_ PUNICODE_STRING DynamicString,
+    _Out_opt_ PUNICODE_STRING *StringUsed,
+    _Out_opt_ PSIZE_T FilePartSize,
+    _Out_opt_ PBOOLEAN NameInvalid,
     _Out_ RTL_PATH_TYPE* PathType,
-    _Out_ PSIZE_T LengthNeeded
+    _Out_opt_ PSIZE_T LengthNeeded
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetLengthWithoutTrailingPathSeperators(
+    _Reserved_ ULONG Flags,
+    _In_ PCUNICODE_STRING PathString,
+    _Out_ PULONG Length
 );
 
 NTSYSAPI
@@ -2717,7 +2818,6 @@ RtlIsDosDeviceName_Ustr(
     _In_ PCUNICODE_STRING Name
 );
 
-
 _IRQL_requires_max_(PASSIVE_LEVEL)
 _Must_inspect_result_
 NTSYSAPI
@@ -3026,7 +3126,7 @@ NTAPI
 RtlFindNextForwardRunSet(
     _In_ PRTL_BITMAP BitMapHeader,
     _In_ ULONG FromIndex,
-    _In_ PULONG StartingRunIndex
+    _Out_ PULONG StartingRunIndex
 );
 
 NTSYSAPI
@@ -3152,7 +3252,7 @@ NTSTATUS
 NTAPI
 RtlDeleteTimerQueueEx(
     _In_ HANDLE TimerQueue,
-    _In_ HANDLE CompletionEvent
+    _In_opt_ HANDLE CompletionEvent
 );
 
 NTSYSAPI
@@ -3227,10 +3327,11 @@ ULONG
 NTAPI
 DbgPrompt(
     _In_z_ PCCH Prompt,
-    _Out_writes_bytes_(Length) PCH Response,
-    _In_ ULONG Length
+    _Out_writes_bytes_(MaximumResponseLength) PCH Response,
+    _In_ ULONG MaximumResponseLength
 );
 
+#undef DbgBreakPoint
 VOID
 NTAPI
 DbgBreakPoint(
@@ -3346,6 +3447,7 @@ RtlIsValidHandle(
     _In_ PRTL_HANDLE_TABLE_ENTRY Handle
 );
 
+_Success_(return!=FALSE)
 NTSYSAPI
 BOOLEAN
 NTAPI
@@ -3374,6 +3476,7 @@ ULONG
 NTAPI
 RtlGetNtGlobalFlags(VOID);
 
+_Success_(return!=NULL)
 NTSYSAPI
 PVOID
 NTAPI
@@ -3391,7 +3494,7 @@ RtlImageRvaToVa(
     _In_ PIMAGE_NT_HEADERS NtHeader,
     _In_ PVOID BaseAddress,
     _In_ ULONG Rva,
-    _Out_ PIMAGE_SECTION_HEADER *SectionHeader
+    _Inout_opt_ PIMAGE_SECTION_HEADER *SectionHeader
 );
 
 NTSYSAPI
@@ -3407,7 +3510,7 @@ RtlImageNtHeaderEx(
     _In_ ULONG Flags,
     _In_ PVOID BaseAddress,
     _In_ ULONGLONG Size,
-    _In_ PIMAGE_NT_HEADERS *NtHeader
+    _Out_ PIMAGE_NT_HEADERS *NtHeader
 );
 
 NTSYSAPI
@@ -3442,7 +3545,7 @@ RtlActivateActivationContextEx(
     _In_ ULONG Flags,
     _In_ PTEB Teb,
     _In_ PVOID Context,
-    _In_ PULONG_PTR Cookie
+    _Out_ PULONG_PTR Cookie
 );
 
 NTSYSAPI
@@ -3473,15 +3576,19 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 RtlAllocateActivationContextStack(
-    _In_ PVOID *Context
+    _In_ PACTIVATION_CONTEXT_STACK *Stack
 );
 
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlCreateActivationContext(
-    _Out_ PHANDLE Handle,
-    _Inout_ PVOID ReturnedData
+    _In_ ULONG Flags,
+    _In_ PACTIVATION_CONTEXT_DATA ActivationContextData,
+    _In_ ULONG ExtraBytes,
+    _In_ PVOID NotificationRoutine,
+    _In_ PVOID NotificationContext,
+    _Out_ PACTIVATION_CONTEXT *ActCtx
 );
 
 NTSYSAPI
@@ -3509,7 +3616,14 @@ RtlDeactivateActivationContext(
 NTSYSAPI
 VOID
 NTAPI
-RtlFreeThreadActivationContextStack(void);
+RtlFreeActivationContextStack(
+    _In_ PACTIVATION_CONTEXT_STACK Stack
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeThreadActivationContextStack(VOID);
 
 NTSYSAPI
 PRTL_ACTIVATION_CONTEXT_STACK_FRAME
@@ -3549,10 +3663,20 @@ NTSTATUS
 NTAPI
 RtlQueryInformationActivationContext(
     _In_ DWORD dwFlags,
-    _In_ PVOID Context,
-    _In_ PVOID pvSubInstance,
+    _In_opt_ PVOID Context,
+    _In_opt_ PVOID pvSubInstance,
+    _In_ ULONG ulInfoClass,
+    _Out_bytecap_(cbBuffer) PVOID pvBuffer,
+    _In_opt_ SIZE_T cbBuffer,
+    _Out_opt_ SIZE_T *pcbWrittenOrRequired
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlQueryInformationActiveActivationContext(
     _In_ ULONG ulInfoClass,
-    _Out_bytecap_(cbBufer) PVOID pvBuffer,
+    _Out_bytecap_(cbBuffer) PVOID pvBuffer,
     _In_opt_ SIZE_T cbBuffer,
     _Out_opt_ SIZE_T *pcbWrittenOrRequired
 );
@@ -3587,12 +3711,14 @@ RtlWow64EnableFsRedirectionEx(
 //
 // Registry Functions
 //
+_IRQL_requires_max_(PASSIVE_LEVEL)
+_Must_inspect_result_
 NTSYSAPI
 NTSTATUS
 NTAPI
 RtlCheckRegistryKey(
     _In_ ULONG RelativeTo,
-    _In_z_ PWSTR Path
+    _In_ PWSTR Path
 );
 
 NTSYSAPI
@@ -3607,7 +3733,8 @@ NTSYSAPI
 NTSTATUS
 NTAPI
 RtlFormatCurrentUserKeyPath(
-    _Inout_ PUNICODE_STRING KeyPath
+    _Out_ _At_(KeyPath->Buffer, __drv_allocatesMem(Mem) _Post_bytecap_(KeyPath->MaximumLength) _Post_bytecount_(KeyPath->Length))
+        PUNICODE_STRING KeyPath
 );
 
 NTSYSAPI
@@ -3662,7 +3789,7 @@ NTSTATUS
 NTAPI
 RtlpNtEnumerateSubKey(
     _In_ HANDLE KeyHandle,
-    _Out_ PUNICODE_STRING SubKeyName,
+    _Inout_ PUNICODE_STRING SubKeyName,
     _In_ ULONG Index,
     _In_ ULONG Unused
 );
@@ -3733,7 +3860,7 @@ VOID
 NTAPI
 RtlInitCodePageTable(
     _In_ PUSHORT TableBase,
-    _Inout_ PCPTABLEINFO CodePageTable
+    _Out_ PCPTABLEINFO CodePageTable
 );
 
 NTSYSAPI
@@ -3936,6 +4063,8 @@ NTAPI
 RtlSetTimeZoneInformation(
     _In_ PRTL_TIME_ZONE_INFORMATION TimeZoneInformation);
 
+_Success_(return!=FALSE)
+_Must_inspect_result_
 NTSYSAPI
 BOOLEAN
 NTAPI
@@ -3944,12 +4073,14 @@ RtlTimeFieldsToTime(
     _Out_ PLARGE_INTEGER Time
 );
 
+_Success_(return != 0)
+_Must_inspect_result_
 NTSYSAPI
 BOOLEAN
 NTAPI
 RtlTimeToSecondsSince1970(
-    PLARGE_INTEGER Time,
-    _Out_ PULONG SecondsSince1970
+    _In_ PLARGE_INTEGER Time,
+    _Out_ PULONG ElapsedSeconds
 );
 
 NTSYSAPI
@@ -4057,6 +4188,7 @@ RtlUnlockBootStatusData(
 #endif
 
 #ifdef NTOS_MODE_USER
+_Must_inspect_result_
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -4064,6 +4196,15 @@ RtlGUIDFromString(
     _In_ PUNICODE_STRING GuidString,
     _Out_ GUID *Guid);
 
+_Must_inspect_result_
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlStringFromGUID(
+  _In_ REFGUID Guid,
+  _Out_ _At_(GuidString->Buffer, __drv_allocatesMem(Mem))
+    PUNICODE_STRING GuidString);
+
 NTSYSAPI
 NTSTATUS
 NTAPI
@@ -4074,6 +4215,180 @@ RtlComputeImportTableHash(
 );
 #endif
 
+//
+// MemoryStream functions
+//
+#ifdef NTOS_MODE_USER
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitMemoryStream(
+    _Out_ PRTL_MEMORY_STREAM Stream
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlInitOutOfProcessMemoryStream(
+    _Out_ PRTL_MEMORY_STREAM Stream
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlFinalReleaseOutOfProcessMemoryStream(
+    _In_ PRTL_MEMORY_STREAM Stream
+);
+
+NTSYSAPI
+HRESULT
+NTAPI
+RtlQueryInterfaceMemoryStream(
+    _In_ struct IStream *This,
+    _In_ REFIID RequestedIid,
+    _Outptr_ PVOID *ResultObject
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlAddRefMemoryStream(
+    _In_ struct IStream *This
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlReleaseMemoryStream(
+    _In_ struct IStream *This
+);
+
+NTSYSAPI
+HRESULT
+NTAPI
+RtlReadMemoryStream(
+    _In_ struct IStream *This,
+    _Out_writes_bytes_(Length) PVOID Buffer,
+    _In_ ULONG Length,
+    _Out_opt_ PULONG BytesRead
+);
+
+NTSYSAPI
+HRESULT
+NTAPI
+RtlReadOutOfProcessMemoryStream(
+    _In_ struct IStream *This,
+    _Out_writes_bytes_(Length) PVOID Buffer,
+    _In_ ULONG Length,
+    _Out_opt_ PULONG BytesRead
+);
+
+NTSYSAPI
+HRESULT
+NTAPI
+RtlSeekMemoryStream(
+    _In_ struct IStream *This,
+    _In_ LARGE_INTEGER RelativeOffset,
+    _In_ ULONG Origin,
+    _Out_opt_ PULARGE_INTEGER ResultOffset
+);
+
+NTSYSAPI
+HRESULT
+NTAPI
+RtlCopyMemoryStreamTo(
+    _In_ struct IStream *This,
+    _In_ struct IStream *Target,
+    _In_ ULARGE_INTEGER Length,
+    _Out_opt_ PULARGE_INTEGER BytesRead,
+    _Out_opt_ PULARGE_INTEGER BytesWritten
+);
+
+NTSYSAPI
+HRESULT
+NTAPI
+RtlCopyOutOfProcessMemoryStreamTo(
+    _In_ struct IStream *This,
+    _In_ struct IStream *Target,
+    _In_ ULARGE_INTEGER Length,
+    _Out_opt_ PULARGE_INTEGER BytesRead,
+    _Out_opt_ PULARGE_INTEGER BytesWritten
+);
+
+NTSYSAPI
+HRESULT
+NTAPI
+RtlStatMemoryStream(
+    _In_ struct IStream *This,
+    _Out_ struct tagSTATSTG *Stats,
+    _In_ ULONG Flags
+);
+
+// Dummy functions
+NTSYSAPI
+HRESULT
+NTAPI
+RtlWriteMemoryStream(
+    _In_ struct IStream *This,
+    _In_reads_bytes_(Length) CONST VOID *Buffer,
+    _In_ ULONG Length,
+    _Out_opt_ PULONG BytesWritten
+);
+
+NTSYSAPI
+HRESULT
+NTAPI
+RtlSetMemoryStreamSize(
+    _In_ struct IStream *This,
+    _In_ ULARGE_INTEGER NewSize
+);
+
+NTSYSAPI
+HRESULT
+NTAPI
+RtlCommitMemoryStream(
+    _In_ struct IStream *This,
+    _In_ ULONG CommitFlags
+);
+
+NTSYSAPI
+HRESULT
+NTAPI
+RtlRevertMemoryStream(
+    _In_ struct IStream *This
+);
+
+NTSYSAPI
+HRESULT
+NTAPI
+RtlLockMemoryStreamRegion(
+    _In_ struct IStream *This,
+    _In_ ULARGE_INTEGER Offset,
+    _In_ ULARGE_INTEGER Length,
+    _In_ ULONG LockType
+);
+
+NTSYSAPI
+HRESULT
+NTAPI
+RtlUnlockMemoryStreamRegion(
+    _In_ struct IStream *This,
+    _In_ ULARGE_INTEGER Offset,
+    _In_ ULARGE_INTEGER Length,
+    _In_ ULONG LockType
+);
+
+NTSYSAPI
+HRESULT
+NTAPI
+RtlCloneMemoryStream(
+    _In_ struct IStream *This,
+    _Outptr_ struct IStream **ResultStream
+);
+
+#endif // NTOS_MODE_USER
+
 #ifdef __cplusplus
 }
 #endif