高整合性 (管理者) プロセスからIE8 IEGetProtectedModeCookie APIを呼び出す必要があります。Azure webapp からこの API を呼び出すたびに、ERROR_INVALID_ACCESSが発生します。整合性の高いプロセスがこの API を呼び出すことができないことを多くの場所で読みましたが、私の場合は、昇格された特権で Azure サンドボックスを実行する必要があります。
下位レベルの整合性プロセスからこの API を呼び出す方法はありますか? Azure サンドボックスの場合、昇格された特権で Web アプリケーションを実行する必要があります。
[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;
}