Module: wine Branch: master Commit: fee260cef756657c1019db67ab21380f36033074 URL: https://gitlab.winehq.org/wine/wine/-/commit/fee260cef756657c1019db67ab21380...
Author: Elizabeth Figura zfigura@codeweavers.com Date: Sat Jun 25 15:49:31 2022 -0500
ntdll: Handle WoW64 file handles in sync_ioctl().
---
dlls/ntdll/unix/file.c | 3 +++ dlls/ntdll/unix/unix_private.h | 16 +++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c index 87afc20c48d..8415478c046 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c @@ -6177,8 +6177,11 @@ NTSTATUS WINAPI NtDeviceIoControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUT /* helper for internal ioctl calls */ NTSTATUS sync_ioctl( HANDLE file, ULONG code, void *in_buffer, ULONG in_size, void *out_buffer, ULONG out_size ) { + IO_STATUS_BLOCK32 io32; IO_STATUS_BLOCK io;
+ /* the 32-bit iosb is filled for overlapped file handles */ + io.Pointer = &io32; return NtDeviceIoControlFile( file, NULL, NULL, NULL, &io, code, in_buffer, in_size, out_buffer, out_size ); }
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h index 232f97490a1..2e0477e42e0 100644 --- a/dlls/ntdll/unix/unix_private.h +++ b/dlls/ntdll/unix/unix_private.h @@ -31,6 +31,16 @@
struct msghdr;
+typedef struct +{ + union + { + NTSTATUS Status; + ULONG Pointer; + }; + ULONG Information; +} IO_STATUS_BLOCK32; + #ifdef __i386__ static const WORD current_machine = IMAGE_FILE_MACHINE_I386; #elif defined(__x86_64__) @@ -462,11 +472,7 @@ static inline void set_async_iosb( client_ptr_t iosb, NTSTATUS status, ULONG_PTR
if (in_wow64_call()) { - struct iosb32 - { - NTSTATUS Status; - ULONG Information; - } *io = wine_server_get_ptr( iosb ); + IO_STATUS_BLOCK32 *io = wine_server_get_ptr( iosb ); io->Information = info; WriteRelease( &io->Status, status ); }