[PATCH v2 3/5] ieframe: Add stub implementation of IInternetExplorerManager.
Zebediah Figura
z.figura12 at gmail.com
Thu Aug 10 11:47:30 CDT 2017
On 08/10/2017 09:33 AM, Jacek Caban wrote:
> On 09.08.2017 20:12, Zebediah Figura wrote:
>> On 08/09/2017 06:07 AM, Jacek Caban wrote:
>>> 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.
>>>
>>
>> I'm sorry, I don't understand what you mean. Isn't
>> CoRegisterClassObject process-agnostic?
>
>
> It is in a sense that created proxy/stub abstract where the object
> lives, yes. But note that the actual instance of IE object must live in
> one process or another. There is a lot of different aspects like
> pluggable protocols, script engines, ActiveX objects, document objects
> that live in its process and it's quite important for them which process
> it is. I did a bit of testing and it seems to be a separated process on
> Windows, so we should follow that.
>
>
> Jacek
>
Isn't the IEM object already created in a different process with this
patch (namely, iexplore.exe -startmanager), since it has to be created
with CLSCTX_LOCAL_SERVER? And using CoCreateInstance, as with my
previous patch, should also create an InternetExplorer instance in
another process?
I don't understand DCOM very well. Perhaps you could expound on said
testing?
More information about the wine-devel
mailing list