【问题标题】:WinInet InternetSetOption with INTERNET_OPTION_SUPPRESS_BEHAVIOR option not working as expected带有 INTERNET_OPTION_SUPPRESS_BEHAVIOR 选项的 WinInet InternetSetOption 无法按预期工作
【发布时间】:2010-06-25 18:43:01
【问题描述】:

大家好,感谢您抽出宝贵时间阅读本文。我有一个 c# 应用程序,我希望在其中覆盖默认的 WinInet cookie 设置。目标是即使系统 WinInet cookie 隐私设置设置为 Block All,在我的进程中,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 返回的全局 Internet 句柄作为第一个参数传递给 InternetSetOption 调用,这没有区别。 Cookie 继续在我的进程中被阻止。

我需要这样做的原因是我有一个嵌入式 Flash Player ActiveX 实例,它可以发出 Web 请求。我已成功使用其他 InternetSetOption 调用来修改 Flash 在我的进程中使用的代理设置。我正在 Windows 7 上对此进行测试。

【问题讨论】:

  • 您遇到什么错误?我猜调用这个 API 需要提升权限。
  • Jim,感谢您的提问 - 实际上,没有返回错误。调用成功返回,但我发现 cookie 处理没有任何变化。调用的效果应该只适用于当前进程,因此提升应该不是问题。

标签: c# cookies wininet suppress internetsetoption


【解决方案1】:

试试InternetSetPerSiteCookieDecision()。您必须接收 DWebBrowserEvents2::OnBeforeNavigate 并为每个域调用它,但它应该可以工作。

另外,您使用了错误的标志。如果要禁用 cookie 策略,请使用 INTERNET_SUPPRESS_COOKIE_POLICY。通过使用 RESET 标志,您启用默认策略。

【讨论】:

  • 感谢您的回答。由于我尝试了不同的标志值,我的问题包含一个错误。 INTERNET_SUPPRESS_COOKIE_POLICY 似乎也没有效果。我不想使用 InternetSetPerSiteCookieDecision(),因为我不想更改用户的设置。 INTERNET_OPTION_SUPPRESS_BEHAVIOR 似乎是理想的解决方案,因为它只会影响当前进程......如果它可以工作的话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多