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; }
static HRESULT WINAPI RegistrarCF_CreateInstance(IClassFactory *iface, LPUNKNOWN pUnkOuter, REFIID riid, void **ppv) { IRegistrar *registrar; HRESULT hres; TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv); if(pUnkOuter) { *ppv = NULL; return CLASS_E_NOAGGREGATION; } hres = AtlCreateRegistrar(®istrar); if(FAILED(hres)) return hres; hres = IRegistrar_QueryInterface(registrar, riid, ppv); IRegistrar_Release(registrar); return hres; }