ntdll: Factor out in_wow64_call().

Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura 2021-12-10 11:27:31 -06:00 committed by Alexandre Julliard
parent 3821e03917
commit 7bea24f6e1
1 changed files with 12 additions and 7 deletions

View File

@ -342,11 +342,19 @@ static inline NTSTATUS wait_async( HANDLE handle, BOOL alertable )
return NtWaitForSingleObject( handle, alertable, NULL ); return NtWaitForSingleObject( handle, alertable, NULL );
} }
static inline BOOL in_wow64_call(void)
{
#ifdef _WIN64
return !!NtCurrentTeb()->WowTebOffset;
#endif
return FALSE;
}
static inline void set_async_iosb( client_ptr_t iosb, NTSTATUS status, ULONG_PTR info ) static inline void set_async_iosb( client_ptr_t iosb, NTSTATUS status, ULONG_PTR info )
{ {
if (!iosb) return; if (!iosb) return;
#ifdef _WIN64
if (NtCurrentTeb()->WowTebOffset) if (in_wow64_call())
{ {
struct iosb32 struct iosb32
{ {
@ -357,7 +365,6 @@ static inline void set_async_iosb( client_ptr_t iosb, NTSTATUS status, ULONG_PTR
io->Information = info; io->Information = info;
} }
else else
#endif
{ {
IO_STATUS_BLOCK *io = wine_server_get_ptr( iosb ); IO_STATUS_BLOCK *io = wine_server_get_ptr( iosb );
#ifdef NONAMELESSUNION #ifdef NONAMELESSUNION
@ -371,12 +378,10 @@ static inline void set_async_iosb( client_ptr_t iosb, NTSTATUS status, ULONG_PTR
static inline client_ptr_t iosb_client_ptr( IO_STATUS_BLOCK *io ) static inline client_ptr_t iosb_client_ptr( IO_STATUS_BLOCK *io )
{ {
#ifdef _WIN64
#ifdef NONAMELESSUNION #ifdef NONAMELESSUNION
if (io && NtCurrentTeb()->WowTebOffset) return wine_server_client_ptr( io->u.Pointer ); if (io && in_wow64_call()) return wine_server_client_ptr( io->u.Pointer );
#else #else
if (io && NtCurrentTeb()->WowTebOffset) return wine_server_client_ptr( io->Pointer ); if (io && in_wow64_call()) return wine_server_client_ptr( io->Pointer );
#endif
#endif #endif
return wine_server_client_ptr( io ); return wine_server_client_ptr( io );
} }