static HRESULT do_register_dll_server(IRegistrar *pRegistrar, LPCOLESTR wszDll, LPCOLESTR wszId, BOOL do_register, const struct _ATL_REGMAP_ENTRY* pMapEntries) { WCHAR buf[MAX_PATH]; HRESULT hres; const struct _ATL_REGMAP_ENTRY *pMapEntry; static const WCHAR wszModule[] = {'M','O','D','U','L','E',0}; static const WCHAR wszRegistry[] = {'R','E','G','I','S','T','R','Y',0}; static const WCHAR wszCLSID_ATLRegistrar[] = {'C','L','S','I','D','_','A','T','L','R','e','g','i','s','t','r','a','r',0}; if (!pRegistrar) Registrar_create(NULL, &IID_IRegistrar, (void**)&pRegistrar); IRegistrar_AddReplacement(pRegistrar, wszModule, wszDll); for (pMapEntry = pMapEntries; pMapEntry && pMapEntry->szKey; pMapEntry++) IRegistrar_AddReplacement(pRegistrar, pMapEntry->szKey, pMapEntry->szData); StringFromGUID2(&CLSID_ATLRegistrar, buf, sizeof(buf)/sizeof(buf[0])); IRegistrar_AddReplacement(pRegistrar, wszCLSID_ATLRegistrar, buf); if(do_register) hres = IRegistrar_ResourceRegisterSz(pRegistrar, wszDll, wszId, wszRegistry); else hres = IRegistrar_ResourceUnregisterSz(pRegistrar, wszDll, wszId, wszRegistry); IRegistrar_Release(pRegistrar); return hres; }
static HRESULT do_register_dll_server(IRegistrar *pRegistrar, LPCOLESTR wszDll, LPCOLESTR wszId, BOOL do_register, const struct _ATL_REGMAP_ENTRY* pMapEntries) { IRegistrar *registrar; HRESULT hres; const struct _ATL_REGMAP_ENTRY *pMapEntry; static const WCHAR wszModule[] = {'M','O','D','U','L','E',0}; static const WCHAR wszRegistry[] = {'R','E','G','I','S','T','R','Y',0}; if(pRegistrar) { registrar = pRegistrar; }else { hres = AtlCreateRegistrar(®istrar); if(FAILED(hres)) return hres; } IRegistrar_AddReplacement(registrar, wszModule, wszDll); for (pMapEntry = pMapEntries; pMapEntry && pMapEntry->szKey; pMapEntry++) IRegistrar_AddReplacement(registrar, pMapEntry->szKey, pMapEntry->szData); if(do_register) hres = IRegistrar_ResourceRegisterSz(registrar, wszDll, wszId, wszRegistry); else hres = IRegistrar_ResourceUnregisterSz(registrar, wszDll, wszId, wszRegistry); if(registrar != pRegistrar) IRegistrar_Release(registrar); return hres; }
/*********************************************************************** * AtlUpdateRegistryFromResourceD [atl100.@] */ HRESULT WINAPI AtlUpdateRegistryFromResourceD(HINSTANCE inst, LPCOLESTR res, BOOL bRegister, struct _ATL_REGMAP_ENTRY *pMapEntries, IRegistrar *pReg) { const struct _ATL_REGMAP_ENTRY *iter; WCHAR module_name[MAX_PATH]; IRegistrar *registrar; HRESULT hres; static const WCHAR moduleW[] = {'M','O','D','U','L','E',0}; static const WCHAR registryW[] = {'R','E','G','I','S','T','R','Y',0}; if(!GetModuleFileNameW(inst, module_name, MAX_PATH)) { FIXME("hinst %p: did not get module name\n", inst); return E_FAIL; } TRACE("%p (%s), %s, %d, %p, %p\n", inst, debugstr_w(module_name), debugstr_w(res), bRegister, pMapEntries, pReg); if(pReg) { registrar = pReg; }else { hres = AtlCreateRegistrar(®istrar); if(FAILED(hres)) return hres; } IRegistrar_AddReplacement(registrar, moduleW, module_name); for (iter = pMapEntries; iter && iter->szKey; iter++) IRegistrar_AddReplacement(registrar, iter->szKey, iter->szData); if(bRegister) hres = IRegistrar_ResourceRegisterSz(registrar, module_name, res, registryW); else hres = IRegistrar_ResourceUnregisterSz(registrar, module_name, res, registryW); if(registrar != pReg) IRegistrar_Release(registrar); return hres; }