[Memory] Refactor GetPhysicalAddress and use it for XMA, resolve #1448

This commit is contained in:
Triang3l
2019-08-24 17:40:59 +03:00
parent 3e6c2bb47c
commit 7e6bf8022f
6 changed files with 72 additions and 40 deletions

View File

@@ -502,13 +502,11 @@ dword_result_t MmGetPhysicalAddress(dword_t base_address) {
// _In_ PVOID BaseAddress
// );
// base_address = result of MmAllocatePhysicalMemory.
assert_true(base_address >= 0xA0000000);
uint32_t physical_address = base_address & 0x1FFFFFFF;
if (base_address >= 0xE0000000) {
physical_address += 0x1000;
uint32_t physical_address = kernel_memory()->GetPhysicalAddress(base_address);
assert_true(physical_address != UINT32_MAX);
if (physical_address == UINT32_MAX) {
physical_address = 0;
}
return physical_address;
}
DECLARE_XBOXKRNL_EXPORT1(MmGetPhysicalAddress, kMemory, kImplemented);