@@ -286,6 +286,7 @@ pub const STATUS_INVALID_PARAMETER: NTSTATUS = 0xc000000d_u32 as _;
286
286
287
287
pub const STATUS_PENDING : NTSTATUS = 0x103 as _ ;
288
288
pub const STATUS_END_OF_FILE : NTSTATUS = 0xC0000011_u32 as _ ;
289
+ #[ cfg( target_arch = "x86" ) ]
289
290
pub const STATUS_NOT_IMPLEMENTED : NTSTATUS = 0xC0000002_u32 as _ ;
290
291
291
292
// Equivalent to the `NT_SUCCESS` C preprocessor macro.
@@ -843,7 +844,8 @@ if #[cfg(not(target_vendor = "uwp"))] {
843
844
) -> BOOL ;
844
845
}
845
846
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" ) ) ]
847
849
extern "system" {
848
850
// Allowed but unused by UWP
849
851
pub fn GetUserProfileDirectoryW (
@@ -1158,7 +1160,8 @@ extern "system" {
1158
1160
pub fn GetFileAttributesW ( lpFileName : LPCWSTR ) -> DWORD ;
1159
1161
}
1160
1162
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" ) ) ]
1162
1165
extern "system" {
1163
1166
pub fn WSAStartup ( wVersionRequested : WORD , lpWSAData : LPWSADATA ) -> c_int ;
1164
1167
pub fn WSACleanup ( ) -> c_int ;
@@ -1251,7 +1254,8 @@ extern "system" {
1251
1254
) -> c_int ;
1252
1255
}
1253
1256
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" ) ) ]
1255
1259
extern "system" {
1256
1260
// >= Vista / Server 2008
1257
1261
// https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgenrandom
@@ -1270,6 +1274,47 @@ extern "system" {
1270
1274
pub fn BCryptCloseAlgorithmProvider ( hAlgorithm : BCRYPT_ALG_HANDLE , dwFlags : ULONG ) -> NTSTATUS ;
1271
1275
}
1272
1276
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
+
1273
1318
// Functions that aren't available on every version of Windows that we support,
1274
1319
// but we still use them and just provide some form of a fallback implementation.
1275
1320
compat_fn_with_fallback ! {
@@ -1310,6 +1355,7 @@ compat_fn_optional! {
1310
1355
compat_fn_with_fallback ! {
1311
1356
pub static NTDLL : & CStr = ansi_str!( "ntdll" ) ;
1312
1357
1358
+ #[ cfg( target_arch = "x86" ) ]
1313
1359
pub fn NtCreateFile (
1314
1360
FileHandle : * mut HANDLE ,
1315
1361
DesiredAccess : ACCESS_MASK ,
@@ -1325,6 +1371,7 @@ compat_fn_with_fallback! {
1325
1371
) -> NTSTATUS {
1326
1372
STATUS_NOT_IMPLEMENTED
1327
1373
}
1374
+ #[ cfg( target_arch = "x86" ) ]
1328
1375
pub fn NtReadFile (
1329
1376
FileHandle : BorrowedHandle <' _>,
1330
1377
Event : HANDLE ,
@@ -1338,6 +1385,7 @@ compat_fn_with_fallback! {
1338
1385
) -> NTSTATUS {
1339
1386
STATUS_NOT_IMPLEMENTED
1340
1387
}
1388
+ #[ cfg( target_arch = "x86" ) ]
1341
1389
pub fn NtWriteFile (
1342
1390
FileHandle : BorrowedHandle <' _>,
1343
1391
Event : HANDLE ,
@@ -1351,6 +1399,7 @@ compat_fn_with_fallback! {
1351
1399
) -> NTSTATUS {
1352
1400
STATUS_NOT_IMPLEMENTED
1353
1401
}
1402
+ #[ cfg( target_arch = "x86" ) ]
1354
1403
pub fn RtlNtStatusToDosError (
1355
1404
Status : NTSTATUS
1356
1405
) -> ULONG {
0 commit comments