Internet explorer 为什么DWebBrowserEvents2::NewProcess()在第二个参数中接收pWB2==NULL
此调度也称为Internet explorer 为什么DWebBrowserEvents2::NewProcess()在第二个参数中接收pWB2==NULL,internet-explorer,com,automation,bho,Internet Explorer,Com,Automation,Bho,此调度也称为DISPID\u NEWPROCESS 如果您使用CoCreateInstance(CLSID\u InternetExplorer)启动一个新的IWebBrowser2,则默认情况下它将以保护模式启动(您可以在Internet选项|安全| Internet |启用保护模式中看到)。但是,如果然后导航()到“受信任站点”列表中的URL,则需要在不使用保护模式的情况下打开该URL。然后IE将静默地创建一个新进程,使旧的IWebBrowser2无效,并创建一个新的IWebBrowser2
DISPID\u NEWPROCESS
如果您使用CoCreateInstance(CLSID\u InternetExplorer)
启动一个新的IWebBrowser2
,则默认情况下它将以保护模式启动(您可以在Internet选项|安全| Internet |启用保护模式中看到)。但是,如果然后导航()
到“受信任站点”列表中的URL,则需要在不使用保护模式的情况下打开该URL。然后IE将静默地创建一个新进程,使旧的IWebBrowser2
无效,并创建一个新的IWebBrowser2
。然后你的IWebBrowser2
就没用了,这肯定是个问题
但是,IE应该触发DISPID_NEWPROCESS
事件,该事件的第二个参数中应该包含新进程的IDispatch*
问题是,
pWB2
参数将包含NULL
我已调试IE,并发现如果您的ProtectedMode(低完整性)IWebBrowser2
变为非ProtectedMode(中等完整性)IWebBrowser2
,该参数将包含NULL
详细信息:
有趣的代码位于IEFRAME!CIEFrameAuto::\u HandleProtectedModeRedirect()
。它将调用IEFRAME!IsProtectedModeProcess()
并根据其结果最终将调用FireEvent\u NewProcess()
且pWB2
参数显式设置为NULL,或FireEvent\u NewProcess()
且pWB2
参数包含良好值
我相信原因是安全。否则,您可以从低完整性应用程序启动低完整性IWebBrowser2
,然后导航到受信任的URL,并获得中等完整性IWebBrowser2
,这基本上是一种权限提升