From 1331a8ea0fd4f19b80b3fd434c5e8b2a3b6e0fd4 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Fri, 30 Apr 2021 13:40:11 +0200 Subject: [PATCH] winecrt0: Determine the registration module handle directly in __wine_register_resources(). Signed-off-by: Alexandre Julliard --- dlls/devenum/devenum_main.c | 21 ++------------------- dlls/mlang/mlang.c | 6 ++---- dlls/mp3dmod/mp3dmod.c | 19 ++----------------- dlls/mscoree/mscoree_main.c | 8 ++------ dlls/mshtml/main.c | 4 ++-- dlls/qcap/qcap_main.c | 4 ++-- dlls/qedit/main.c | 7 ++----- dlls/shell32/shell32_main.c | 4 ++-- dlls/winecrt0/dll_register.c | 15 ++------------- dlls/winecrt0/register.c | 19 +++++++++++++++---- dlls/winegstreamer/main.c | 10 ++++------ dlls/wineqtdecoder/main.c | 16 ++-------------- include/rpcproxy.h | 8 ++++---- 13 files changed, 43 insertions(+), 98 deletions(-) diff --git a/dlls/devenum/devenum_main.c b/dlls/devenum/devenum_main.c index 01ddef4ef23..cbeacbb5b27 100644 --- a/dlls/devenum/devenum_main.c +++ b/dlls/devenum/devenum_main.c @@ -26,23 +26,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(devenum); DECLSPEC_HIDDEN LONG dll_refs; -static HINSTANCE devenum_instance; - -/*********************************************************************** - * DllEntryPoint - */ -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad) -{ - TRACE("%p 0x%x %p\n", hinstDLL, fdwReason, fImpLoad); - - switch(fdwReason) { - case DLL_PROCESS_ATTACH: - devenum_instance = hinstDLL; - DisableThreadLibraryCalls(hinstDLL); - break; - } - return TRUE; -} struct class_factory { @@ -154,7 +137,7 @@ HRESULT WINAPI DllRegisterServer(void) TRACE("\n"); - res = __wine_register_resources( devenum_instance ); + res = __wine_register_resources(); if (FAILED(res)) return res; @@ -186,5 +169,5 @@ HRESULT WINAPI DllRegisterServer(void) HRESULT WINAPI DllUnregisterServer(void) { FIXME("stub!\n"); - return __wine_unregister_resources( devenum_instance ); + return __wine_unregister_resources(); } diff --git a/dlls/mlang/mlang.c b/dlls/mlang/mlang.c index 62e9947fb73..82fa9a0515e 100644 --- a/dlls/mlang/mlang.c +++ b/dlls/mlang/mlang.c @@ -48,7 +48,6 @@ static HRESULT MultiLanguage_create(IUnknown *pUnkOuter, LPVOID *ppObj); static HRESULT MLangConvertCharset_create(IUnknown *outer, void **obj); static HRESULT EnumRfc1766_create(LANGID LangId, IEnumRfc1766 **ppEnum); -static HINSTANCE instance; static DWORD MLANG_tls_index; /* to store various per thead data */ /* FIXME: @@ -935,7 +934,6 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) { switch(fdwReason) { case DLL_PROCESS_ATTACH: - instance = hInstDLL; MLANG_tls_index = TlsAlloc(); DisableThreadLibraryCalls(hInstDLL); break; @@ -3976,7 +3974,7 @@ HRESULT WINAPI DllRegisterServer(void) { if(!register_codepages()) return E_FAIL; - return __wine_register_resources( instance ); + return __wine_register_resources(); } /*********************************************************************** @@ -3984,7 +3982,7 @@ HRESULT WINAPI DllRegisterServer(void) */ HRESULT WINAPI DllUnregisterServer(void) { - return __wine_unregister_resources( instance ); + return __wine_unregister_resources(); } HRESULT WINAPI GetGlobalFontLinkObject(void **unknown) diff --git a/dlls/mp3dmod/mp3dmod.c b/dlls/mp3dmod/mp3dmod.c index c06ad3734b0..35d3a2d4cc3 100644 --- a/dlls/mp3dmod/mp3dmod.c +++ b/dlls/mp3dmod/mp3dmod.c @@ -41,8 +41,6 @@ DEFINE_GUID(WMFORMAT_WaveFormatEx, 0x05589f81,0xc356,0x11ce,0xbf,0x01,0x00,0xaa WINE_DEFAULT_DEBUG_CHANNEL(mp3dmod); -static HINSTANCE mp3dmod_instance; - struct mp3_decoder { IUnknown IUnknown_inner; @@ -651,19 +649,6 @@ static const IClassFactoryVtbl classfactory_vtbl = { static IClassFactory mp3_decoder_cf = { &classfactory_vtbl }; -BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) -{ - TRACE("%p, %d, %p\n", instance, reason, reserved); - switch (reason) - { - case DLL_PROCESS_ATTACH: - DisableThreadLibraryCalls(instance); - mp3dmod_instance = instance; - break; - } - return TRUE; -} - /************************************************************************* * DllGetClassObject (DSDMO.@) */ @@ -695,7 +680,7 @@ HRESULT WINAPI DllRegisterServer(void) 0, 1, &in, 1, &out); if (FAILED(hr)) return hr; - return __wine_register_resources( mp3dmod_instance ); + return __wine_register_resources(); } /*********************************************************************** @@ -708,5 +693,5 @@ HRESULT WINAPI DllUnregisterServer(void) hr = DMOUnregister(&CLSID_CMP3DecMediaObject, &DMOCATEGORY_AUDIO_DECODER); if (FAILED(hr)) return hr; - return __wine_unregister_resources( mp3dmod_instance ); + return __wine_unregister_resources(); } diff --git a/dlls/mscoree/mscoree_main.c b/dlls/mscoree/mscoree_main.c index a75a7ca05cd..a4567e96de2 100644 --- a/dlls/mscoree/mscoree_main.c +++ b/dlls/mscoree/mscoree_main.c @@ -50,8 +50,6 @@ WINE_DEFAULT_DEBUG_CHANNEL( mscoree ); WINE_DECLARE_DEBUG_CHANNEL(winediag); -static HINSTANCE MSCOREE_hInstance; - typedef HRESULT (*fnCreateInstance)(REFIID riid, LPVOID *ppObj); char *WtoA(LPCWSTR wstr) @@ -220,8 +218,6 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { TRACE("(%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved); - MSCOREE_hInstance = hinstDLL; - switch (fdwReason) { case DLL_PROCESS_ATTACH: @@ -883,12 +879,12 @@ HRESULT WINAPI DllRegisterServer(void) { install_wine_mono(); - return __wine_register_resources( MSCOREE_hInstance ); + return __wine_register_resources(); } HRESULT WINAPI DllUnregisterServer(void) { - return __wine_unregister_resources( MSCOREE_hInstance ); + return __wine_unregister_resources(); } void WINAPI CoEEShutDownCOM(void) diff --git a/dlls/mshtml/main.c b/dlls/mshtml/main.c index 7e13d80d2f9..959d2d66214 100644 --- a/dlls/mshtml/main.c +++ b/dlls/mshtml/main.c @@ -662,7 +662,7 @@ HRESULT WINAPI DllRegisterServer(void) { HRESULT hres; - hres = __wine_register_resources( hInst ); + hres = __wine_register_resources(); if(SUCCEEDED(hres)) hres = register_server(TRUE); return hres; @@ -673,7 +673,7 @@ HRESULT WINAPI DllRegisterServer(void) */ HRESULT WINAPI DllUnregisterServer(void) { - HRESULT hres = __wine_unregister_resources( hInst ); + HRESULT hres = __wine_unregister_resources(); if(SUCCEEDED(hres)) hres = register_server(FALSE); return hres; } diff --git a/dlls/qcap/qcap_main.c b/dlls/qcap/qcap_main.c index 5f608c16310..ef71947687c 100644 --- a/dlls/qcap/qcap_main.c +++ b/dlls/qcap/qcap_main.c @@ -234,7 +234,7 @@ HRESULT WINAPI DllRegisterServer(void) IFilterMapper2 *mapper; HRESULT hr; - if (FAILED(hr = __wine_register_resources( qcap_instance ))) + if (FAILED(hr = __wine_register_resources())) return hr; if (FAILED(hr = CoCreateInstance(&CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER, @@ -260,7 +260,7 @@ HRESULT WINAPI DllUnregisterServer(void) IFilterMapper2 *mapper; HRESULT hr; - if (FAILED(hr = __wine_unregister_resources( qcap_instance ))) + if (FAILED(hr = __wine_unregister_resources())) return hr; if (FAILED(hr = CoCreateInstance(&CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER, diff --git a/dlls/qedit/main.c b/dlls/qedit/main.c index cfddc70a3bc..1ea7c14493a 100644 --- a/dlls/qedit/main.c +++ b/dlls/qedit/main.c @@ -25,13 +25,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(qedit); -static HINSTANCE qedit_instance; - BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved) { if (reason == DLL_PROCESS_ATTACH) { - qedit_instance = instance; DisableThreadLibraryCalls(instance); } else if (reason == DLL_PROCESS_DETACH && !reserved) @@ -240,7 +237,7 @@ HRESULT WINAPI DllRegisterServer(void) IFilterMapper2 *mapper; HRESULT hr; - if (FAILED(hr = __wine_register_resources(qedit_instance))) + if (FAILED(hr = __wine_register_resources())) return hr; if (FAILED(hr = CoCreateInstance(&CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER, @@ -264,7 +261,7 @@ HRESULT WINAPI DllUnregisterServer(void) IFilterMapper2 *mapper; HRESULT hr; - if (FAILED(hr = __wine_unregister_resources(qedit_instance))) + if (FAILED(hr = __wine_unregister_resources())) return hr; if (FAILED(hr = CoCreateInstance(&CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER, diff --git a/dlls/shell32/shell32_main.c b/dlls/shell32/shell32_main.c index b569a9dddc8..defa5f11a50 100644 --- a/dlls/shell32/shell32_main.c +++ b/dlls/shell32/shell32_main.c @@ -1174,7 +1174,7 @@ HRESULT WINAPI DllInstall(BOOL bInstall, LPCWSTR cmdline) */ HRESULT WINAPI DllRegisterServer(void) { - HRESULT hr = __wine_register_resources( shell32_hInstance ); + HRESULT hr = __wine_register_resources(); if (SUCCEEDED(hr)) hr = SHELL_RegisterShellFolders(); return hr; } @@ -1184,7 +1184,7 @@ HRESULT WINAPI DllRegisterServer(void) */ HRESULT WINAPI DllUnregisterServer(void) { - return __wine_unregister_resources( shell32_hInstance ); + return __wine_unregister_resources(); } /*********************************************************************** diff --git a/dlls/winecrt0/dll_register.c b/dlls/winecrt0/dll_register.c index 3be0ea5581a..0adb1d716d9 100644 --- a/dlls/winecrt0/dll_register.c +++ b/dlls/winecrt0/dll_register.c @@ -25,23 +25,12 @@ #include "olectl.h" #include "rpcproxy.h" -static inline void *image_base(void) -{ -#if defined(__MINGW32__) || defined(_MSC_VER) - extern IMAGE_DOS_HEADER __ImageBase; - return (void *)&__ImageBase; -#else - extern IMAGE_NT_HEADERS __wine_spec_nt_header; - return (void *)((__wine_spec_nt_header.OptionalHeader.ImageBase + 0xffff) & ~0xffff); -#endif -} - HRESULT WINAPI DllRegisterServer(void) { - return __wine_register_resources( image_base() ); + return __wine_register_resources(); } HRESULT WINAPI DllUnregisterServer(void) { - return __wine_unregister_resources( image_base() ); + return __wine_unregister_resources(); } diff --git a/dlls/winecrt0/register.c b/dlls/winecrt0/register.c index 2fb0b5f5420..ce4167b9647 100644 --- a/dlls/winecrt0/register.c +++ b/dlls/winecrt0/register.c @@ -29,6 +29,17 @@ #include "rpcproxy.h" #include "atliface.h" +static inline void *image_base(void) +{ +#if defined(__MINGW32__) || defined(_MSC_VER) + extern IMAGE_DOS_HEADER __ImageBase; + return (void *)&__ImageBase; +#else + extern IMAGE_NT_HEADERS __wine_spec_nt_header; + return (void *)((__wine_spec_nt_header.OptionalHeader.ImageBase + 0xffff) & ~0xffff); +#endif +} + static const WCHAR atl100W[] = {'a','t','l','1','0','0','.','d','l','l',0}; static const WCHAR regtypeW[] = {'W','I','N','E','_','R','E','G','I','S','T','R','Y',0}; static const WCHAR moduleW[] = {'M','O','D','U','L','E',0}; @@ -97,26 +108,26 @@ static BOOL CALLBACK register_resource( HMODULE module, LPCWSTR type, LPWSTR nam return SUCCEEDED(info->result); } -HRESULT __cdecl __wine_register_resources( HMODULE module ) +HRESULT __cdecl __wine_register_resources(void) { struct reg_info info; info.registrar = NULL; info.do_register = TRUE; info.result = S_OK; - EnumResourceNamesW( module, regtypeW, register_resource, (LONG_PTR)&info ); + EnumResourceNamesW( image_base(), regtypeW, register_resource, (LONG_PTR)&info ); if (info.registrar) IRegistrar_Release( info.registrar ); return info.result; } -HRESULT __cdecl __wine_unregister_resources( HMODULE module ) +HRESULT __cdecl __wine_unregister_resources(void) { struct reg_info info; info.registrar = NULL; info.do_register = FALSE; info.result = S_OK; - EnumResourceNamesW( module, regtypeW, register_resource, (LONG_PTR)&info ); + EnumResourceNamesW( image_base(), regtypeW, register_resource, (LONG_PTR)&info ); if (info.registrar) IRegistrar_Release( info.registrar ); return info.result; } diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index 4772c958f8e..16fd6147ddf 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -27,7 +27,6 @@ #include "initguid.h" #include "gst_guids.h" -static HINSTANCE winegstreamer_instance; LONG object_locks; WINE_DEFAULT_DEBUG_CHANNEL(gstreamer); @@ -38,7 +37,6 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved) { if (reason == DLL_PROCESS_ATTACH) { - winegstreamer_instance = instance; DisableThreadLibraryCalls(instance); __wine_init_unix_lib(instance, reason, NULL, &unix_funcs); } @@ -171,9 +169,9 @@ static BOOL CALLBACK init_gstreamer_proc(INIT_ONCE *once, void *param, void **ct /* Unloading glib is a bad idea.. it installs atexit handlers, * so never unload the dll after loading */ GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_PIN, - (LPCWSTR)winegstreamer_instance, &handle); + (LPCWSTR)init_gstreamer_proc, &handle); if (!handle) - ERR("Failed to pin module %p.\n", winegstreamer_instance); + ERR("Failed to pin module.\n"); return TRUE; } @@ -321,7 +319,7 @@ HRESULT WINAPI DllRegisterServer(void) TRACE(".\n"); - if (FAILED(hr = __wine_register_resources(winegstreamer_instance))) + if (FAILED(hr = __wine_register_resources())) return hr; if (FAILED(hr = CoCreateInstance(&CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER, @@ -347,7 +345,7 @@ HRESULT WINAPI DllUnregisterServer(void) TRACE(".\n"); - if (FAILED(hr = __wine_unregister_resources(winegstreamer_instance))) + if (FAILED(hr = __wine_unregister_resources())) return hr; if (FAILED(hr = CoCreateInstance(&CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER, diff --git a/dlls/wineqtdecoder/main.c b/dlls/wineqtdecoder/main.c index 6d2f17dd4b1..436c30c36bc 100644 --- a/dlls/wineqtdecoder/main.c +++ b/dlls/wineqtdecoder/main.c @@ -57,18 +57,6 @@ static const WCHAR wQTVName[] = static const WCHAR wQTDName[] = {'Q','T',' ','V','i','d','e','o',' ','D','e','m','u','x',0}; -static HINSTANCE wineqtdecoder_instance; - -BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved) -{ - if (reason == DLL_PROCESS_ATTACH) - { - wineqtdecoder_instance = instance; - DisableThreadLibraryCalls(instance); - } - return TRUE; -} - struct class_factory { IClassFactory IClassFactory_iface; @@ -221,7 +209,7 @@ HRESULT WINAPI DllRegisterServer(void) TRACE(".\n"); - if (FAILED(hr = __wine_register_resources(wineqtdecoder_instance))) + if (FAILED(hr = __wine_register_resources())) return hr; if (FAILED(hr = CoCreateInstance(&CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER, @@ -242,7 +230,7 @@ HRESULT WINAPI DllUnregisterServer(void) TRACE(".\n"); - if (FAILED(hr = __wine_unregister_resources(wineqtdecoder_instance))) + if (FAILED(hr = __wine_unregister_resources())) return hr; if (FAILED(hr = CoCreateInstance(&CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER, diff --git a/include/rpcproxy.h b/include/rpcproxy.h index 5b184329bd4..34321d05064 100644 --- a/include/rpcproxy.h +++ b/include/rpcproxy.h @@ -203,8 +203,8 @@ RPCRTAPI HRESULT RPC_ENTRY RPCRTAPI HRESULT RPC_ENTRY NdrDllUnregisterProxy( HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid ); -HRESULT __cdecl __wine_register_resources( HMODULE module ) DECLSPEC_HIDDEN; -HRESULT __cdecl __wine_unregister_resources( HMODULE module ) DECLSPEC_HIDDEN; +HRESULT __cdecl __wine_register_resources(void) DECLSPEC_HIDDEN; +HRESULT __cdecl __wine_unregister_resources(void) DECLSPEC_HIDDEN; #define CSTDSTUBBUFFERRELEASE(pFactory) \ ULONG WINAPI CStdStubBuffer_Release(IRpcStubBuffer *This) \ @@ -289,8 +289,8 @@ ULONG WINAPI CStdStubBuffer2_Release(IRpcStubBuffer *This) \ #endif #ifdef WINE_REGISTER_DLL -# define WINE_DO_REGISTER_DLL(pfl, clsid) return __wine_register_resources( hProxyDll ) -# define WINE_DO_UNREGISTER_DLL(pfl, clsid) return __wine_unregister_resources( hProxyDll ) +# define WINE_DO_REGISTER_DLL(pfl, clsid) return __wine_register_resources() +# define WINE_DO_UNREGISTER_DLL(pfl, clsid) return __wine_unregister_resources() #else # define WINE_DO_REGISTER_DLL(pfl, clsid) return NdrDllRegisterProxy( hProxyDll, (pfl), (clsid) ) # define WINE_DO_UNREGISTER_DLL(pfl, clsid) return NdrDllUnregisterProxy( hProxyDll, (pfl), (clsid) )