Module: wine Branch: master Commit: d27237d204ff709d9be109bc9361777b748f054a URL: https://gitlab.winehq.org/wine/wine/-/commit/d27237d204ff709d9be109bc9361777...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Jul 11 14:27:39 2024 +0200
wow64: Fix prototype for the NtTerminateThread CPU backend notification.
---
dlls/ntdll/tests/wow64.c | 12 ++++++++++++ dlls/wow64/process.c | 2 +- dlls/wow64/syscall.c | 2 +- dlls/wow64/wow64_private.h | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/tests/wow64.c b/dlls/ntdll/tests/wow64.c index 0ed151a3200..94420cdab4a 100644 --- a/dlls/ntdll/tests/wow64.c +++ b/dlls/ntdll/tests/wow64.c @@ -1829,6 +1829,18 @@ static void test_notifications( HMODULE module, CROSS_PROCESS_WORK_LIST *list ) WriteProcessMemory( GetCurrentProcess(), ptr, old_code, sizeof(old_code), NULL ); }
+ if ((ptr = hook_notification_function( module, "BTCpuThreadTerm", "ThreadTerm" ))) + { + struct expected_notification expect = { 2, { 0xdead, 0xbeef } }; + + reset_results( results ); + status = NtTerminateThread( (HANDLE)0xdead, 0xbeef ); + ok( status == STATUS_INVALID_HANDLE, "NtTerminateThread failed %lx\n", status ); + expect_notifications( results, 1, &expect ); + + WriteProcessMemory( GetCurrentProcess(), ptr, old_code, sizeof(old_code), NULL ); + } + NtClose( mapping ); NtClose( file ); VirtualFree( code, 0, MEM_RELEASE ); diff --git a/dlls/wow64/process.c b/dlls/wow64/process.c index 4a769c042c5..9b80d885b6a 100644 --- a/dlls/wow64/process.c +++ b/dlls/wow64/process.c @@ -1073,7 +1073,7 @@ NTSTATUS WINAPI wow64_NtTerminateThread( UINT *args ) HANDLE handle = get_handle( &args ); LONG exit_code = get_ulong( &args );
- if (pBTCpuThreadTerm) pBTCpuThreadTerm( handle ); + if (pBTCpuThreadTerm) pBTCpuThreadTerm( handle, exit_code );
return NtTerminateThread( handle, exit_code ); } diff --git a/dlls/wow64/syscall.c b/dlls/wow64/syscall.c index c436a2e1ea3..5ddd46ba7b9 100644 --- a/dlls/wow64/syscall.c +++ b/dlls/wow64/syscall.c @@ -115,7 +115,7 @@ void (WINAPI *pBTCpuNotifyReadFile)( HANDLE, void *, SIZE_T, BOOL, NTSTATUS void (WINAPI *pBTCpuNotifyUnmapViewOfSection)( void *, BOOL, NTSTATUS ) = NULL; NTSTATUS (WINAPI *pBTCpuResetToConsistentState)( EXCEPTION_POINTERS * ) = NULL; void (WINAPI *pBTCpuUpdateProcessorInformation)( SYSTEM_CPU_INFORMATION * ) = NULL; -void (WINAPI *pBTCpuThreadTerm)( HANDLE ) = NULL; +void (WINAPI *pBTCpuThreadTerm)( HANDLE, LONG ) = NULL;
BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, void *reserved ) { diff --git a/dlls/wow64/wow64_private.h b/dlls/wow64/wow64_private.h index d6a8c740ba4..d5278443d5d 100644 --- a/dlls/wow64/wow64_private.h +++ b/dlls/wow64/wow64_private.h @@ -49,7 +49,7 @@ extern void (WINAPI *pBTCpuNotifyMemoryProtect)( void *, SIZE_T, ULONG, BOOL extern void (WINAPI *pBTCpuNotifyReadFile)( HANDLE, void *, SIZE_T, BOOL, NTSTATUS ); extern void (WINAPI *pBTCpuNotifyUnmapViewOfSection)( void *, BOOL, NTSTATUS ); extern void (WINAPI *pBTCpuUpdateProcessorInformation)( SYSTEM_CPU_INFORMATION * ); -extern void (WINAPI *pBTCpuThreadTerm)( HANDLE ); +extern void (WINAPI *pBTCpuThreadTerm)( HANDLE, LONG );
struct object_attr64 {