mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2026-06-03 14:14:59 -06:00
Properly handle file mmaps with offsets
Pretty easy fix to perform while I'm here, so I might as well include it.
This commit is contained in:
parent
a0b3ed30fc
commit
e5e81e1d52
@ -242,7 +242,14 @@ struct AddressSpace::Impl {
|
|||||||
ptr = VirtualAlloc2(process, reinterpret_cast<PVOID>(virtual_addr), size,
|
ptr = VirtualAlloc2(process, reinterpret_cast<PVOID>(virtual_addr), size,
|
||||||
MEM_RESERVE | MEM_COMMIT | MEM_REPLACE_PLACEHOLDER,
|
MEM_RESERVE | MEM_COMMIT | MEM_REPLACE_PLACEHOLDER,
|
||||||
PAGE_READWRITE, nullptr, 0);
|
PAGE_READWRITE, nullptr, 0);
|
||||||
bool ret = ReadFile(backing, ptr, size, &resultvar, NULL);
|
|
||||||
|
// phys_addr serves as an offset for file mmaps.
|
||||||
|
// Create an OVERLAPPED with the offset, then supply that to ReadFile
|
||||||
|
OVERLAPPED param{};
|
||||||
|
// Offset is the least-significant 32 bits, OffsetHigh is the most-significant.
|
||||||
|
param.Offset = phys_addr & 0xffffffffull;
|
||||||
|
param.OffsetHigh = phys_addr & 0xffffffff00000000ull;
|
||||||
|
bool ret = ReadFile(backing, ptr, size, &resultvar, ¶m);
|
||||||
ASSERT_MSG(ret, "ReadFile failed. {}", Common::GetLastErrorMsg());
|
ASSERT_MSG(ret, "ReadFile failed. {}", Common::GetLastErrorMsg());
|
||||||
ret = VirtualProtect(ptr, size, prot, &resultvar);
|
ret = VirtualProtect(ptr, size, prot, &resultvar);
|
||||||
ASSERT_MSG(ret, "VirtualProtect failed. {}", Common::GetLastErrorMsg());
|
ASSERT_MSG(ret, "VirtualProtect failed. {}", Common::GetLastErrorMsg());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user