Skip to content

Commit 1f48216

Browse files
committed
Auto merge of rust-lang#108262 - ChrisDenton:libntdll, r=Mark-Simulacrum
Distribute libntdll.a with windows-gnu toolchains This allows the OS loader to load essential functions (e.g. read/write file) at load time instead of lazily doing so at runtime. r? libs
2 parents 4b1eb82 + af3623d commit 1f48216

File tree

1 file changed

+40
-47
lines changed
  • std/src/sys/windows

1 file changed

+40
-47
lines changed

std/src/sys/windows/c.rs

Lines changed: 40 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,6 @@ pub const STATUS_INVALID_PARAMETER: NTSTATUS = 0xc000000d_u32 as _;
296296

297297
pub const STATUS_PENDING: NTSTATUS = 0x103 as _;
298298
pub const STATUS_END_OF_FILE: NTSTATUS = 0xC0000011_u32 as _;
299-
pub const STATUS_NOT_IMPLEMENTED: NTSTATUS = 0xC0000002_u32 as _;
300299

301300
// Equivalent to the `NT_SUCCESS` C preprocessor macro.
302301
// See: https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/using-ntstatus-values
@@ -1282,6 +1281,46 @@ extern "system" {
12821281
) -> NTSTATUS;
12831282
}
12841283

1284+
#[link(name = "ntdll")]
1285+
extern "system" {
1286+
pub fn NtCreateFile(
1287+
FileHandle: *mut HANDLE,
1288+
DesiredAccess: ACCESS_MASK,
1289+
ObjectAttributes: *const OBJECT_ATTRIBUTES,
1290+
IoStatusBlock: *mut IO_STATUS_BLOCK,
1291+
AllocationSize: *mut i64,
1292+
FileAttributes: ULONG,
1293+
ShareAccess: ULONG,
1294+
CreateDisposition: ULONG,
1295+
CreateOptions: ULONG,
1296+
EaBuffer: *mut c_void,
1297+
EaLength: ULONG,
1298+
) -> NTSTATUS;
1299+
pub fn NtReadFile(
1300+
FileHandle: BorrowedHandle<'_>,
1301+
Event: HANDLE,
1302+
ApcRoutine: Option<IO_APC_ROUTINE>,
1303+
ApcContext: *mut c_void,
1304+
IoStatusBlock: &mut IO_STATUS_BLOCK,
1305+
Buffer: *mut crate::mem::MaybeUninit<u8>,
1306+
Length: ULONG,
1307+
ByteOffset: Option<&LARGE_INTEGER>,
1308+
Key: Option<&ULONG>,
1309+
) -> NTSTATUS;
1310+
pub fn NtWriteFile(
1311+
FileHandle: BorrowedHandle<'_>,
1312+
Event: HANDLE,
1313+
ApcRoutine: Option<IO_APC_ROUTINE>,
1314+
ApcContext: *mut c_void,
1315+
IoStatusBlock: &mut IO_STATUS_BLOCK,
1316+
Buffer: *const u8,
1317+
Length: ULONG,
1318+
ByteOffset: Option<&LARGE_INTEGER>,
1319+
Key: Option<&ULONG>,
1320+
) -> NTSTATUS;
1321+
pub fn RtlNtStatusToDosError(Status: NTSTATUS) -> ULONG;
1322+
}
1323+
12851324
// Functions that aren't available on every version of Windows that we support,
12861325
// but we still use them and just provide some form of a fallback implementation.
12871326
compat_fn_with_fallback! {
@@ -1322,52 +1361,6 @@ compat_fn_optional! {
13221361
compat_fn_with_fallback! {
13231362
pub static NTDLL: &CStr = ansi_str!("ntdll");
13241363

1325-
pub fn NtCreateFile(
1326-
FileHandle: *mut HANDLE,
1327-
DesiredAccess: ACCESS_MASK,
1328-
ObjectAttributes: *const OBJECT_ATTRIBUTES,
1329-
IoStatusBlock: *mut IO_STATUS_BLOCK,
1330-
AllocationSize: *mut i64,
1331-
FileAttributes: ULONG,
1332-
ShareAccess: ULONG,
1333-
CreateDisposition: ULONG,
1334-
CreateOptions: ULONG,
1335-
EaBuffer: *mut c_void,
1336-
EaLength: ULONG
1337-
) -> NTSTATUS {
1338-
STATUS_NOT_IMPLEMENTED
1339-
}
1340-
pub fn NtReadFile(
1341-
FileHandle: BorrowedHandle<'_>,
1342-
Event: HANDLE,
1343-
ApcRoutine: Option<IO_APC_ROUTINE>,
1344-
ApcContext: *mut c_void,
1345-
IoStatusBlock: &mut IO_STATUS_BLOCK,
1346-
Buffer: *mut crate::mem::MaybeUninit<u8>,
1347-
Length: ULONG,
1348-
ByteOffset: Option<&LARGE_INTEGER>,
1349-
Key: Option<&ULONG>
1350-
) -> NTSTATUS {
1351-
STATUS_NOT_IMPLEMENTED
1352-
}
1353-
pub fn NtWriteFile(
1354-
FileHandle: BorrowedHandle<'_>,
1355-
Event: HANDLE,
1356-
ApcRoutine: Option<IO_APC_ROUTINE>,
1357-
ApcContext: *mut c_void,
1358-
IoStatusBlock: &mut IO_STATUS_BLOCK,
1359-
Buffer: *const u8,
1360-
Length: ULONG,
1361-
ByteOffset: Option<&LARGE_INTEGER>,
1362-
Key: Option<&ULONG>
1363-
) -> NTSTATUS {
1364-
STATUS_NOT_IMPLEMENTED
1365-
}
1366-
pub fn RtlNtStatusToDosError(
1367-
Status: NTSTATUS
1368-
) -> ULONG {
1369-
Status as ULONG
1370-
}
13711364
pub fn NtCreateKeyedEvent(
13721365
KeyedEventHandle: LPHANDLE,
13731366
DesiredAccess: ACCESS_MASK,

0 commit comments

Comments
 (0)