Неправильное поведение при использовании GetVersionEx в Windows 2008 R2 SP1

Я хочу проверить, является ли версия операционной системы 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 вызывает такие проблемы?

Заранее спасибо.


person Rahul    schedule 14.12.2011    source источник


Ответы (1)


Не могли бы вы уточнить у своего клиента, настроен ли его сервер 2008 R2 в качестве контроллера домена?

Потому что в документации структуры OSVERSIONINFOEX указано, в wProductType/VER_NT_SERVER:

Обратите внимание, что сервер, который также является контроллером домена, сообщается как VER_NT_DOMAIN_CONTROLLER, а не VER_NT_SERVER.

И в этом случае ваш код не даст ожидаемого результата.

person Alain    schedule 14.12.2011
comment
Это сработало просто отлично. Для контроллера домена wProductType возвращается как VER_NT_DOMAIN_CONTROLLER. Спасибо, я исправил эту проблему сейчас. - person Rahul; 14.12.2011
comment
@Rahul: очевидно, что нужно проверить winOSInfo.wProductType != VER_NT_WORKSTATION - person Cody Gray; 18.12.2011