From 8dbeee5dcb3a36b13989a1a634387ea486cc727f Mon Sep 17 00:00:00 2001 From: André Zwing Date: Mon, 26 May 2025 22:02:27 +0200 Subject: [WOW64] Implement BTCpuNotifyMemoryFree --- wow64/wowbox64.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/wow64/wowbox64.c b/wow64/wowbox64.c index 4bfb65b4..8177681b 100644 --- a/wow64/wowbox64.c +++ b/wow64/wowbox64.c @@ -51,6 +51,10 @@ static UINT16 DECLSPEC_ALIGN(4096) unxcode[4096/sizeof(UINT16)]; typedef UINT64 unixlib_handle_t; NTSTATUS (WINAPI *__wine_unix_call_dispatcher)( unixlib_handle_t, unsigned int, void * ); +#define ROUND_ADDR(addr,mask) ((void *)((UINT_PTR)(addr) & ~(UINT_PTR)(mask))) +#define ROUND_SIZE(addr,size) (((SIZE_T)(size) + ((UINT_PTR)(addr) & page_mask) + page_mask) & ~page_mask) +static const UINT_PTR page_mask = 0xfff; + int is_addr_unaligned(uintptr_t addr) { // FIXME @@ -172,7 +176,10 @@ NTSTATUS WINAPI BTCpuGetContext(HANDLE thread, HANDLE process, void* unknown, WO void WINAPI BTCpuNotifyMemoryFree(PVOID addr, SIZE_T size, ULONG free_type) { - // NYI + if (!size) + invalidate_mapped_section( addr ); + else if (free_type & MEM_DECOMMIT) + unprotectDB((uintptr_t)ROUND_ADDR( addr, page_mask ), (DWORD64)ROUND_SIZE( addr, size ), 1); } void WINAPI BTCpuNotifyMemoryProtect(PVOID addr, SIZE_T size, DWORD new_protect) -- cgit 1.4.1