WinInet InternetSetOption с опцией INTERNET_OPTION_SUPPRESS_BEHAVIOR не работает должным - PullRequest
1 голос
/ 25 июня 2010

Привет всем и спасибо, что нашли время, чтобы прочитать это. У меня есть приложение на c #, в котором я хочу переопределить стандартные настройки файлов cookie WinInet. Цель состоит в том, что даже когда в настройках конфиденциальности файлов cookie системы WinInet установлено значение «Блокировать все», файлы 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, и это не имеет значения. Файлы cookie по-прежнему блокируются в моем процессе.

Причина, по которой мне нужно это сделать, заключается в том, что у меня есть встроенный экземпляр Flash Player ActiveX, который выполняет веб-запросы. Я успешно использовал другие вызовы InternetSetOption для изменения настроек прокси-сервера, которые Flash использует в моем процессе. Я тестирую это на Windows 7.

1 Ответ

0 голосов
/ 26 июня 2010

Попробуйте InternetSetPerSiteCookieDecision () .Вам придется утопить DWebBrowserEvents2 :: OnBeforeNavigate и вызвать его для каждого домена, но он должен работать.

Кроме того, вы используете неправильный флаг.Если вы хотите отключить политику использования файлов cookie, используйте INTERNET_SUPPRESS_COOKIE_POLICY.Используя флаг RESET, вы включаете политику по умолчанию.

...