none
关于IE的保护模式? RRS feed

  • 问题

  • IEIsProtectedModeProcess()是从IE进程中去判断IE是否处于保护模式,现在我需要从外部进程判断IE是否处于保护模式该怎么做?

    我想在IE保护模式开启情况下,使用Iwebbrowser控件,但是保护模式下一些接口获取不到!!

    I have several question : As I know function IEIsProtectedModeProcess used from within IE extension ,Is there way to know programmatically whether Internet Explorer run in protected mode outside of IE(from another non-IE process) ?

    Thanks


    2011年4月22日 2:00

答案

  • 像你这样遥控IE进程的话,的确会受保护模式限制,你的Navigate甚至都没有在新创建的那个IE进程中执行,而是启动了一个新的IE进程,因为跨了integrity level。

     

    由于一般的跨integrity level进程通讯方式会受UIPI阻挡,COM跨进程列集不会起作用。你应该先判断URL是保护模式还是受信模式,然后首先创建一个对应integrity level的进程来控制对应integrity level的IE。

     



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年4月25日 16:47
    版主

全部回复

  • 可以写一个BHO来通知你的程序。

    保护模式是相对于标签页进程来说的,IE框架进程不在保护模式下。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年4月22日 16:56
    版主
  • 就是说必须实现一个IE插件来检测是否开启保护模式,然后通知我的程序?那这样系统必须首先启动一个IE才能检测到吧,
    如果系统从来没有启动过IE,而我又想知道是否开启保护模式呢?

    现在的问题就是我在自己的程序中使用IWebBrowser控件,在保护模式开启的情况下,Navigate不会隐藏IE,IDispatch的接口获得不了,保护模式关闭的话程序就没有任何问题??

    2011年4月25日 2:44
  • 你的理解可能有点问题,保护模式是在IE中控制新进程在什么integrity level下打开,如果新的页面需要在不同integrity level下打开则可能需要创建一个新的IE进程,在IE7下甚至要另开一个IE窗口。

    保护模式是相对于IE的标签页而言的。浏览器控件没有自己的进程,所以总是继承当前进程的integrity level。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年4月25日 3:55
    版主
  •  HRESULT hr; 
     CLSID clsid; 
     IUnknown     *pUnknown = NULL; 
     IWebBrowser2 *pWebBrowser2 = NULL; 
     IOleCommandTarget* pCommandTarget = NULL; 
     IDispatch *pDispatch = NULL; 
     VARIANT va; 
     OLECHAR sOleChar[MAX_PATH];
     CoInitialize(NULL); 
     CLSIDFromProgID(L"InternetExplorer.Application", &clsid); 
     hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL, IID_IUnknown, (void  **)&pUnknown);
     if (SUCCEEDED(hr)) 
     {
      hr = pUnknown->QueryInterface(IID_IWebBrowser2, (void **)&pWebBrowser2); 
      if (SUCCEEDED(hr))
      { 
       MultiByteToWideChar(CP_ACP, 0, sURL, -1, sOleChar, sizeof sOleChar);
       BT_TRACE(_T("Print_html:sOleChar %s\n"),sOleChar);
       BSTR bstrURL = SysAllocString(sOleChar);
         VariantInit(&va); 
       va.vt = VT_I4; 
       va.lVal = 0; 
       hr = pWebBrowser2->Navigate(bstrURL, &va, &va, &va, &va);////这里IE不会隐藏????
       VARIANT_BOOL busy = VARIANT_TRUE;
       pWebBrowser2->get_Busy(&busy);
       while(VARIANT_TRUE == busy)
       {
        pWebBrowser2->get_Busy(&busy);
       }


        if (SUCCEEDED(hr))
       {
         pWebBrowser2->put_Visible(VARIANT_FALSE);
       }
       else
       {
        pWebBrowser2->Quit();
       }
       SysFreeString (bstrURL); 
       hr = pWebBrowser2->get_Document(&pDispatch);////pDispatch接口无法获得

    我的进程是在默认的integrity level下,即medium level下,但是IE在保护模式下,所以那个pDispatch获得失败,如果我把IE保护模式关闭,代码正常,所以我不知道如何解决,我是新手,还请告诉我解决办法和资料去哪里找,MSDN看了半天也不知道如何入手,非常感谢!

    2011年4月25日 9:29
  • 像你这样遥控IE进程的话,的确会受保护模式限制,你的Navigate甚至都没有在新创建的那个IE进程中执行,而是启动了一个新的IE进程,因为跨了integrity level。

     

    由于一般的跨integrity level进程通讯方式会受UIPI阻挡,COM跨进程列集不会起作用。你应该先判断URL是保护模式还是受信模式,然后首先创建一个对应integrity level的进程来控制对应integrity level的IE。

     



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年4月25日 16:47
    版主
  • 问题就是如何判断URL是保护模式还是受信模式?我打开的是本地的html文件,IE打开时不会启用保护模式吧? 要是不好做的话,我直接用SHELL命令算了,谢谢大侠

    2011年4月26日 3:35
  • IEIsProtectedModeURL 

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年4月26日 3:38
    版主