forked from Mirrors/wine-wine
shdocvw: Register iexplore.exe as a COM local server.
parent
be10a6a099
commit
42c7372b6b
|
@ -5,7 +5,7 @@ SRCDIR = @srcdir@
|
||||||
VPATH = @srcdir@
|
VPATH = @srcdir@
|
||||||
MODULE = shdocvw.dll
|
MODULE = shdocvw.dll
|
||||||
IMPORTLIB = libshdocvw.$(IMPLIBEXT)
|
IMPORTLIB = libshdocvw.$(IMPLIBEXT)
|
||||||
IMPORTS = shlwapi user32 advapi32 kernel32
|
IMPORTS = shell32 shlwapi user32 advapi32 kernel32
|
||||||
DELAYIMPORTS = urlmon ole32 oleaut32
|
DELAYIMPORTS = urlmon ole32 oleaut32
|
||||||
EXTRALIBS = -luuid
|
EXTRALIBS = -luuid
|
||||||
|
|
||||||
|
|
|
@ -102,6 +102,11 @@ static WCHAR const viprogid_keyname[25] = {
|
||||||
'e', 'n', 'd', 'e', 'n', 't', 'P', 'r', 'o', 'g', 'I', 'D',
|
'e', 'n', 'd', 'e', 'n', 't', 'P', 'r', 'o', 'g', 'I', 'D',
|
||||||
0 };
|
0 };
|
||||||
static char const tmodel_valuename[] = "ThreadingModel";
|
static char const tmodel_valuename[] = "ThreadingModel";
|
||||||
|
static WCHAR const lcs32_keyname[] = {
|
||||||
|
'L','o','c','a','l','S','e','r','v','e','r','3','2',0 };
|
||||||
|
static const WCHAR szIERelPath[] = {
|
||||||
|
'I','n','t','e','r','n','e','t',' ','E','x','p','l','o','r','e','r','\\',
|
||||||
|
'i','e','x','p','l','o','r','e','.','e','x','e',0 };
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* static helper functions
|
* static helper functions
|
||||||
|
@ -509,6 +514,14 @@ static struct regsvr_coclass const coclass_list[] = {
|
||||||
"Shell.Explorer.2",
|
"Shell.Explorer.2",
|
||||||
"Shell.Explorer"
|
"Shell.Explorer"
|
||||||
},
|
},
|
||||||
|
{ &CLSID_InternetExplorer,
|
||||||
|
"Internet Explorer(Ver 1.0)",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
"InternetExplorer.Application.1",
|
||||||
|
"InternetExplorer.Application"
|
||||||
|
},
|
||||||
{ NULL } /* list terminator */
|
{ NULL } /* list terminator */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -520,6 +533,43 @@ static struct regsvr_interface const interface_list[] = {
|
||||||
{ NULL } /* list terminator */
|
{ NULL } /* list terminator */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static HRESULT register_localserver(void)
|
||||||
|
{
|
||||||
|
HKEY coclass_key = 0, clsid_key = 0;
|
||||||
|
WCHAR buf[39], path[MAX_PATH];
|
||||||
|
LONG res;
|
||||||
|
UINT len;
|
||||||
|
|
||||||
|
res = SHGetFolderPathW(NULL, CSIDL_FLAG_CREATE|CSIDL_PROGRAM_FILES,
|
||||||
|
NULL, SHGFP_TYPE_CURRENT, path);
|
||||||
|
if (FAILED(res))
|
||||||
|
return res;
|
||||||
|
|
||||||
|
len = lstrlenW(path);
|
||||||
|
if ((len + (sizeof szIERelPath/sizeof(WCHAR)) + 1) > MAX_PATH)
|
||||||
|
return E_FAIL;
|
||||||
|
|
||||||
|
path[len] = '\\';
|
||||||
|
lstrcpyW(&path[len+1], szIERelPath);
|
||||||
|
|
||||||
|
res = RegCreateKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, NULL, 0,
|
||||||
|
KEY_READ | KEY_WRITE, NULL, &coclass_key, NULL);
|
||||||
|
if (res != ERROR_SUCCESS) goto err;
|
||||||
|
|
||||||
|
StringFromGUID2(&CLSID_InternetExplorer, buf, 39);
|
||||||
|
res = RegCreateKeyExW(coclass_key, buf, 0, NULL, 0,
|
||||||
|
KEY_READ | KEY_WRITE, NULL, &clsid_key, NULL);
|
||||||
|
if (res != ERROR_SUCCESS) goto err;
|
||||||
|
|
||||||
|
res = register_key_defvalueW(clsid_key, lcs32_keyname, path);
|
||||||
|
if (res != ERROR_SUCCESS) goto err;
|
||||||
|
|
||||||
|
err:
|
||||||
|
if (clsid_key) RegCloseKey(clsid_key);
|
||||||
|
if (coclass_key) RegCloseKey(coclass_key);
|
||||||
|
return (res == ERROR_SUCCESS) ? S_OK : E_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DllRegisterServer (SHDOCVW.@)
|
* DllRegisterServer (SHDOCVW.@)
|
||||||
*/
|
*/
|
||||||
|
@ -532,6 +582,8 @@ HRESULT WINAPI DllRegisterServer(void)
|
||||||
hr = register_coclasses(coclass_list);
|
hr = register_coclasses(coclass_list);
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
hr = register_interfaces(interface_list);
|
hr = register_interfaces(interface_list);
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
hr = register_localserver();
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue