From 34fafd363ca46802c0e9581353511cfc7be7e4ae Mon Sep 17 00:00:00 2001 From: Chris Denton Date: Tue, 7 Jun 2022 21:22:53 +0100 Subject: [PATCH] Windows: No panic if function not (yet) available In some situations it is possible for required functions to be called before they've had a chance to be loaded. Therefore, we make it possible to recover from this situation simply by looking at error codes. --- library/std/src/sys/windows/c.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/library/std/src/sys/windows/c.rs b/library/std/src/sys/windows/c.rs index 27776fdf533ee..5469487df1eed 100644 --- a/library/std/src/sys/windows/c.rs +++ b/library/std/src/sys/windows/c.rs @@ -276,6 +276,7 @@ pub const STATUS_INVALID_PARAMETER: NTSTATUS = 0xc000000d_u32 as _; pub const STATUS_PENDING: NTSTATUS = 0x103 as _; pub const STATUS_END_OF_FILE: NTSTATUS = 0xC0000011_u32 as _; +pub const STATUS_NOT_IMPLEMENTED: NTSTATUS = 0xC0000002_u32 as _; // Equivalent to the `NT_SUCCESS` C preprocessor macro. // See: https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/using-ntstatus-values @@ -1264,7 +1265,7 @@ compat_fn! { EaBuffer: *mut c_void, EaLength: ULONG ) -> NTSTATUS { - panic!("`NtCreateFile` not available"); + STATUS_NOT_IMPLEMENTED } pub fn NtReadFile( FileHandle: BorrowedHandle<'_>, @@ -1277,7 +1278,7 @@ compat_fn! { ByteOffset: Option<&LARGE_INTEGER>, Key: Option<&ULONG> ) -> NTSTATUS { - panic!("`NtReadFile` not available"); + STATUS_NOT_IMPLEMENTED } pub fn NtWriteFile( FileHandle: BorrowedHandle<'_>, @@ -1290,12 +1291,12 @@ compat_fn! { ByteOffset: Option<&LARGE_INTEGER>, Key: Option<&ULONG> ) -> NTSTATUS { - panic!("`NtWriteFile` not available"); + STATUS_NOT_IMPLEMENTED } pub fn RtlNtStatusToDosError( Status: NTSTATUS ) -> ULONG { - panic!("`RtlNtStatusToDosError` not available"); + Status as ULONG } pub fn NtCreateKeyedEvent( KeyedEventHandle: LPHANDLE,