Jacek Caban : win32u: Support wow64 in NtAllocateVirtualMemory calls.
Alexandre Julliard
julliard at winehq.org
Tue Aug 9 15:19:54 CDT 2022
Module: wine
Branch: master
Commit: 149e7502400e24d27fe3f9159d2a936af71c7a19
URL: https://gitlab.winehq.org/wine/wine/-/commit/149e7502400e24d27fe3f9159d2a936af71c7a19
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sat Jul 30 02:51:49 2022 +0200
win32u: Support wow64 in NtAllocateVirtualMemory calls.
---
dlls/win32u/dc.c | 4 ++--
dlls/win32u/dib.c | 4 ++--
dlls/win32u/gdiobj.c | 4 ++--
dlls/win32u/win32u_private.h | 9 +++++++++
4 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/dlls/win32u/dc.c b/dlls/win32u/dc.c
index 131927a4707..a8c651dd28f 100644
--- a/dlls/win32u/dc.c
+++ b/dlls/win32u/dc.c
@@ -112,8 +112,8 @@ static DC_ATTR *alloc_dc_attr(void)
{
SIZE_T size = system_info.AllocationGranularity;
bucket->entries = NULL;
- if (!NtAllocateVirtualMemory( GetCurrentProcess(), (void **)&bucket->entries, 0, &size,
- MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE ))
+ if (!NtAllocateVirtualMemory( GetCurrentProcess(), (void **)&bucket->entries, zero_bits(),
+ &size, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE ))
{
bucket->next_free = NULL;
bucket->next_unused = bucket->entries + 1;
diff --git a/dlls/win32u/dib.c b/dlls/win32u/dib.c
index 7a6df3da7cc..e7a5a50e201 100644
--- a/dlls/win32u/dib.c
+++ b/dlls/win32u/dib.c
@@ -1548,8 +1548,8 @@ HBITMAP WINAPI NtGdiCreateDIBSection( HDC hdc, HANDLE section, DWORD offset, con
{
SIZE_T size = bmp->dib.dsBmih.biSizeImage;
offset = 0;
- if (NtAllocateVirtualMemory( GetCurrentProcess(), &bmp->dib.dsBm.bmBits, 0, &size,
- MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE ))
+ if (NtAllocateVirtualMemory( GetCurrentProcess(), &bmp->dib.dsBm.bmBits, zero_bits(),
+ &size, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE ))
goto error;
}
bmp->dib.dshSection = section;
diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c
index aaeed2ba676..e42d076bc5b 100644
--- a/dlls/win32u/gdiobj.c
+++ b/dlls/win32u/gdiobj.c
@@ -566,8 +566,8 @@ static void init_gdi_shared(void)
{
SIZE_T size = sizeof(*gdi_shared);
- if (NtAllocateVirtualMemory( GetCurrentProcess(), (void **)&gdi_shared, 0, &size,
- MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE ))
+ if (NtAllocateVirtualMemory( GetCurrentProcess(), (void **)&gdi_shared, zero_bits(),
+ &size, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE ))
return;
next_unused = gdi_shared->Handles + FIRST_GDI_HANDLE;
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index d4b86d1e6a9..6d492f2e73b 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -494,6 +494,15 @@ static inline BOOL is_win9x(void)
return NtCurrentTeb()->Peb->OSPlatformId == VER_PLATFORM_WIN32s;
}
+static inline ULONG_PTR zero_bits(void)
+{
+#ifdef _WIN64
+ return !NtCurrentTeb()->WowTebOffset ? 0 : 0x7fffffff;
+#else
+ return 0;
+#endif
+}
+
static inline const char *debugstr_us( const UNICODE_STRING *us )
{
if (!us) return "<null>";
More information about the wine-cvs
mailing list