From fd67e394e69ec59a23ca89ce729d1d72a61954ce Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Fri, 1 Jun 2018 20:51:24 +0200 Subject: [PATCH] ole32: Don't try to unregister window class if it was never registered. UnregisterClass may load display driver, which is may be problematic inside DLL_PROCESS_DETACH (esp. in Android drivers, which imports ole32 itself). Signed-off-by: Jacek Caban Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/ole32/compobj.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c index a9e94c5384a..fb69a667462 100644 --- a/dlls/ole32/compobj.c +++ b/dlls/ole32/compobj.c @@ -479,6 +479,8 @@ struct apartment_loaded_dll static const WCHAR wszAptWinClass[] = {'O','l','e','M','a','i','n','T','h','r','e','a','d','W','n','d','C','l','a','s','s',0}; +static ATOM apt_win_class; + /***************************************************************************** * This section contains OpenDllList implementation */ @@ -1695,7 +1697,7 @@ static BOOL WINAPI register_class( INIT_ONCE *once, void *param, void **context wclass.lpfnWndProc = apartment_wndproc; wclass.hInstance = hProxyDll; wclass.lpszClassName = wszAptWinClass; - RegisterClassW(&wclass); + apt_win_class = RegisterClassW(&wclass); return TRUE; } @@ -5270,7 +5272,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID reserved) case DLL_PROCESS_DETACH: if (reserved) break; release_std_git(); - UnregisterClassW( wszAptWinClass, hProxyDll ); + if(apt_win_class) + UnregisterClassW( (const WCHAR*)MAKEINTATOM(apt_win_class), hProxyDll ); RPC_UnregisterAllChannelHooks(); COMPOBJ_DllList_Free(); DeleteCriticalSection(&csRegisteredClassList);