Я хочу проверить, является ли версия операционной системы 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;
}
Я думаю, что единственная недостающая часть - это не инициализация winOSInfo до значения 0 с использованием ZeroMemory(&winfo, sizeof(OSVERSIONINFOEX));
Каково ваше мнение? Как вы думаете, не инициализация структуры OSVERSIONINFOEX вызывает такие проблемы?
Заранее спасибо.