diff --git a/src/xenia/base/mapped_memory_win.cc b/src/xenia/base/mapped_memory_win.cc index 3c9da7554..79e94eeaf 100644 --- a/src/xenia/base/mapped_memory_win.cc +++ b/src/xenia/base/mapped_memory_win.cc @@ -18,6 +18,11 @@ #include "xenia/base/memory.h" #include "xenia/base/platform_win.h" +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | \ + WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_GAMES) +#define XE_BASE_MAPPED_MEMORY_WIN_USE_DESKTOP_FUNCTIONS +#endif + namespace xe { class Win32MappedMemory : public MappedMemory { @@ -70,7 +75,7 @@ class Win32MappedMemory : public MappedMemory { size_t aligned_length = length + (offset - aligned_offset); UnmapViewOfFile(data_); -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#ifdef XE_BASE_MAPPED_MEMORY_WIN_USE_DESKTOP_FUNCTIONS data_ = MapViewOfFile(mapping_handle, view_access_, aligned_offset >> 32, aligned_offset & 0xFFFFFFFF, aligned_length); #else @@ -139,7 +144,7 @@ std::unique_ptr MappedMemory::Open( return nullptr; } -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#ifdef XE_BASE_MAPPED_MEMORY_WIN_USE_DESKTOP_FUNCTIONS mm->mapping_handle = CreateFileMapping( mm->file_handle, nullptr, mapping_protect, DWORD(aligned_length >> 32), DWORD(aligned_length), nullptr); @@ -152,7 +157,7 @@ std::unique_ptr MappedMemory::Open( return nullptr; } -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#ifdef XE_BASE_MAPPED_MEMORY_WIN_USE_DESKTOP_FUNCTIONS mm->data_ = reinterpret_cast(MapViewOfFile( mm->mapping_handle, view_access, DWORD(aligned_offset >> 32), DWORD(aligned_offset), aligned_length)); @@ -257,7 +262,7 @@ class Win32ChunkedMappedMemoryWriter : public ChunkedMappedMemoryWriter { return false; } -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#ifdef XE_BASE_MAPPED_MEMORY_WIN_USE_DESKTOP_FUNCTIONS mapping_handle_ = CreateFileMapping(file_handle_, nullptr, mapping_protect, DWORD(capacity_ >> 32), DWORD(capacity_), nullptr); @@ -275,11 +280,11 @@ class Win32ChunkedMappedMemoryWriter : public ChunkedMappedMemoryWriter { if (low_address_space) { bool successful = false; data_ = reinterpret_cast(0x10000000); -#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#ifndef XE_BASE_MAPPED_MEMORY_WIN_USE_DESKTOP_FUNCTIONS HANDLE process = GetCurrentProcess(); #endif for (int i = 0; i < 1000; ++i) { -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#ifdef XE_BASE_MAPPED_MEMORY_WIN_USE_DESKTOP_FUNCTIONS if (MapViewOfFileEx(mapping_handle_, view_access, 0, 0, capacity_, data_)) { successful = true; @@ -311,7 +316,7 @@ class Win32ChunkedMappedMemoryWriter : public ChunkedMappedMemoryWriter { } } } else { -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#ifdef XE_BASE_MAPPED_MEMORY_WIN_USE_DESKTOP_FUNCTIONS data_ = reinterpret_cast( MapViewOfFile(mapping_handle_, view_access, 0, 0, capacity_)); #else diff --git a/src/xenia/base/memory_win.cc b/src/xenia/base/memory_win.cc index 231a65633..cbed1b362 100644 --- a/src/xenia/base/memory_win.cc +++ b/src/xenia/base/memory_win.cc @@ -11,6 +11,11 @@ #include "xenia/base/platform_win.h" +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | \ + WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_GAMES) +#define XE_BASE_MEMORY_WIN_USE_DESKTOP_FUNCTIONS +#endif + namespace xe { namespace memory { @@ -75,12 +80,11 @@ PageAccess ToXeniaProtectFlags(DWORD access) { } bool IsWritableExecutableMemorySupported() { -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#ifdef XE_BASE_MEMORY_WIN_USE_DESKTOP_FUNCTIONS return true; #else - // To test FromApp functions on desktop, replace - // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) with 0 in the #ifs and - // link to WindowsApp.lib. + // To test FromApp functions on desktop, undefine + // XE_BASE_MEMORY_WIN_USE_DESKTOP_FUNCTIONS and link to WindowsApp.lib. return false; #endif } @@ -103,7 +107,7 @@ void* AllocFixed(void* base_address, size_t length, break; } DWORD protect = ToWin32ProtectFlags(access); -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#ifdef XE_BASE_MEMORY_WIN_USE_DESKTOP_FUNCTIONS return VirtualAlloc(base_address, length, alloc_type, protect); #else return VirtualAllocFromApp(base_address, length, ULONG(alloc_type), @@ -135,7 +139,7 @@ bool Protect(void* base_address, size_t length, PageAccess access, *out_old_access = PageAccess::kNoAccess; } DWORD new_protect = ToWin32ProtectFlags(access); -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#ifdef XE_BASE_MEMORY_WIN_USE_DESKTOP_FUNCTIONS DWORD old_protect = 0; BOOL result = VirtualProtect(base_address, length, new_protect, &old_protect); #else @@ -174,7 +178,7 @@ FileMappingHandle CreateFileMappingHandle(const std::filesystem::path& path, DWORD protect = ToWin32ProtectFlags(access) | (commit ? SEC_COMMIT : SEC_RESERVE); auto full_path = "Local" / path; -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#ifdef XE_BASE_MEMORY_WIN_USE_DESKTOP_FUNCTIONS return CreateFileMappingW(INVALID_HANDLE_VALUE, nullptr, protect, static_cast(length >> 32), static_cast(length), full_path.c_str()); @@ -191,7 +195,7 @@ void CloseFileMappingHandle(FileMappingHandle handle, void* MapFileView(FileMappingHandle handle, void* base_address, size_t length, PageAccess access, size_t file_offset) { -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#ifdef XE_BASE_MEMORY_WIN_USE_DESKTOP_FUNCTIONS DWORD target_address_low = static_cast(file_offset); DWORD target_address_high = static_cast(file_offset >> 32); DWORD file_access = 0;