#endif /* RTL_USE_AVL_TABLES */
//
-// Error and Exception Functions
+// Exception and Error Functions
//
NTSYSAPI
PVOID
_In_ PRTLP_UNHANDLED_EXCEPTION_FILTER TopLevelExceptionFilter
);
-#endif /* NTOS_MODE_USER */
-
NTSYSAPI
-VOID
+LONG
NTAPI
-RtlCaptureContext(
- _Out_ PCONTEXT ContextRecord
+RtlUnhandledExceptionFilter(
+ _In_ struct _EXCEPTION_POINTERS* ExceptionInfo
);
NTSYSAPI
_In_ PVOID Pointer
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetLastNtStatus(
+ VOID
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetLastWin32Error(
+ VOID
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlSetLastWin32Error(
+ _In_ ULONG LastError
+);
+
+NTSYSAPI
+VOID
+NTAPI
+RtlSetLastWin32ErrorAndNtStatusFromNtStatus(
+ _In_ NTSTATUS Status
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlSetThreadErrorMode(
+ _In_ ULONG NewMode,
+ _Out_opt_ PULONG OldMode
+);
+
+NTSYSAPI
+ULONG
+NTAPI
+RtlGetThreadErrorMode(
+ VOID
+);
+
+#endif /* NTOS_MODE_USER */
+
+NTSYSAPI
+VOID
+NTAPI
+RtlCaptureContext(
+ _Out_ PCONTEXT ContextRecord
+);
+
NTSYSAPI
BOOLEAN
NTAPI
);
NTSYSAPI
-VOID
+NTSTATUS
NTAPI
-RtlSetLastWin32ErrorAndNtStatusFromNtStatus(
- _In_ NTSTATUS Status
+RtlMapSecurityErrorToNtStatus(
+ _In_ ULONG SecurityError
);
NTSYSAPI
_In_ NTSTATUS Status
);
-NTSYSAPI
-LONG
-NTAPI
-RtlUnhandledExceptionFilter(
- _In_ struct _EXCEPTION_POINTERS* ExceptionInfo
-);
-
NTSYSAPI
VOID
NTAPI
#endif // NTOS_MODE_USER
+#define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
+
NTSYSAPI
SIZE_T
NTAPI
NTSTATUS
NTAPI
RtlCopySidAndAttributesArray(
- ULONG Count,
- PSID_AND_ATTRIBUTES Src,
- ULONG SidAreaSize,
- PSID_AND_ATTRIBUTES Dest,
- PVOID SidArea,
- PVOID* RemainingSidArea,
- PULONG RemainingSidAreaSize
+ _In_ ULONG Count,
+ _In_ PSID_AND_ATTRIBUTES Src,
+ _In_ ULONG SidAreaSize,
+ _In_ PSID_AND_ATTRIBUTES Dest,
+ _In_ PSID SidArea,
+ _Out_ PSID* RemainingSidArea,
+ _Out_ PULONG RemainingSidAreaSize
);
_IRQL_requires_max_(APC_LEVEL)
NTAPI
RtlLengthRequiredSid(IN ULONG SubAuthorityCount);
+_IRQL_requires_max_(APC_LEVEL)
+NTSYSAPI
+ULONG
+NTAPI
+RtlLengthSecurityDescriptor(
+ _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
+
NTSYSAPI
ULONG
NTAPI
BOOLEAN
NTAPI
RtlIsTextUnicode(
- PVOID Buffer,
- INT Length,
- INT *Flags
+ _In_ CONST VOID* Buffer,
+ _In_ INT Size,
+ _Inout_opt_ INT* Flags
);
_IRQL_requires_max_(PASSIVE_LEVEL)
_In_ PCUNICODE_STRING String
);
+#define RTL_SKIP_BUFFER_COPY 0x00000001
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlpEnsureBufferSize(
+ _In_ ULONG Flags,
+ _Inout_ PRTL_BUFFER Buffer,
+ _In_ SIZE_T RequiredSize
+);
+
+#ifdef NTOS_MODE_USER
+
+FORCEINLINE
+VOID
+RtlInitBuffer(
+ _Inout_ PRTL_BUFFER Buffer,
+ _In_ PUCHAR Data,
+ _In_ ULONG DataSize
+)
+{
+ Buffer->Buffer = Buffer->StaticBuffer = Data;
+ Buffer->Size = Buffer->StaticSize = DataSize;
+ Buffer->ReservedForAllocatedSize = 0;
+ Buffer->ReservedForIMalloc = NULL;
+}
+
+FORCEINLINE
+NTSTATUS
+RtlEnsureBufferSize(
+ _In_ ULONG Flags,
+ _Inout_ PRTL_BUFFER Buffer,
+ _In_ ULONG RequiredSize
+)
+{
+ if (Buffer && RequiredSize <= Buffer->Size)
+ return STATUS_SUCCESS;
+ return RtlpEnsureBufferSize(Flags, Buffer, RequiredSize);
+}
+
+FORCEINLINE
+VOID
+RtlFreeBuffer(
+ _Inout_ PRTL_BUFFER Buffer
+)
+{
+ if (Buffer->Buffer != Buffer->StaticBuffer && Buffer->Buffer)
+ RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer->Buffer);
+ Buffer->Buffer = Buffer->StaticBuffer;
+ Buffer->Size = Buffer->StaticSize;
+}
+
+#endif /* NTOS_MODE_USER */
+
//
// Ansi String Functions
//
VOID
);
-#define NtCurrentPeb() (NtCurrentTeb()->ProcessEnvironmentBlock)
//
// Thread Pool Functions
_Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo
);
+
+#define RTL_UNCHANGED_UNK_PATH 1
+#define RTL_CONVERTED_UNC_PATH 2
+#define RTL_CONVERTED_NT_PATH 3
+#define RTL_UNCHANGED_DOS_PATH 4
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlNtPathNameToDosPathName(
+ _In_ ULONG Flags,
+ _Inout_ PRTL_UNICODE_STRING_BUFFER Path,
+ _Out_opt_ PULONG PathType,
+ _Out_opt_ PULONG Unknown
+);
+
+
NTSYSAPI
BOOLEAN
NTAPI