为什么DWebBrowserEvents2 :: NewProcess()在第二个参数中收到pWB2 == NULL

时间:2015-05-14 16:47:05

标签: internet-explorer com automation bho

此调度也称为DISPID_NEWPROCESS

如果您使用IWebBrowser2启动新CoCreateInstance(CLSID_InternetExplorer),则默认情况下会以保护模式启动(您可以在Internet选项|安全| Internet |启用保护模式下查看)。但是,如果您Navigate()到“受信任的站点”列表中的URL,则需要在没有保护模式的情况下打开。然后,IE将以静默方式创建新进程,使旧IWebBrowser2无效并创建新的IWebBrowser2。然后你的IWebBrowser2变得毫无用处,这肯定是个问题。

但是,IE应该触发DISPID_NEWPROCESS事件,该事件应该在第二个参数中为新进程IDispatch*

问题是pWB2参数将包含NULL

1 个答案:

答案 0 :(得分:1)

我已经调试了IE,并且如果您的ProtectedMode(低完整性)NULL变为非ProtectedMode(中等完整性)IWebBrowser2,则发现该参数将为IWebBrowser2

<强>详细信息:

有趣的代码位于IEFRAME!CIEFrameAuto::_HandleProtectedModeRedirect()。它将调用IEFRAME!IsProtectedModeProcess()并根据其结果最终调用FireEvent_NewProcess() pWB2参数显式设置为NULL,或FireEvent_NewProcess() pWB2参数包含良好值

我相信原因是安全。否则,您可以从低完整性应用程序启动低完整性IWebBrowser2,然后导航到受信任的URL,并保持中等完整性IWebBrowser2,这基本上是权限提升。