簡體   English   中英

在Windows 2008 R2 SP1上使用GetVersionEx時的錯誤行為

[英]Incorrect behavior while using GetVersionEx on Windows 2008 R2 SP1

我想檢查Windows操作系統的版本是否為Windows 2008或更高版本。 我正在使用以下代碼,它在我的環境中可以正常工作,但是有人(客戶)報告說,它不能在其生產OS環境中工作,但可以在具有Windows 2008 R2 SP1的其他系統上工作。 它無法正常工作,即使操作系統為Windows 2008 R2 SP1,它也會返回false。 代碼有什么問題?

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是否配置為域控制器?

因為在結構OSVERSIONINFOEX的文檔中指出了它,所以在wProductType / VER_NT_SERVER中:

請注意,也是域控制器的服務器報告為VER_NT_DOMAIN_CONTROLLER,而不是VER_NT_SERVER。

在這種情況下,您的代碼將無法獲得預期的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM