2015-05-14 60 views
1

此發送也被稱爲DISPID_NEWPROCESS爲什麼DWebBrowserEvents2 :: NewProcess()在第二個參數中收到pWB2 == NULL

如果您使用CoCreateInstance(CLSID_InternetExplorer)開始新的IWebBrowser2,則默認情況下它將在保護模式下啓動(您可以在Internet選項|安全|互聯網|啓用保護模式下看到它。但是,如果您然後將Navigate()添加到位於「可信站點」列表中的URL,則需要在沒有保護模式的情況下打開它。然後IE會默默地創建一個新進程,使舊的IWebBrowser2無效並創建一個新的IWebBrowser2。然後你的IWebBrowser2變得無用,這當然是一個問題。

但是,IE應該會觸發DISPID_NEWPROCESS事件,該事件在其第二個參數中應該有新進程的IDispatch*

問題是pWB2參數將包含NULL

回答

1

我調試了IE,發現如果您的ProtectedMode(低完整性)IWebBrowser2變爲非保護模式(中等完整性)IWebBrowser2,則該參數將具有NULL

詳情:

有趣的代碼位於IEFRAME!CIEFrameAuto::_HandleProtectedModeRedirect()。它將調用IEFRAME!IsProtectedModeProcess(),並根據其結果最終調用FireEvent_NewProcess(),pWB2參數明確設置爲NULL,或FireEvent_NewProcess()pWB2參數包含良好的值。

我相信原因是安全。否則,您可能會從低完整性應用程序中啓動低完整性IWebBrowser2,然後導航到受信任的URL,並獲得中等完整性IWebBrowser2,這基本上是特權升級。

相關問題