此调度也称为DISPID_NEWPROCESS
。
如果您使用IWebBrowser2
启动新CoCreateInstance(CLSID_InternetExplorer)
,则默认情况下会以保护模式启动(您可以在Internet选项|安全| Internet |启用保护模式下查看)。但是,如果您Navigate()
到“受信任的站点”列表中的URL,则需要在没有保护模式的情况下打开。然后,IE将以静默方式创建新进程,使旧IWebBrowser2
无效并创建新的IWebBrowser2
。然后你的IWebBrowser2
变得毫无用处,这肯定是个问题。
但是,IE应该触发DISPID_NEWPROCESS
事件,该事件应该在第二个参数中为新进程IDispatch*
。
问题是pWB2
参数将包含NULL
。
答案 0 :(得分:1)
我已经调试了IE,并且如果您的ProtectedMode(低完整性)NULL
变为非ProtectedMode(中等完整性)IWebBrowser2
,则发现该参数将为IWebBrowser2
。
<强>详细信息:强>
有趣的代码位于IEFRAME!CIEFrameAuto::_HandleProtectedModeRedirect()
。它将调用IEFRAME!IsProtectedModeProcess()
并根据其结果最终调用FireEvent_NewProcess()
pWB2
参数显式设置为NULL,或FireEvent_NewProcess()
pWB2
参数包含良好值
我相信原因是安全。否则,您可以从低完整性应用程序启动低完整性IWebBrowser2
,然后导航到受信任的URL,并保持中等完整性IWebBrowser2
,这基本上是权限提升。