Module: wine Branch: master Commit: 77337f7dd3a4ffe80d9fabb7a5bea40913ed6f90 URL: https://gitlab.winehq.org/wine/wine/-/commit/77337f7dd3a4ffe80d9fabb7a5bea40...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Jul 8 12:45:12 2024 +0200
wow64: Add NtReadFile CPU backend notifications.
---
dlls/ntdll/tests/wow64.c | 2 -- dlls/wow64/file.c | 2 ++ dlls/wow64/syscall.c | 2 ++ dlls/wow64/wow64_private.h | 1 + 4 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/tests/wow64.c b/dlls/ntdll/tests/wow64.c index fcd10df92a0..bae012fec0c 100644 --- a/dlls/ntdll/tests/wow64.c +++ b/dlls/ntdll/tests/wow64.c @@ -1818,14 +1818,12 @@ static void test_notifications( HMODULE module, CROSS_PROCESS_WORK_LIST *list ) reset_results( results ); status = NtReadFile( file, 0, NULL, NULL, &io, buffer, sizeof(buffer), NULL, NULL ); ok( !status, "NtReadFile failed %lx\n", status ); - todo_wine expect_notifications( results, 2, expect );
status = NtReadFile( (HANDLE)0xdead, 0, NULL, NULL, &io, buffer, sizeof(buffer), NULL, NULL ); ok( status == STATUS_INVALID_HANDLE, "NtReadFile failed %lx\n", status ); expect[0].args[0] = expect[1].args[0] = 0xdead; expect[1].args[4] = (ULONG)STATUS_INVALID_HANDLE; - todo_wine expect_notifications( results, 2, expect );
WriteProcessMemory( GetCurrentProcess(), ptr, old_code, sizeof(old_code), NULL ); diff --git a/dlls/wow64/file.c b/dlls/wow64/file.c index 5f7ab9539d4..bdc9f4f2b2c 100644 --- a/dlls/wow64/file.c +++ b/dlls/wow64/file.c @@ -657,8 +657,10 @@ NTSTATUS WINAPI wow64_NtReadFile( UINT *args ) IO_STATUS_BLOCK io; NTSTATUS status;
+ if (pBTCpuNotifyReadFile) pBTCpuNotifyReadFile( handle, buffer, len, FALSE, 0 ); status = NtReadFile( handle, event, apc_32to64( apc ), apc_param_32to64( apc, apc_param ), iosb_32to64( &io, io32 ), buffer, len, offset, key ); + if (pBTCpuNotifyReadFile) pBTCpuNotifyReadFile( handle, buffer, len, TRUE, status ); put_iosb( io32, &io ); return status; } diff --git a/dlls/wow64/syscall.c b/dlls/wow64/syscall.c index b4e8cf2a3e0..c436a2e1ea3 100644 --- a/dlls/wow64/syscall.c +++ b/dlls/wow64/syscall.c @@ -111,6 +111,7 @@ void (WINAPI *pBTCpuNotifyMemoryAlloc)( void *, SIZE_T, ULONG, ULONG, BOOL, void (WINAPI *pBTCpuNotifyMemoryDirty)( void *, SIZE_T ) = NULL; void (WINAPI *pBTCpuNotifyMemoryFree)( void *, SIZE_T, ULONG, BOOL, NTSTATUS ) = NULL; void (WINAPI *pBTCpuNotifyMemoryProtect)( void *, SIZE_T, ULONG, BOOL, NTSTATUS ) = NULL; +void (WINAPI *pBTCpuNotifyReadFile)( HANDLE, void *, SIZE_T, BOOL, NTSTATUS ) = NULL; void (WINAPI *pBTCpuNotifyUnmapViewOfSection)( void *, BOOL, NTSTATUS ) = NULL; NTSTATUS (WINAPI *pBTCpuResetToConsistentState)( EXCEPTION_POINTERS * ) = NULL; void (WINAPI *pBTCpuUpdateProcessorInformation)( SYSTEM_CPU_INFORMATION * ) = NULL; @@ -810,6 +811,7 @@ static DWORD WINAPI process_init( RTL_RUN_ONCE *once, void *param, void **contex GET_PTR( BTCpuNotifyMemoryDirty ); GET_PTR( BTCpuNotifyMemoryFree ); GET_PTR( BTCpuNotifyMemoryProtect ); + GET_PTR( BTCpuNotifyReadFile ); GET_PTR( BTCpuNotifyUnmapViewOfSection ); GET_PTR( BTCpuUpdateProcessorInformation ); GET_PTR( BTCpuThreadTerm ); diff --git a/dlls/wow64/wow64_private.h b/dlls/wow64/wow64_private.h index b55e847c04c..d6a8c740ba4 100644 --- a/dlls/wow64/wow64_private.h +++ b/dlls/wow64/wow64_private.h @@ -46,6 +46,7 @@ extern void (WINAPI *pBTCpuNotifyMemoryAlloc)( void *, SIZE_T, ULONG, ULONG, extern void (WINAPI *pBTCpuNotifyMemoryDirty)( void *, SIZE_T ); extern void (WINAPI *pBTCpuNotifyMemoryFree)( void *, SIZE_T, ULONG, BOOL, NTSTATUS ); extern void (WINAPI *pBTCpuNotifyMemoryProtect)( void *, SIZE_T, ULONG, BOOL, NTSTATUS ); +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 );