From ff5bcba966372d5071c080234866e5fab23ae647 Mon Sep 17 00:00:00 2001 From: "Admiral H. Curtiss" Date: Thu, 11 May 2023 01:35:23 +0200 Subject: [PATCH] Common/MemArenaWin: Handle file mappings >= 4GB. --- Source/Core/Common/MemArenaWin.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Source/Core/Common/MemArenaWin.cpp b/Source/Core/Common/MemArenaWin.cpp index 1e2de701c5..b055477a85 100644 --- a/Source/Core/Common/MemArenaWin.cpp +++ b/Source/Core/Common/MemArenaWin.cpp @@ -97,11 +97,22 @@ MemArena::~MemArena() ReleaseSHMSegment(); } +static DWORD GetHighDWORD(u64 value) +{ + return static_cast(value >> 32); +} + +static DWORD GetLowDWORD(u64 value) +{ + return static_cast(value); +} + void MemArena::GrabSHMSegment(size_t size) { const std::string name = "dolphin-emu." + std::to_string(GetCurrentProcessId()); - m_memory_handle = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, - static_cast(size), UTF8ToTStr(name).c_str()); + m_memory_handle = + CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, GetHighDWORD(size), + GetLowDWORD(size), UTF8ToTStr(name).c_str()); } void MemArena::ReleaseSHMSegment() @@ -114,8 +125,9 @@ void MemArena::ReleaseSHMSegment() void* MemArena::CreateView(s64 offset, size_t size) { - return MapViewOfFileEx(m_memory_handle, FILE_MAP_ALL_ACCESS, 0, (DWORD)((u64)offset), size, - nullptr); + const u64 off = static_cast(offset); + return MapViewOfFileEx(m_memory_handle, FILE_MAP_ALL_ACCESS, GetHighDWORD(off), GetLowDWORD(off), + size, nullptr); } void MemArena::ReleaseView(void* view, size_t size)