给定一个简单的测试应用程序,该应用程序只按如下方式调用WinHttpOpen()
,不执行任何其他操作:
WinHttpOpen(userAgent, WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, WINHTTP_FLAG_ASYNC | WINHTTP_FLAG_SECURE_DEFAULTS);
我注意到,在Windows Server 2019(数据中心版或标准版)和较旧版本的计算机(也在Windows Server 2016标准版上进行了测试)上,上述调用失败,错误代码为87(ERROR_INVALID_PARAMETER
)。
删除WINHTTP_FLAG_SECURE_DEFAULTS
标志会使问题消失(即使随后调用。由于此标志强制执行TLS 1.2或更新版本,因此似乎需要一些操作系统级别的配置。请注意,这不会影响SChannel对TLS 1.2的使用)。
Windows Server 2019及更早版本的安装中是否存在某些通常缺失的注册表配置、功能或修补程序?
1条答案
按热度按时间vwoqyblh1#
WINHTTP_FLAG_SECURE_DEFAULTS
在旧系统上根本不存在,所以如果你尝试在旧系统上使用它,它们将不知道这个标志的含义,因此会失败。Game Development Kit (GDK) | Overviews and how-to | Networking | Web requests | WinHTTP overview
WINHTTP_FLAG_SECURE_DEFAULTS
标志是一个新标志,专门用于帮助Microsoft游戏开发工具包(GDK)游戏,通过设置建议的安全连接行为来遵守安全最佳实践。**它在Xbox One主机上可用,并将在未来的Windows操作系统更新中在Windows PC上可用。尝试在现有Windows操作系统版本上传递WINHTTP_FLAG_SECURE_DEFAULTS
会导致无效参数失败。**此标志具有显著的副作用-它强制WinHTTP进入异步模式,因为此标志隐式包含WINHTTP_FLAG_ASYNC
标志。在不支持此标志的Windows PC操作系统版本上,应改为传递WINHTTP_FLAG_ASYNC
,以最大限度地减少WinHTTP实现的其余部分之间的差异。