@@ -286,6 +286,7 @@ pub const STATUS_INVALID_PARAMETER: NTSTATUS = 0xc000000d_u32 as _;
286286
287287pub const STATUS_PENDING : NTSTATUS = 0x103 as _ ;
288288pub const STATUS_END_OF_FILE : NTSTATUS = 0xC0000011_u32 as _ ;
289+ #[ cfg( target_arch = "x86" ) ]
289290pub const STATUS_NOT_IMPLEMENTED : NTSTATUS = 0xC0000002_u32 as _ ;
290291
291292// Equivalent to the `NT_SUCCESS` C preprocessor macro.
@@ -843,7 +844,8 @@ if #[cfg(not(target_vendor = "uwp"))] {
843844 ) -> BOOL ;
844845 }
845846
846- #[ link( name = "userenv" ) ]
847+ #[ cfg_attr( not( target_arch = "x86" ) , link( name = "userenv" , kind = "raw-dylib" ) ) ]
848+ #[ cfg_attr( target_arch = "x86" , link( name = "userenv" ) ) ]
847849 extern "system" {
848850 // Allowed but unused by UWP
849851 pub fn GetUserProfileDirectoryW (
@@ -1158,7 +1160,8 @@ extern "system" {
11581160 pub fn GetFileAttributesW ( lpFileName : LPCWSTR ) -> DWORD ;
11591161}
11601162
1161- #[ link( name = "ws2_32" ) ]
1163+ #[ cfg_attr( not( target_arch = "x86" ) , link( name = "ws2_32" , kind = "raw-dylib" ) ) ]
1164+ #[ cfg_attr( target_arch = "x86" , link( name = "ws2_32" ) ) ]
11621165extern "system" {
11631166 pub fn WSAStartup ( wVersionRequested : WORD , lpWSAData : LPWSADATA ) -> c_int ;
11641167 pub fn WSACleanup ( ) -> c_int ;
@@ -1251,7 +1254,8 @@ extern "system" {
12511254 ) -> c_int ;
12521255}
12531256
1254- #[ link( name = "bcrypt" ) ]
1257+ #[ cfg_attr( not( target_arch = "x86" ) , link( name = "bcrypt" , kind = "raw-dylib" ) ) ]
1258+ #[ cfg_attr( target_arch = "x86" , link( name = "bcrypt" ) ) ]
12551259extern "system" {
12561260 // >= Vista / Server 2008
12571261 // https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgenrandom
@@ -1270,6 +1274,47 @@ extern "system" {
12701274 pub fn BCryptCloseAlgorithmProvider ( hAlgorithm : BCRYPT_ALG_HANDLE , dwFlags : ULONG ) -> NTSTATUS ;
12711275}
12721276
1277+ #[ cfg( not( target_arch = "x86" ) ) ]
1278+ #[ link( name = "ntdll" , kind = "raw-dylib" ) ]
1279+ extern "system" {
1280+ pub fn NtCreateFile (
1281+ FileHandle : * mut HANDLE ,
1282+ DesiredAccess : ACCESS_MASK ,
1283+ ObjectAttributes : * const OBJECT_ATTRIBUTES ,
1284+ IoStatusBlock : * mut IO_STATUS_BLOCK ,
1285+ AllocationSize : * mut i64 ,
1286+ FileAttributes : ULONG ,
1287+ ShareAccess : ULONG ,
1288+ CreateDisposition : ULONG ,
1289+ CreateOptions : ULONG ,
1290+ EaBuffer : * mut c_void ,
1291+ EaLength : ULONG ,
1292+ ) -> NTSTATUS ;
1293+ pub fn NtReadFile (
1294+ FileHandle : BorrowedHandle < ' _ > ,
1295+ Event : HANDLE ,
1296+ ApcRoutine : Option < IO_APC_ROUTINE > ,
1297+ ApcContext : * mut c_void ,
1298+ IoStatusBlock : & mut IO_STATUS_BLOCK ,
1299+ Buffer : * mut crate :: mem:: MaybeUninit < u8 > ,
1300+ Length : ULONG ,
1301+ ByteOffset : Option < & LARGE_INTEGER > ,
1302+ Key : Option < & ULONG > ,
1303+ ) -> NTSTATUS ;
1304+ pub fn NtWriteFile (
1305+ FileHandle : BorrowedHandle < ' _ > ,
1306+ Event : HANDLE ,
1307+ ApcRoutine : Option < IO_APC_ROUTINE > ,
1308+ ApcContext : * mut c_void ,
1309+ IoStatusBlock : & mut IO_STATUS_BLOCK ,
1310+ Buffer : * const u8 ,
1311+ Length : ULONG ,
1312+ ByteOffset : Option < & LARGE_INTEGER > ,
1313+ Key : Option < & ULONG > ,
1314+ ) -> NTSTATUS ;
1315+ pub fn RtlNtStatusToDosError ( Status : NTSTATUS ) -> ULONG ;
1316+ }
1317+
12731318// Functions that aren't available on every version of Windows that we support,
12741319// but we still use them and just provide some form of a fallback implementation.
12751320compat_fn_with_fallback ! {
@@ -1310,6 +1355,7 @@ compat_fn_optional! {
13101355compat_fn_with_fallback ! {
13111356 pub static NTDLL : & CStr = ansi_str!( "ntdll" ) ;
13121357
1358+ #[ cfg( target_arch = "x86" ) ]
13131359 pub fn NtCreateFile (
13141360 FileHandle : * mut HANDLE ,
13151361 DesiredAccess : ACCESS_MASK ,
@@ -1325,6 +1371,7 @@ compat_fn_with_fallback! {
13251371 ) -> NTSTATUS {
13261372 STATUS_NOT_IMPLEMENTED
13271373 }
1374+ #[ cfg( target_arch = "x86" ) ]
13281375 pub fn NtReadFile (
13291376 FileHandle : BorrowedHandle <' _>,
13301377 Event : HANDLE ,
@@ -1338,6 +1385,7 @@ compat_fn_with_fallback! {
13381385 ) -> NTSTATUS {
13391386 STATUS_NOT_IMPLEMENTED
13401387 }
1388+ #[ cfg( target_arch = "x86" ) ]
13411389 pub fn NtWriteFile (
13421390 FileHandle : BorrowedHandle <' _>,
13431391 Event : HANDLE ,
@@ -1351,6 +1399,7 @@ compat_fn_with_fallback! {
13511399 ) -> NTSTATUS {
13521400 STATUS_NOT_IMPLEMENTED
13531401 }
1402+ #[ cfg( target_arch = "x86" ) ]
13541403 pub fn RtlNtStatusToDosError (
13551404 Status : NTSTATUS
13561405 ) -> ULONG {
0 commit comments