On 10.08.2017 18:47, Zebediah Figura wrote:
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:
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?
Not really, see how CoRegisterClassObject is used. With your patches a single process (both with -embeding and -startmanager arguments) registers both CLSID_InternetExplorer and CLSID_InternetExplorerManager with REGCLS_MULTIPLEUSE. It means that all instances of both objects will live in this single process. I think that -embeding should register CLSID_InternetExplorer and -startmanager should register CLSID_InternetExplorerManager (probably with REGCLS_SINGLEUSE).
And using CoCreateInstance, as with my previous patch, should also create an InternetExplorer instance in another process?
Not with your patch series, but when you get CoRegisterClassObject right then yes, it may be actually the right thing to do.
I don't understand DCOM very well. Perhaps you could expound on said testing?
I created an instance of CLSID_InternetExplorerManager and watched task manager for new iexplore.exe processes. I admit that it's not the most sophisticated testing ;)
Jacek