Как вызвать IEGetProtectedModeCookie API из процесса с высокой степенью целостности (администратора)? - PullRequest
3 голосов
/ 22 октября 2011

Мне нужно вызвать IE8 IEGetProtectedModeCookie API из процесса с высокой степенью целостности (admin) . Всякий раз, когда я вызываю этот API из своего веб-приложения Azure, я получаю ERROR_INVALID_ACCESS . Я читал во многих местах, что процессы с высоким уровнем целостности не могут вызывать этот API, но в моем случае мне нужно запустить изолированную программную среду Azure с повышенными привилегиями.

Есть ли способ вызвать этот API из процесса целостности более низкого уровня? Для песочницы Azure я вынужден запустить свое веб-приложение с повышенными привилегиями.

  [DllImport("ieframe.dll", CharSet = CharSet.Unicode, EntryPoint = "IEGetProtectedModeCookie", SetLastError = true)]
  public static extern int IEGetProtectedModeCookie(String url, String cookieName, StringBuilder cookieData, ref int size, int flag);

  private static string GetProtectedModeIECookieValue(string cookieName)
  {
     String r = String.Empty;

     int iSize = 4096;
     StringBuilder sbValue = new StringBuilder(iSize);

     Uri reqUri = HttpContext.Current.Request.Url;
     string baseUrl = String.Format(@"{0}://{1}", reqUri.Scheme, reqUri.Authority);

     int hResult = IEGetProtectedModeCookie(baseUrl, cookieName, sbValue, ref iSize, 0);

     if (hResult == 0)
     {
        string[] parts = sbValue.ToString().Split('=');
        r = parts[1];
        HttpContext.Current.Response.Write(r);
     }
     else
     {
        //HttpContext.Current.Response.Write("Failed to get cookie. HRESULT=0x" + hResult.ToString("x") + "\nLast Win32Error=" + Marshal.GetLastWin32Error().ToString());
     }

     return r;
  }
...