@@ -278,6 +278,7 @@ pub const STATUS_INVALID_PARAMETER: NTSTATUS = 0xc000000d_u32 as _;
278
278
279
279
pub const STATUS_PENDING : NTSTATUS = 0x103 as _ ;
280
280
pub const STATUS_END_OF_FILE : NTSTATUS = 0xC0000011_u32 as _ ;
281
+ #[ cfg( target_arch = "x86" ) ]
281
282
pub const STATUS_NOT_IMPLEMENTED : NTSTATUS = 0xC0000002_u32 as _ ;
282
283
283
284
// Equivalent to the `NT_SUCCESS` C preprocessor macro.
@@ -825,7 +826,8 @@ if #[cfg(not(target_vendor = "uwp"))] {
825
826
) -> BOOL ;
826
827
}
827
828
828
- #[ link( name = "userenv" ) ]
829
+ #[ cfg_attr( not( target_arch = "x86" ) , link( name = "userenv" , kind = "raw-dylib" ) ) ]
830
+ #[ cfg_attr( target_arch = "x86" , link( name = "userenv" ) ) ]
829
831
extern "system" {
830
832
// Allowed but unused by UWP
831
833
pub fn GetUserProfileDirectoryW (
@@ -1130,7 +1132,8 @@ extern "system" {
1130
1132
pub fn GetFileAttributesW ( lpFileName : LPCWSTR ) -> DWORD ;
1131
1133
}
1132
1134
1133
- #[ link( name = "ws2_32" ) ]
1135
+ #[ cfg_attr( not( target_arch = "x86" ) , link( name = "ws2_32" , kind = "raw-dylib" ) ) ]
1136
+ #[ cfg_attr( target_arch = "x86" , link( name = "ws2_32" ) ) ]
1134
1137
extern "system" {
1135
1138
pub fn WSAStartup ( wVersionRequested : WORD , lpWSAData : LPWSADATA ) -> c_int ;
1136
1139
pub fn WSACleanup ( ) -> c_int ;
@@ -1223,7 +1226,8 @@ extern "system" {
1223
1226
) -> c_int ;
1224
1227
}
1225
1228
1226
- #[ link( name = "bcrypt" ) ]
1229
+ #[ cfg_attr( not( target_arch = "x86" ) , link( name = "bcrypt" , kind = "raw-dylib" ) ) ]
1230
+ #[ cfg_attr( target_arch = "x86" , link( name = "bcrypt" ) ) ]
1227
1231
extern "system" {
1228
1232
// >= Vista / Server 2008
1229
1233
// https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgenrandom
@@ -1242,6 +1246,47 @@ extern "system" {
1242
1246
pub fn BCryptCloseAlgorithmProvider ( hAlgorithm : BCRYPT_ALG_HANDLE , dwFlags : ULONG ) -> NTSTATUS ;
1243
1247
}
1244
1248
1249
+ #[ cfg( not( target_arch = "x86" ) ) ]
1250
+ #[ link( name = "ntdll" , kind = "raw-dylib" ) ]
1251
+ extern "system" {
1252
+ pub fn NtCreateFile (
1253
+ FileHandle : * mut HANDLE ,
1254
+ DesiredAccess : ACCESS_MASK ,
1255
+ ObjectAttributes : * const OBJECT_ATTRIBUTES ,
1256
+ IoStatusBlock : * mut IO_STATUS_BLOCK ,
1257
+ AllocationSize : * mut i64 ,
1258
+ FileAttributes : ULONG ,
1259
+ ShareAccess : ULONG ,
1260
+ CreateDisposition : ULONG ,
1261
+ CreateOptions : ULONG ,
1262
+ EaBuffer : * mut c_void ,
1263
+ EaLength : ULONG ,
1264
+ ) -> NTSTATUS ;
1265
+ pub fn NtReadFile (
1266
+ FileHandle : BorrowedHandle < ' _ > ,
1267
+ Event : HANDLE ,
1268
+ ApcRoutine : Option < IO_APC_ROUTINE > ,
1269
+ ApcContext : * mut c_void ,
1270
+ IoStatusBlock : & mut IO_STATUS_BLOCK ,
1271
+ Buffer : * mut crate :: mem:: MaybeUninit < u8 > ,
1272
+ Length : ULONG ,
1273
+ ByteOffset : Option < & LARGE_INTEGER > ,
1274
+ Key : Option < & ULONG > ,
1275
+ ) -> NTSTATUS ;
1276
+ pub fn NtWriteFile (
1277
+ FileHandle : BorrowedHandle < ' _ > ,
1278
+ Event : HANDLE ,
1279
+ ApcRoutine : Option < IO_APC_ROUTINE > ,
1280
+ ApcContext : * mut c_void ,
1281
+ IoStatusBlock : & mut IO_STATUS_BLOCK ,
1282
+ Buffer : * const u8 ,
1283
+ Length : ULONG ,
1284
+ ByteOffset : Option < & LARGE_INTEGER > ,
1285
+ Key : Option < & ULONG > ,
1286
+ ) -> NTSTATUS ;
1287
+ pub fn RtlNtStatusToDosError ( Status : NTSTATUS ) -> ULONG ;
1288
+ }
1289
+
1245
1290
// Functions that aren't available on every version of Windows that we support,
1246
1291
// but we still use them and just provide some form of a fallback implementation.
1247
1292
compat_fn_with_fallback ! {
@@ -1282,6 +1327,7 @@ compat_fn_optional! {
1282
1327
compat_fn_with_fallback ! {
1283
1328
pub static NTDLL : & CStr = ansi_str!( "ntdll" ) ;
1284
1329
1330
+ #[ cfg( target_arch = "x86" ) ]
1285
1331
pub fn NtCreateFile (
1286
1332
FileHandle : * mut HANDLE ,
1287
1333
DesiredAccess : ACCESS_MASK ,
@@ -1297,6 +1343,7 @@ compat_fn_with_fallback! {
1297
1343
) -> NTSTATUS {
1298
1344
STATUS_NOT_IMPLEMENTED
1299
1345
}
1346
+ #[ cfg( target_arch = "x86" ) ]
1300
1347
pub fn NtReadFile (
1301
1348
FileHandle : BorrowedHandle <' _>,
1302
1349
Event : HANDLE ,
@@ -1310,6 +1357,7 @@ compat_fn_with_fallback! {
1310
1357
) -> NTSTATUS {
1311
1358
STATUS_NOT_IMPLEMENTED
1312
1359
}
1360
+ #[ cfg( target_arch = "x86" ) ]
1313
1361
pub fn NtWriteFile (
1314
1362
FileHandle : BorrowedHandle <' _>,
1315
1363
Event : HANDLE ,
@@ -1323,6 +1371,7 @@ compat_fn_with_fallback! {
1323
1371
) -> NTSTATUS {
1324
1372
STATUS_NOT_IMPLEMENTED
1325
1373
}
1374
+ #[ cfg( target_arch = "x86" ) ]
1326
1375
pub fn RtlNtStatusToDosError (
1327
1376
Status : NTSTATUS
1328
1377
) -> ULONG {
0 commit comments