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 );
}
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 )
{
if (!iosb) return;
#ifdef _WIN64
if (NtCurrentTeb()->WowTebOffset)
if (in_wow64_call())
{
struct iosb32
{
@ -357,7 +365,6 @@ static inline void set_async_iosb( client_ptr_t iosb, NTSTATUS status, ULONG_PTR
io->Information = info;
}
else
#endif
{
IO_STATUS_BLOCK *io = wine_server_get_ptr( iosb );
#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 )
{
#ifdef _WIN64
#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
if (io && NtCurrentTeb()->WowTebOffset) return wine_server_client_ptr( io->Pointer );
#endif
if (io && in_wow64_call()) return wine_server_client_ptr( io->Pointer );
#endif
return wine_server_client_ptr( io );
}