gpt4 book ai didi

c++ - 在 Windows 2008 R2 SP1 上使用 GetVersionEx 时的错误行为

转载 作者:可可西里 更新时间:2023-11-01 10:00:59 34 4
gpt4 key购买 nike

我想检查Windows 操作系统的版本是否为Windows 2008 或更高版本。我正在使用以下代码,它在我的环境中运行良好,但有人(客户)报告说它不能在他们的生产操作系统环境中运行,但可以在具有 Windows 2008 R2 SP1 的其他系统上运行。它不工作意味着它返回 false 即使操作系统是 Windows 2008 R2 SP1。代码有什么问题?

bool CheckIfOperatingISWindowsServer2K8orAbove()
{
OSVERSIONINFOEX winOSInfo;
winOSInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);
GetVersionEx(&winOSInfo);

//Check if windows version is 6 (i.e longhorn) and its windows server
if( winOSInfo.dwPlatformId==VER_PLATFORM_WIN32_NT && winOSInfo.dwMajorVersion == 6 && winOSInfo.wProductType == VER_NT_SERVER)
{
if ( winOSInfo.dwMinorVersion == 0 || winOSInfo.dwMinorVersion == 1 )
return true;
}

return false;
}

我认为唯一缺少的部分是没有使用 ZeroMemory(&winfo, sizeof(OSVERSIONINFOEX)); 将 winOSInfo 初始化为值 0;

你怎么看?您认为不初始化 OSVERSIONINFOEX 结构会导致此类问题吗?

提前致谢。

最佳答案

您能否与您的客户确认他们的服务器 2008 R2 是否配置为域 Controller ?

因为在结构文档中OSVERSIONINFOEX在 wProductType/VER_NT_SERVER 中指出:

Note that a server that is also a domain controller is reported as VER_NT_DOMAIN_CONTROLLER, not VER_NT_SERVER.

在这种情况下,您的代码不会给出预期的结果。

关于c++ - 在 Windows 2008 R2 SP1 上使用 GetVersionEx 时的错误行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8499853/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com