1

みなさん、こんにちは。時間を割いてこれを読んでくれてありがとう。デフォルトのWinInetCookie設定を上書きしたいac#アプリケーションがあります。目標は、システムのWinInet Cookieプライバシー設定が[すべてブロック]に設定されている場合でも、プロセス内でCookieが引き続き受け入れられるようにすることです。ドキュメントを読んで、それは十分に簡単に見えました。これが私が持っているもののクリーンアップされたバージョンです:

private unsafe void SuppressWininetBehavior()
{
    int option = (int)WinInet.SuppressBehaviorFlags.INTERNET_SUPPRESS_COOKIE_POLICY;
    int* optionPtr = &option;

    bool success = WinInet.InternetSetOption(IntPtr.Zero, WinInet.InternetOption.INTERNET_OPTION_SUPPRESS_BEHAVIOR, new IntPtr(optionPtr), sizeof(int));

    if (!success)
    {
        _log.Warn("Failed in WinInet.InternetSetOption call with INTERNET_OPTION_SUPPRESS_BEHAVIOR, INTERNET_SUPPRESS_COOKIE_POLICY");
    }
}

WinInet.InternetSetOptionは次のように定義されています。

[DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return : MarshalAs(UnmanagedType.Bool)]
public static extern bool InternetSetOption(IntPtr hInternet, InternetOption dwOption, IntPtr lpBuffer, int dwBufferLength);

そして定数は次のとおりです。

WinInet.InternetOption.INTERNET_OPTION_SUPPRESS_BEHAVIOR = 81
WinInet.SuppressBehaviorFlags.INTERNET_SUPPRESS_COOKIE_POLICY = 1

InternetSetOptionの呼び出しは成功します-エラーはありません。

また、InternetOpenによって返されたグローバルインターネットハンドルを最初のパラメーターとしてInternetSetOption呼び出しに渡してみましたが、違いはありません。クッキーは私のプロセス内で引き続きブロックされます。

これを行う必要がある理由は、Web要求を行う組み込みのFlashPlayerActiveXインスタンスがあるためです。他のInternetSetOption呼び出しを使用して、Flashがプロセスで使用するプロキシ設定を変更することに成功しました。私はこれをWindows7でテストしています。

4

1 に答える 1

0

InternetSetPerSiteCookieDecision()を試してください。DWebBrowserEvents2::OnBeforeNavigate をシンクして、ドメインごとに呼び出す必要がありますが、動作するはずです。

また、間違ったフラグを使用しています。Cookie ポリシーを無効にする場合は、INTERNET_SUPPRESS_COOKIE_POLICY を使用します。RESET フラグを使用すると、既定のポリシーが有効になります。

于 2010-06-26T00:40:45.487 に答える