#endif /* RTL_USE_AVL_TABLES */
-#endif /* NTOS_MODE_USER */
-
//
// Error and Exception Functions
//
_In_ PRTLP_UNHANDLED_EXCEPTION_FILTER TopLevelExceptionFilter
);
+#endif /* NTOS_MODE_USER */
+
NTSYSAPI
VOID
NTAPI
_In_ PVOID HeapHandle,
_In_ ULONG Flags,
_In_ PVOID BaseAddress,
- _Out_opt_ PVOID *UserValue,
+ _Inout_opt_ PVOID *UserValue,
_Out_opt_ PULONG UserFlags
);
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
_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
RtlValidateHeap(
_In_ HANDLE Heap,
_In_ ULONG Flags,
- _In_ PVOID P
+ _In_opt_ PVOID P
);
NTSYSAPI
_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
_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
_In_ PLARGE_INTEGER Value,
_In_ ULONG Base,
_In_ ULONG Length,
- _Inout_ PCHAR String
+ _Out_ PCHAR String
);
NTSYSAPI
_In_ ULONG Value,
_In_ ULONG Base,
_In_ ULONG Length,
- _Inout_ PCHAR String
+ _Out_ PCHAR String
);
NTSYSAPI
_IRQL_requires_max_(PASSIVE_LEVEL)
_Must_inspect_result_
+//_At_(DestinationString->Buffer, _Post_bytecount_(DestinationString->Length))
NTSYSAPI
NTSTATUS
NTAPI
_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
BOOLEAN
NTAPI
RtlPrefixString(
- PCANSI_STRING String1,
- PCANSI_STRING String2,
+ PSTRING String1,
+ PSTRING String2,
BOOLEAN CaseInsensitive
);
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
);
//
_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
);
//
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
);
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,
_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
NTAPI
RtlDeregisterWaitEx(
_In_ HANDLE hWaitHandle,
- _In_ HANDLE hCompletionEvent
+ _In_opt_ HANDLE hCompletionEvent
);
NTSYSAPI
);
NTSYSAPI
-ULONG
+RTL_PATH_TYPE
NTAPI
RtlDetermineDosPathNameType_U(
_In_ PCWSTR Path
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
_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
);
NTAPI
RtlGetCurrentDirectory_U(
_In_ ULONG MaximumLength,
- _Out_z_bytecap_(MaximumLength) PWSTR Buffer
+ _Out_bytecap_(MaximumLength) PWSTR Buffer
);
NTSYSAPI
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)
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
+RtlGetLengthWithoutTrailingPathSeparators(
+ _In_ ULONG Flags,
+ _In_ PCUNICODE_STRING PathString,
+ _Out_ PULONG Length
);
NTSYSAPI
_In_ PCUNICODE_STRING Name
);
-
_IRQL_requires_max_(PASSIVE_LEVEL)
_Must_inspect_result_
NTSYSAPI
RtlFindNextForwardRunSet(
_In_ PRTL_BITMAP BitMapHeader,
_In_ ULONG FromIndex,
- _In_ PULONG StartingRunIndex
+ _Out_ PULONG StartingRunIndex
);
NTSYSAPI
NTAPI
RtlDeleteTimerQueueEx(
_In_ HANDLE TimerQueue,
- _In_ HANDLE CompletionEvent
+ _In_opt_ HANDLE CompletionEvent
);
NTSYSAPI
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(
_In_ PRTL_HANDLE_TABLE_ENTRY Handle
);
+_Success_(return!=FALSE)
NTSYSAPI
BOOLEAN
NTAPI
NTAPI
RtlGetNtGlobalFlags(VOID);
+_Success_(return!=NULL)
NTSYSAPI
PVOID
NTAPI
_In_ PIMAGE_NT_HEADERS NtHeader,
_In_ PVOID BaseAddress,
_In_ ULONG Rva,
- _Out_ PIMAGE_SECTION_HEADER *SectionHeader
+ _Inout_opt_ PIMAGE_SECTION_HEADER *SectionHeader
);
NTSYSAPI
_In_ ULONG Flags,
_In_ PVOID BaseAddress,
_In_ ULONGLONG Size,
- _In_ PIMAGE_NT_HEADERS *NtHeader
+ _Out_ PIMAGE_NT_HEADERS *NtHeader
);
NTSYSAPI
_In_ ULONG Flags,
_In_ PTEB Teb,
_In_ PVOID Context,
- _In_ PULONG_PTR Cookie
+ _Out_ PULONG_PTR Cookie
);
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
NTSYSAPI
VOID
NTAPI
-RtlFreeThreadActivationContextStack(void);
+RtlFreeActivationContextStack(
+ _In_ PACTIVATION_CONTEXT_STACK Stack
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlFreeThreadActivationContextStack(VOID);
NTSYSAPI
PRTL_ACTIVATION_CONTEXT_STACK_FRAME
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
);
//
// 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
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
NTAPI
RtlpNtEnumerateSubKey(
_In_ HANDLE KeyHandle,
- _Out_ PUNICODE_STRING SubKeyName,
+ _Inout_ PUNICODE_STRING SubKeyName,
_In_ ULONG Index,
_In_ ULONG Unused
);
NTAPI
RtlInitCodePageTable(
_In_ PUSHORT TableBase,
- _Inout_ PCPTABLEINFO CodePageTable
+ _Out_ PCPTABLEINFO CodePageTable
);
NTSYSAPI
RtlSetTimeZoneInformation(
_In_ PRTL_TIME_ZONE_INFORMATION TimeZoneInformation);
+_Success_(return!=FALSE)
+_Must_inspect_result_
NTSYSAPI
BOOLEAN
NTAPI
_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
#endif
#ifdef NTOS_MODE_USER
+_Must_inspect_result_
NTSYSAPI
NTSTATUS
NTAPI
_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