[PATCH v2 3/5] ieframe: Add stub implementation of IInternetExplorerManager.

Jacek Caban jacek at codeweavers.com
Wed Aug 9 06:07:54 CDT 2017


Hi Zebediah,

On 08.08.2017 20:04, Zebediah Figura wrote:
>  HRESULT register_class_object(BOOL do_reg)
>  {
>      HRESULT hres;
>  
> -    static DWORD cookie;
> +    static DWORD ie_cookie, iem_cookie;
>  
>      if(do_reg) {
>          hres = CoRegisterClassObject(&CLSID_InternetExplorer,
>                  (IUnknown*)&InternetExplorerFactory, CLSCTX_SERVER,
> -                REGCLS_MULTIPLEUSE|REGCLS_SUSPENDED, &cookie);
> -        if (FAILED(hres)) {
> +                REGCLS_MULTIPLEUSE, &ie_cookie);
> +        if (FAILED(hres))
> +            ERR("failed to register object %08x\n", hres);
> +        hres = CoRegisterClassObject(&CLSID_InternetExplorerManager,
> +                (IUnknown*)&InternetExplorerManagerFactory, CLSCTX_SERVER,
> +                REGCLS_MULTIPLEUSE, &iem_cookie);
> +        if (FAILED(hres))
>              ERR("failed to register object %08x\n", hres);
> -            return hres;
> -        }
> -
> -        hres = CoResumeClassObjects();
> -        if(SUCCEEDED(hres))
> -            return hres;
> -
> -        ERR("failed to resume object %08x\n", hres);
>      }
> -
> -    return CoRevokeClassObject(cookie);
> +    else
> +    {
> +        hres = CoRevokeClassObject(ie_cookie);
> +        if (FAILED(hres))
> +            ERR("failed to register object %08x\n", hres);
> +        hres = CoRevokeClassObject(iem_cookie);
> +        if (FAILED(hres))
> +            ERR("failed to register object %08x\n", hres);
> +    }
> +    return hres;
>  }

Are you sure that's how it's supposed to work? I didn't test it myself,
but given how it's registered and documented, I'd expect that
CLSID_InternetExplorerManager should live in a different process from
CLSID_InternetExplorer. It should be easy to distinguish those processes
with -startmanager command line argument.

> +static HRESULT WINAPI InternetExplorerManager_CreateObject(IInternetExplorerManager *iface, DWORD config, LPCWSTR url, REFIID riid, void **ppv)
> +{
> +    FIXME("(%p)->(0x%x, %s, %s, %p) semi-stub\n", iface, config, debugstr_w(url), debugstr_guid(riid), ppv);
> +
> +    return CoCreateInstance(&CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, riid, ppv);
> +}

Using CoCreateInstance is very questionable here (eg. due to the comment
above). Also, a patch adding a stub should just return E_NOTIMPL.
Implementation deserves a separated patch. I'd expect that it should
just use internal ieframe functions to create a new IE instance.

Also, I'd suggest to reorder patches to something like: 2, 4, 5, 1
(likely replaced by support for -startmanager command line argument), 3
and then a new patch implementing CreateObject.

Thanks,
Jacek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20170809/b1e18445/attachment.html>


More information about the wine-devel mailing list