From: Piotr Caban <piotr(a)codeweavers.com> --- dlls/ntdll/unix/virtual.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index 0d88315164a..ef206d58652 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -6025,7 +6025,26 @@ NTSTATUS WINAPI NtReadVirtualMemory( HANDLE process, const void *addr, void *buf { unsigned int status; - if (virtual_check_buffer_for_write( buffer, size )) + if (!virtual_check_buffer_for_write( buffer, size )) + { + status = STATUS_ACCESS_VIOLATION; + size = 0; + } + else if (process == GetCurrentProcess()) + { + __TRY + { + memmove( buffer, addr, size ); + status = STATUS_SUCCESS; + } + __EXCEPT + { + status = STATUS_PARTIAL_COPY; + size = 0; + } + __ENDTRY + } + else { SERVER_START_REQ( read_process_memory ) { @@ -6036,11 +6055,6 @@ NTSTATUS WINAPI NtReadVirtualMemory( HANDLE process, const void *addr, void *buf } SERVER_END_REQ; } - else - { - status = STATUS_ACCESS_VIOLATION; - size = 0; - } if (bytes_read) *bytes_read = size; return status; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6139