Module: wine Branch: master Commit: 960f0595b2648f5fdfe253a9df8c0671ab6efb61 URL: http://source.winehq.org/git/wine.git/?a=commit;h=960f0595b2648f5fdfe253a9df...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Nov 28 21:25:00 2012 +0100
setupapi: Load IRegistrar from atl100.dll.
---
dlls/setupapi/fakedll.c | 20 +++++++------------- 1 files changed, 7 insertions(+), 13 deletions(-)
diff --git a/dlls/setupapi/fakedll.c b/dlls/setupapi/fakedll.c index 7393e40..525f399 100644 --- a/dlls/setupapi/fakedll.c +++ b/dlls/setupapi/fakedll.c @@ -770,7 +770,7 @@ static BOOL CALLBACK register_resource( HMODULE module, LPCWSTR type, LPWSTR nam
static void register_fake_dll( const WCHAR *name, const void *data, size_t size ) { - static const WCHAR atlW[] = {'a','t','l','.','d','l','l',0}; + static const WCHAR atlW[] = {'a','t','l','1','0','0','.','d','l','l',0}; static const WCHAR moduleW[] = {'M','O','D','U','L','E',0}; static const WCHAR regtypeW[] = {'W','I','N','E','_','R','E','G','I','S','T','R','Y',0}; static const WCHAR manifestW[] = {'W','I','N','E','_','M','A','N','I','F','E','S','T',0}; @@ -791,20 +791,14 @@ static void register_fake_dll( const WCHAR *name, const void *data, size_t size
if (!registrar) { - /* create the object by hand since we can't guarantee that atl and ole32 are registered */ - IClassFactory *cf; - HRESULT (WINAPI *pDllGetClassObject)( REFCLSID clsid, REFIID iid, LPVOID *ppv ); + HRESULT (WINAPI *pAtlCreateRegistrar)(IRegistrar**); HMODULE atl = LoadLibraryW( atlW );
- if ((pDllGetClassObject = (void *)GetProcAddress( atl, "DllGetClassObject" ))) - { - hr = pDllGetClassObject( &CLSID_Registrar, &IID_IClassFactory, (void **)&cf ); - if (SUCCEEDED( hr )) - { - hr = IClassFactory_CreateInstance( cf, NULL, &IID_IRegistrar, (void **)®istrar ); - IClassFactory_Release( cf ); - } - } + if ((pAtlCreateRegistrar = (void *)GetProcAddress( atl, "AtlCreateRegistrar" ))) + hr = pAtlCreateRegistrar( ®istrar ); + else + hr = E_NOINTERFACE; + if (!registrar) { ERR( "failed to create IRegistrar: %x\n", hr );