From 9b9d818252fe1a47f3ca52d028dc10d52fa33597 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Fri, 4 Mar 2022 14:29:21 +0100 Subject: [PATCH] user32: Ignore low instance word in find_class. Like we do in wineserver. Signed-off-by: Jacek Caban Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/user32/class.c | 4 ++-- dlls/user32/tests/class.c | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/dlls/user32/class.c b/dlls/user32/class.c index b24e72be324..31b02e4658f 100644 --- a/dlls/user32/class.c +++ b/dlls/user32/class.c @@ -299,7 +299,7 @@ static void CLASS_FreeClass( CLASS *classPtr ) static CLASS *find_class( HINSTANCE module, const WCHAR *name ) { ATOM atom = get_int_atom_value( name ); - UINT_PTR instance = (UINT_PTR)module; + UINT_PTR instance = (UINT_PTR)module & ~0xffff; CLASS *class; USER_Lock(); @@ -313,7 +313,7 @@ static CLASS *find_class( HINSTANCE module, const WCHAR *name ) { if (wcsicmp( class->name, name )) continue; } - if (!class->local || class->instance == instance) + if (!class->local || (class->instance & ~0xffff) == instance) { TRACE("%s %Ix -> %p\n", debugstr_w(name), instance, class); return class; diff --git a/dlls/user32/tests/class.c b/dlls/user32/tests/class.c index e6762032107..c13893ae9d3 100644 --- a/dlls/user32/tests/class.c +++ b/dlls/user32/tests/class.c @@ -90,12 +90,14 @@ static void ClassTest(HINSTANCE hInstance, BOOL global) WNDCLASSW cls, wc; static const WCHAR className[] = {'T','e','s','t','C','l','a','s','s',0}; static const WCHAR winName[] = {'W','i','n','C','l','a','s','s','T','e','s','t',0}; + WNDCLASSW info; ATOM test_atom; HWND hTestWnd; LONG i; WCHAR str[20]; ATOM classatom; HINSTANCE hInstance2; + BOOL ret; cls.style = CS_HREDRAW | CS_VREDRAW | (global?CS_GLOBALCLASS:0); cls.lpfnWndProc = ClassTest_WndProc; @@ -136,6 +138,9 @@ static void ClassTest(HINSTANCE hInstance, BOOL global) DestroyWindow(hTestWnd); + ret = GetClassInfoW(hInstance2, className, &info); + ok(ret, "GetClassInfoW failed: %u\n", GetLastError()); + hTestWnd = CreateWindowW (className, winName, WS_OVERLAPPEDWINDOW + WS_HSCROLL + WS_VSCROLL, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, -- 2.11.4.GIT