From: Derek Lesho Subject: RFC: Limit addresses to 43 bits on 64-bit. Message-Id: <20191002153838.878501-1-dlesho@codeweavers.com> Date: Wed, 2 Oct 2019 10:38:38 -0500 Mortal Kombat 11 allocates memory, with zero_bits set to 0, and applies a 43-bit mask on the pointer. This would have worked in Windows 7, as MSDN says that 43-bits was the maximum pointer size, but the game exhibits this same behavior in wine even when the windows version is set to 8+. This is probably not an issue on Windows, as the allocator may return a much lower address. --- dlls/ntdll/virtual.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c index 181dffe42e..437aef099e 100644 --- a/dlls/ntdll/virtual.c +++ b/dlls/ntdll/virtual.c @@ -132,7 +132,7 @@ static void *address_space_start = (void *)0x110000; /* keep DOS area clear * static const UINT page_shift = 12; static const UINT_PTR page_mask = 0xfff; static void *address_space_limit = (void *)0x7fffffff0000; -static void *user_space_limit = (void *)0x7fffffff0000; +static void *user_space_limit = (void *)0x7ffffff0000; static void *working_set_limit = (void *)0x7fffffff0000; static void *address_space_start = (void *)0x10000; #else @@ -2625,6 +2625,7 @@ void virtual_set_large_address_space(void) { IMAGE_NT_HEADERS *nt = RtlImageNtHeader( NtCurrentTeb()->Peb->ImageBaseAddress ); + if (is_win64) return; if (!(nt->FileHeader.Characteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE)) return; /* no large address space on win9x */ if (NtCurrentTeb()->Peb->OSPlatformId != VER_PLATFORM_WIN32_NT) return; -- 2.23.0