From 201aaf232b226922da1b57a0593df653d73b7857 Mon Sep 17 00:00:00 2001 From: Sam Kenny <968135+sammiq@users.noreply.github.com> Date: Mon, 11 May 2026 14:26:53 +1000 Subject: [PATCH] MapViewOfFile3 fails on PAGE_NOACCESS (#4392) --- src/core/address_space.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/core/address_space.cpp b/src/core/address_space.cpp index 722761f6b..be9e0c62e 100644 --- a/src/core/address_space.cpp +++ b/src/core/address_space.cpp @@ -257,9 +257,20 @@ struct AddressSpace::Impl { ret = VirtualProtect(ptr, size, prot, &resultvar); ASSERT_MSG(ret, "VirtualProtect failed. {}", Common::GetLastErrorMsg()); } else { - ptr = MapViewOfFile3(backing, process, reinterpret_cast(virtual_addr), - phys_addr, size, MEM_REPLACE_PLACEHOLDER, prot, nullptr, 0); - ASSERT_MSG(ptr, "MapViewOfFile3 failed. {}", Common::GetLastErrorMsg()); + if (prot == PAGE_NOACCESS) { + DWORD resultvar; + ptr = MapViewOfFile3(backing, process, reinterpret_cast(virtual_addr), + phys_addr, size, MEM_REPLACE_PLACEHOLDER, PAGE_READWRITE, + nullptr, 0); + ASSERT_MSG(ptr, "MapViewOfFile3 failed. {}", Common::GetLastErrorMsg()); + bool ret = VirtualProtect(ptr, size, prot, &resultvar); + ASSERT_MSG(ret, "VirtualProtect failed. {}", Common::GetLastErrorMsg()); + } else { + ptr = + MapViewOfFile3(backing, process, reinterpret_cast(virtual_addr), + phys_addr, size, MEM_REPLACE_PLACEHOLDER, prot, nullptr, 0); + ASSERT_MSG(ptr, "MapViewOfFile3 failed. {}", Common::GetLastErrorMsg()); + } } } else { ptr =