From 54b9b41e84e6642515a5a803d5930bbd9825b505 Mon Sep 17 00:00:00 2001 From: Serge Gautherie <32623169+SergeGautherie@users.noreply.github.com> Date: Mon, 6 Oct 2025 23:28:39 +0200 Subject: [PATCH] [NTDLL][WINE][NTOS:MM] MmFlushVirtualMemory(): Pretend success (#8290) * [NTDLL][WINE] Fix *FlushVirtualMemory() parameter types * [NTOS:MM] MmFlushVirtualMemory(): Pretend success Yet, set IoStatusBlock's actual data. Based on Jira hack patch by KRosUser. Addendum to b445005c70 (0.4.15-dev-2306). CORE-19589 --- dll/ntdll/def/ntdll.spec | 4 ++-- ntoskrnl/mm/ARM3/virtual.c | 7 ++++++- sdk/include/wine/winternl.h | 4 ++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/dll/ntdll/def/ntdll.spec b/dll/ntdll/def/ntdll.spec index 00b45a76973..da3c2df3f7c 100644 --- a/dll/ntdll/def/ntdll.spec +++ b/dll/ntdll/def/ntdll.spec @@ -330,7 +330,7 @@ @ stdcall NtFlushInstructionCache(long ptr long) @ stdcall NtFlushKey(long) @ stdcall -stub -version=0x600+ NtFlushProcessWriteBuffers() -@ stdcall NtFlushVirtualMemory(long ptr ptr long) +@ stdcall NtFlushVirtualMemory(ptr ptr ptr ptr) @ stdcall NtFlushWriteBuffer() @ stdcall NtFreeUserPhysicalPages(ptr ptr ptr) @ stdcall NtFreeVirtualMemory(long ptr ptr long) @@ -1493,7 +1493,7 @@ @ stdcall ZwFlushInstructionCache(long ptr long) @ stdcall ZwFlushKey(long) @ stdcall -stub -version=0x600+ ZwFlushProcessWriteBuffers() -@ stdcall ZwFlushVirtualMemory(long ptr ptr long) +@ stdcall ZwFlushVirtualMemory(ptr ptr ptr ptr) @ stdcall ZwFlushWriteBuffer() @ stdcall ZwFreeUserPhysicalPages(ptr ptr ptr) @ stdcall ZwFreeVirtualMemory(long ptr ptr long) diff --git a/ntoskrnl/mm/ARM3/virtual.c b/ntoskrnl/mm/ARM3/virtual.c index 719ea65b6d3..ac99dc12420 100644 --- a/ntoskrnl/mm/ARM3/virtual.c +++ b/ntoskrnl/mm/ARM3/virtual.c @@ -1348,7 +1348,12 @@ MmFlushVirtualMemory(IN PEPROCESS Process, UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + // Report actual state. + IoStatusBlock->Status = STATUS_NOT_IMPLEMENTED; + IoStatusBlock->Information = 0; + + // Pretend success. + return STATUS_SUCCESS; // STATUS_NOT_IMPLEMENTED } ULONG diff --git a/sdk/include/wine/winternl.h b/sdk/include/wine/winternl.h index eb42bfb968a..1cc7cce169b 100644 --- a/sdk/include/wine/winternl.h +++ b/sdk/include/wine/winternl.h @@ -4645,7 +4645,11 @@ NTSYSAPI NTSTATUS WINAPI NtFlushBuffersFileEx(HANDLE,ULONG,void*,ULONG,IO_STATU NTSYSAPI NTSTATUS WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,SIZE_T); NTSYSAPI NTSTATUS WINAPI NtFlushKey(HANDLE); NTSYSAPI NTSTATUS WINAPI NtFlushProcessWriteBuffers(void); +#ifndef __REACTOS__ NTSYSAPI NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,SIZE_T*,ULONG); +#else +NTSYSAPI NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,SIZE_T*,IO_STATUS_BLOCK*); +#endif NTSYSAPI NTSTATUS WINAPI NtFlushWriteBuffer(VOID); NTSYSAPI NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG); NTSYSAPI NTSTATUS WINAPI NtFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);