IE有很多比较恶心的弹窗。一般是用put silient禁用。但ie的证书弹窗,禁用了的话,页面就不继续加载了。
目前发现有三种方法。一种是直接hook 掉InternetErrorDlg。直接不弹窗。注意hook 函数里不是直接返回0,
要:
DWORD old_flags = 0; DWORD return_bytes = sizeof(DWORD); InternetQueryOption(hRequest, 99, &old_flags, &return_bytes);
ignore_flags |= old_flags; InternetSetOption(hRequest, 99, &ignore_flags, sizeof(ignore_flags));
这样设置一下。
第二种方法,翻了下windows源码,见:
privateineturlmoniappcnethttp.cxx
HRESULT CINetHttp::HttpSecurityProblem(HWND* phwnd, DWORD dwProblem)
里面有句_pHttSecurity->OnSecurityProblem(dwProblem);。
https://www.codesd.com/item/ignore-ssl-security-alerts-from-the-web-browser-in-the-console-application.html】
这文章写了怎么重载。不过我没看懂C 怎么实现。
三是逆向wininet的代码发现,会走CoInternetIsFeatureEnabled(0x14, 2). 这里也许可以设置一下。不过好像没成功。
参考:
https://chromium.googlesource.com/chromium/chromium/ /master/chrome_frame/urlmon_url_request.cc
G:mycodewxWidgets-3.1.3srcmswwebview_ie.cpp
user32.dll!_DialogBox2@16() 未知 非用户代码。已加载符号。 user32.dll!_InternalDialogBox@24() 未知 非用户代码。已加载符号。 user32.dll!_DialogBoxIndirectParamAorW@24() 未知 非用户代码。已加载符号。 user32.dll!_DialogBoxParamW@20() 未知 非用户代码。已加载符号。 wininet.dll!_IsolationAwareDialogBoxParamW@20() 未知 非用户代码。已加载符号。 wininet.dll!LaunchDlg() 未知 非用户代码。已加载符号。 wininet.dll!LaunchInternetErrorDlg() 未知 非用户代码。已加载符号。 wininet.dll!InternetErrorDlg 未知 非用户代码。已加载符号。 > fast_mb.exe!Hook_InternetErrorDlg 行 2391 C 已加载符号。 urlmon.dll!CINetHttp::HttpSecurity 行 4001 C 非用户代码。已加载符号。 urlmon.dll!CINetHttp::HandleHttpSecurityError 行 2214 C 非用户代码。已加载符号。 urlmon.dll!CINetHttp::QueryStatusOnResponse 行 2092 C 非用户代码。已加载符号。 urlmon.dll!CINet::QueryInfoOnResponse 行 6561 C 非用户代码。已加载符号。 urlmon.dll!CINet::INetQueryInfo 行 4306 C 非用户代码。已加载符号。 urlmon.dll!CINet::OnINetInternal 行 5793 C 非用户代码。已加载符号。 urlmon.dll!CINet::Continue 行 1447 C 非用户代码。已加载符号。 urlmon.dll!COInetProt::Continue 行 556 C 非用户代码。已加载符号。
> user32.dll!_NtUserGetMessage@16() 未知 非用户代码。已加载符号。 user32.dll!_GetMessageW@16() 未知 非用户代码。已加载符号。 mshtml.dll!InternalShowModalDialog() 未知 非用户代码。已加载符号。 mshtml.dll!_ShowModalDialog@20() 未知 非用户代码。已加载符号。 ieframe.dll!CDocHostUIHandler::ShowErrorDialog() 未知 非用户代码。已加载符号。 ieframe.dll!CDocHostUIHandler::Exec 未知 非用户代码。已加载符号。 mshtml.dll!CWindow::ShowErrorDialog 未知 非用户代码。已加载符号。 mshtml.dll!COmWindowProxy::Fire_onerror 未知 非用户代码。已加载符号。 mshtml.dll!CMarkup::ReportScriptError 未知 非用户代码。已加载符号。 mshtml.dll!CActiveScriptHolder::OnScriptError 未知 非用户代码。已加载符号。 jscript9.dll!08638edd() 未知 非用户代码。无法查找或打开 PDB 文件。 jscript9.dll![下面的框架可能不正确和/或缺失,没有为 jscript9.dll 加载符号] 未知 未加载任何符号。 jscript9.dll!086395f0() 未知 非用户代码。无法查找或打开 PDB 文件。 jscript9.dll!0863958c() 未知 非用户代码。无法查找或打开 PDB 文件。 jscript9.dll!0863953b() 未知 非用户代码。无法查找或打开 PDB 文件。 msvcrt.dll!__CallSettingFrame@12() 未知 非用户代码。已加载符号。 msvcrt.dll!_CallCatchBlock2() 未知 非用户代码。已加载符号。 msvcrt.dll!std::bad_exception::_Doraise() 未知 非用户代码。已加载符号。 msvcrt.dll!___CxxExceptionFilter() 未知 非用户代码。已加载符号。 msvcrt.dll!___CxxExceptionFilter() 未知 非用户代码。已加载符号。 msvcrt.dll!___InternalCxxFrameHandler() 未知 非用户代码。已加载符号。 msvcrt.dll!___CxxFrameHandler() 未知 非用户代码。已加载符号。 ntdll.dll!ExecuteHandler2@20() 未知 非用户代码。已加载符号。 ntdll.dll!ExecuteHandler@20() 未知 非用户代码。已加载符号。 03ca0fc1() 未知 非用户代码 03ca0fc1() 未知 非用户代码 jscript9.dll!084c705b() 未知 非用户代码。无法查找或打开 PDB 文件。 jscript9.dll!084c4a62() 未知 非用户代码。无法查找或打开 PDB 文件。 jscript9.dll!08532b36() 未知 非用户代码。无法查找或打开 PDB 文件。 jscript9.dll!08553171() 未知 非用户代码。无法查找或打开 PDB 文件。