2010-06-25 6 views
1

Привет всем и спасибо, что нашли время, чтобы прочитать это. У меня есть приложение C#, где я хочу переопределить настройки cookie WinInet по умолчанию. Цель состоит в том, что даже если для параметров конфиденциальности WinInet cookie системы установлено значение «Блокировать все», в моем процессе куки все равно будут приниматься. Читая документацию, это выглядело достаточно просто. Вот очистили версию того, что у меня есть:WinInet InternetSetOption с опцией INTERNET_OPTION_SUPPRESS_BEHAVIOR не работает должным образом

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, и это не имеет значения. Куки-файлы по-прежнему блокируются в моем процессе.

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

+0

Какая ошибка вы получаете? Я предполагаю, что для вызова этого API требуются повышенные разрешения. –

+0

Джим, спасибо за вопрос - на самом деле, никакая ошибка не возвращается. Вызовы возвращаются успешно, но я не вижу изменений в обработке файлов cookie. Эффект вызова должен применяться только к текущему процессу, поэтому возвышение не должно быть проблемой. – Ross

ответ

0

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

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

+0

Спасибо за ответ. Мой вопрос содержал ошибку из-за того, что я экспериментировал с разными значениями флага. INTERNET_SUPPRESS_COOKIE_POLICY также не имеет никакого эффекта. Я бы предпочел не использовать InternetSetPerSiteCookieDecision(), так как я не хочу изменять настройки пользователя. INTERNET_OPTION_SUPPRESS_BEHAVIOR кажется идеальным решением, поскольку он просто влияет на текущий процесс ... если он будет работать. – Ross