static HRESULT register_inf(BOOL doregister) { HRESULT hres; HMODULE hAdvpack; HRESULT (WINAPI *pRegInstall)(HMODULE hm, LPCSTR pszSection, const STRTABLEA* pstTable); STRTABLEA strtable; STRENTRYA pse[7]; static CLSID const *clsids[7]; int i = 0; static const WCHAR advpackW[] = {'a','d','v','p','a','c','k','.','d','l','l',0}; INF_SET_ID(CLSID_JScript); INF_SET_ID(CLSID_JScriptAuthor); INF_SET_ID(CLSID_JScriptEncode); INF_SET_ID(CATID_ActiveScript); INF_SET_ID(CATID_ActiveScriptParse); INF_SET_ID(CATID_ActiveScriptEncode); INF_SET_ID(CATID_ActiveScriptAuthor); for(i = 0; i < sizeof(pse)/sizeof(pse[0]); i++) { pse[i].pszValue = HeapAlloc(GetProcessHeap(), 0, 39); sprintf(pse[i].pszValue, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", clsids[i]->Data1, clsids[i]->Data2, clsids[i]->Data3, clsids[i]->Data4[0], clsids[i]->Data4[1], clsids[i]->Data4[2], clsids[i]->Data4[3], clsids[i]->Data4[4], clsids[i]->Data4[5], clsids[i]->Data4[6], clsids[i]->Data4[7]); } strtable.cEntries = sizeof(pse)/sizeof(pse[0]); strtable.pse = pse; hAdvpack = LoadLibraryW(advpackW); pRegInstall = (void *)GetProcAddress(hAdvpack, "RegInstall"); hres = pRegInstall(jscript_hinstance, doregister ? "RegisterDll" : "UnregisterDll", &strtable); for(i=0; i < sizeof(pse)/sizeof(pse[0]); i++) HeapFree(GetProcessHeap(), 0, pse[i].pszValue); return hres; }
static HRESULT register_server(BOOL do_register) { HRESULT hres; HMODULE hAdvpack; HRESULT (WINAPI *pRegInstall)(HMODULE hm, LPCSTR pszSection, const STRTABLEA* pstTable); STRTABLEA strtable; STRENTRYA pse[35]; static CLSID const *clsids[35]; unsigned int i = 0; static const WCHAR wszAdvpack[] = {'a','d','v','p','a','c','k','.','d','l','l',0}; TRACE("(%x)\n", do_register); INF_SET_CLSID(AboutProtocol); INF_SET_CLSID(CAnchorBrowsePropertyPage); INF_SET_CLSID(CBackgroundPropertyPage); INF_SET_CLSID(CCDAnchorPropertyPage); INF_SET_CLSID(CCDGenericPropertyPage); INF_SET_CLSID(CDocBrowsePropertyPage); INF_SET_CLSID(CDwnBindInfo); INF_SET_CLSID(CHiFiUses); INF_SET_CLSID(CHtmlComponentConstructor); INF_SET_CLSID(CImageBrowsePropertyPage); INF_SET_CLSID(CInlineStylePropertyPage); INF_SET_CLSID(CPeerHandler); INF_SET_CLSID(CRecalcEngine); INF_SET_CLSID(CSvrOMUses); INF_SET_CLSID(CrSource); INF_SET_CLSID(ExternalFrameworkSite); INF_SET_CLSID(HTADocument); INF_SET_CLSID(HTMLDocument); INF_SET_CLSID(HTMLLoadOptions); INF_SET_CLSID(HTMLPluginDocument); INF_SET_CLSID(HTMLPopup); INF_SET_CLSID(HTMLPopupDoc); INF_SET_CLSID(HTMLServerDoc); INF_SET_CLSID(HTMLWindowProxy); INF_SET_CLSID(IImageDecodeFilter); INF_SET_CLSID(IImgCtx); INF_SET_CLSID(IntDitherer); INF_SET_CLSID(JSProtocol); INF_SET_CLSID(MHTMLDocument); INF_SET_CLSID(MailtoProtocol); INF_SET_CLSID(ResProtocol); INF_SET_CLSID(Scriptlet); INF_SET_CLSID(SysimageProtocol); INF_SET_CLSID(TridentAPI); INF_SET_ID(LIBID_MSHTML); for(i=0; i < sizeof(pse)/sizeof(pse[0]); i++) { pse[i].pszValue = heap_alloc(39); sprintf(pse[i].pszValue, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", clsids[i]->Data1, clsids[i]->Data2, clsids[i]->Data3, clsids[i]->Data4[0], clsids[i]->Data4[1], clsids[i]->Data4[2], clsids[i]->Data4[3], clsids[i]->Data4[4], clsids[i]->Data4[5], clsids[i]->Data4[6], clsids[i]->Data4[7]); } strtable.cEntries = sizeof(pse)/sizeof(pse[0]); strtable.pse = pse; hAdvpack = LoadLibraryW(wszAdvpack); pRegInstall = (void *)GetProcAddress(hAdvpack, "RegInstall"); hres = pRegInstall(hInst, do_register ? "RegisterDll" : "UnregisterDll", &strtable); for(i=0; i < sizeof(pse)/sizeof(pse[0]); i++) heap_free(pse[i].pszValue); if(FAILED(hres)) { ERR("RegInstall failed: %08x\n", hres); return hres; } if(do_register) { ITypeLib *typelib; static const WCHAR wszMSHTML[] = {'m','s','h','t','m','l','.','t','l','b',0}; hres = LoadTypeLibEx(wszMSHTML, REGKIND_REGISTER, &typelib); if(SUCCEEDED(hres)) ITypeLib_Release(typelib); }else { hres = UnRegisterTypeLib(&LIBID_MSHTML, 4, 0, LOCALE_SYSTEM_DEFAULT, SYS_WIN32); } if(FAILED(hres)) ERR("typelib registration failed: %08x\n", hres); return hres; }