【问题标题】:Why DWebBrowserEvents2::NewProcess() receives pWB2==NULL in second parameter为什么 DWebBrowserEvents2::NewProcess() 在第二个参数中接收 pWB2==NULL
【发布时间】:2015-07-26 09:24:33
【问题描述】:

此调度也称为DISPID_NEWPROCESS

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

但是,IE 应该触发 DISPID_NEWPROCESS 事件,该事件的第二个参数中应该有 IDispatch* 用于新进程。

问题是pWB2 参数将包含NULL

【问题讨论】:

    标签: internet-explorer com automation bho


    【解决方案1】:

    我调试了IE,发现如果你的ProtectedMode(低完整性)@9​​87654322@变成非ProtectedMode(中等完整性)@9​​87654323@,参数将有NULL

    详情:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 2016-11-18
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      • 2010-11-29
      相关资源
      最近更新 更多