2011-11-06 2 views
1

나는이 목록이 있습니다번역 GetVersionEx 함수 번호는

dwPlatformId.dwMajorVersion.dwMinorVersion.dwBuildNumber 

그리고 내가 알고 싶은 :

윈도우 버전의 목록입니다
2.5.1.2600 
2.5.2.3790 
2.6.0.6000 
2.6.0.6001 
2.6.0.6002 
2.6.1.7600 
2.6.1.7601 

, 정보는 GetVersionEx 함수에서 유래를, 숫자는 그 번호의 Windows 버전 이름 예 : "Win XP SP2"

나는 인터넷 검색을 시도했지만 다른 곳에서는 숫자가 XP SP2이고 다른 정보는 SP3입니다.

5.0을 Win 2000, 5.1을 XP 등으로 식별 할 수 있습니다.하지만 SP 버전이 필요하며 Pro 또는 Home 버전 인 경우 dwBuildNumber에 해당 정보가 포함되어 있다고 생각합니다.

숫자를 버전 이름으로 변환하는 방법을 아는 사람이 있습니까?

답변

3

당신은 목록 here 또는 here을 찾을 수 있습니다

Windows 7     6.1 
Windows Server 2008 R2  6.1 
Windows Server 2008   6.0 
Windows Vista    6.0 
Windows Server 2003 R2  5.2 
Windows Server 2003   5.2 
Windows XP 64-Bit Edition 5.2 
Windows XP     5.1 
Windows 2000    5.0 
+0

는하지만 실 거예요 SP 말해 여기에 다시 쓰기 전에 기존 문서의 보관 된 버전입니다 그 페이지는 dwBuildNumber에 대한 많은 정보를 가지고 있지 않습니다 – user979390

+0

@ user979390 http://en.wikipedia.org/wiki/Microsoft_version_numbering –

+0

@ user979390을 보셨습니까? VB에서 다음과 같이 처리됩니다 : http : //vbnet.mvps. org/index.html? code/system/getversionex.htm –

-1

MSDN은 어떻게 이름에 OS 버전 정보를 매핑하는 방법을 보여줍니다 기사, Getting the System Version을 가지고 있습니다.

업데이트 : Microsoft는 Version Helper Functions을 소개 할 때 기사를 다시 작성합니다.

좋은 측정을 위해

https://web.archive.org/web/20130325103916/http://msdn.microsoft.com/en-us/library/ms724429.aspx

, 여기에 기사의 코드입니다 :

#include <windows.h> 
#include <tchar.h> 
#include <stdio.h> 
#include <strsafe.h> 

#pragma comment(lib, "User32.lib") 

#define BUFSIZE 256 

typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); 
typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD); 

BOOL GetOSDisplayString(LPTSTR pszOS) 
{ 
    OSVERSIONINFOEX osvi; 
    SYSTEM_INFO si; 
    PGNSI pGNSI; 
    PGPI pGPI; 
    BOOL bOsVersionInfoEx; 
    DWORD dwType; 

    ZeroMemory(&si, sizeof(SYSTEM_INFO)); 
    ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); 

    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); 
    bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*) &osvi); 

    if(!bOsVersionInfoEx) return 1; 

    // Call GetNativeSystemInfo if supported or GetSystemInfo otherwise. 

    pGNSI = (PGNSI) GetProcAddress(
     GetModuleHandle(TEXT("kernel32.dll")), 
     "GetNativeSystemInfo"); 
    if(NULL != pGNSI) 
     pGNSI(&si); 
    else GetSystemInfo(&si); 

    if (VER_PLATFORM_WIN32_NT==osvi.dwPlatformId && 
     osvi.dwMajorVersion > 4) 
    { 
     StringCchCopy(pszOS, BUFSIZE, TEXT("Microsoft ")); 

     // Test for the specific product. 

     if (osvi.dwMajorVersion == 6) 
     { 
     if(osvi.dwMinorVersion == 0) 
     { 
      if(osvi.wProductType == VER_NT_WORKSTATION) 
       StringCchCat(pszOS, BUFSIZE, TEXT("Windows Vista ")); 
      else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2008 ")); 
     } 

     if (osvi.dwMinorVersion == 1) 
     { 
      if(osvi.wProductType == VER_NT_WORKSTATION) 
       StringCchCat(pszOS, BUFSIZE, TEXT("Windows 7 ")); 
      else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2008 R2 ")); 
     } 

     if (osvi.dwMinorVersion == 2) 
     { 
      if(osvi.wProductType == VER_NT_WORKSTATION) 
       StringCchCat(szOS, BUFSIZE, TEXT("Windows 8 ")); 
      else StringCchCat(szOS, BUFSIZE, TEXT("Windows Server 2012 ")); 
     } 

     pGPI = (PGPI) GetProcAddress(
      GetModuleHandle(TEXT("kernel32.dll")), 
      "GetProductInfo"); 

     pGPI(osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.wServicePackMajor, osvi.wServicePackMinor, &dwType); 

     switch(dwType) 
     { 
      case PRODUCT_ULTIMATE: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Ultimate Edition")); 
       break; 
      case PRODUCT_PROFESSIONAL: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Professional")); 
       break; 
      case PRODUCT_HOME_PREMIUM: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Home Premium Edition")); 
       break; 
      case PRODUCT_HOME_BASIC: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Home Basic Edition")); 
       break; 
      case PRODUCT_ENTERPRISE: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition")); 
       break; 
      case PRODUCT_BUSINESS: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Business Edition")); 
       break; 
      case PRODUCT_STARTER: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Starter Edition")); 
       break; 
      case PRODUCT_CLUSTER_SERVER: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Cluster Server Edition")); 
       break; 
      case PRODUCT_DATACENTER_SERVER: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition")); 
       break; 
      case PRODUCT_DATACENTER_SERVER_CORE: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition (core installation)")); 
       break; 
      case PRODUCT_ENTERPRISE_SERVER: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition")); 
       break; 
      case PRODUCT_ENTERPRISE_SERVER_CORE: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition (core installation)")); 
       break; 
      case PRODUCT_ENTERPRISE_SERVER_IA64: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition for Itanium-based Systems")); 
       break; 
      case PRODUCT_SMALLBUSINESS_SERVER: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Small Business Server")); 
       break; 
      case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Small Business Server Premium Edition")); 
       break; 
      case PRODUCT_STANDARD_SERVER: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition")); 
       break; 
      case PRODUCT_STANDARD_SERVER_CORE: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition (core installation)")); 
       break; 
      case PRODUCT_WEB_SERVER: 
       StringCchCat(pszOS, BUFSIZE, TEXT("Web Server Edition")); 
       break; 
     } 
     } 

     if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) 
     { 
     if(GetSystemMetrics(SM_SERVERR2)) 
      StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2003 R2, ")); 
     else if (osvi.wSuiteMask & VER_SUITE_STORAGE_SERVER) 
      StringCchCat(pszOS, BUFSIZE, TEXT("Windows Storage Server 2003")); 
     else if (osvi.wSuiteMask & VER_SUITE_WH_SERVER) 
      StringCchCat(pszOS, BUFSIZE, TEXT("Windows Home Server")); 
     else if(osvi.wProductType == VER_NT_WORKSTATION && 
        si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) 
     { 
      StringCchCat(pszOS, BUFSIZE, TEXT("Windows XP Professional x64 Edition")); 
     } 
     else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2003, ")); 

     // Test for the server type. 
     if (osvi.wProductType != VER_NT_WORKSTATION) 
     { 
      if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_IA64) 
      { 
       if(osvi.wSuiteMask & VER_SUITE_DATACENTER) 
        StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition for Itanium-based Systems")); 
       else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE) 
        StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition for Itanium-based Systems")); 
      } 

      else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) 
      { 
       if(osvi.wSuiteMask & VER_SUITE_DATACENTER) 
        StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter x64 Edition")); 
       else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE) 
        StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise x64 Edition")); 
       else StringCchCat(pszOS, BUFSIZE, TEXT("Standard x64 Edition")); 
      } 

      else 
      { 
       if (osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER) 
        StringCchCat(pszOS, BUFSIZE, TEXT("Compute Cluster Edition")); 
       else if(osvi.wSuiteMask & VER_SUITE_DATACENTER) 
        StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition")); 
       else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE) 
        StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition")); 
       else if (osvi.wSuiteMask & VER_SUITE_BLADE) 
        StringCchCat(pszOS, BUFSIZE, TEXT("Web Edition")); 
       else StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition")); 
      } 
     } 
     } 

     if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1) 
     { 
     StringCchCat(pszOS, BUFSIZE, TEXT("Windows XP ")); 
     if(osvi.wSuiteMask & VER_SUITE_PERSONAL) 
      StringCchCat(pszOS, BUFSIZE, TEXT("Home Edition")); 
     else StringCchCat(pszOS, BUFSIZE, TEXT("Professional")); 
     } 

     if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) 
     { 
     StringCchCat(pszOS, BUFSIZE, TEXT("Windows 2000 ")); 

     if (osvi.wProductType == VER_NT_WORKSTATION) 
     { 
      StringCchCat(pszOS, BUFSIZE, TEXT("Professional")); 
     } 
     else 
     { 
      if(osvi.wSuiteMask & VER_SUITE_DATACENTER) 
       StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Server")); 
      else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE) 
       StringCchCat(pszOS, BUFSIZE, TEXT("Advanced Server")); 
      else StringCchCat(pszOS, BUFSIZE, TEXT("Server")); 
     } 
     } 

     // Include service pack (if any) and build number. 

     if(_tcslen(osvi.szCSDVersion) > 0) 
     { 
      StringCchCat(pszOS, BUFSIZE, TEXT(" ")); 
      StringCchCat(pszOS, BUFSIZE, osvi.szCSDVersion); 
     } 

     TCHAR buf[80]; 

     StringCchPrintf(buf, 80, TEXT(" (build %d)"), osvi.dwBuildNumber); 
     StringCchCat(pszOS, BUFSIZE, buf); 

     if (osvi.dwMajorVersion >= 6) 
     { 
     if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) 
      StringCchCat(pszOS, BUFSIZE, TEXT(", 64-bit")); 
     else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL) 
      StringCchCat(pszOS, BUFSIZE, TEXT(", 32-bit")); 
     } 

     return TRUE; 
    } 

    else 
    { 
     printf("This sample does not support this version of Windows.\n"); 
     return FALSE; 
    } 
} 

int __cdecl _tmain() 
{ 
    TCHAR szOS[BUFSIZE]; 

    if(GetOSDisplayString(szOS)) 
     _tprintf(TEXT("\n%s\n"), szOS); 
} 
+0

입니다. 이것은 사용자에게 OS 이름을 제공하지 않음을 유의하십시오. 그것은 당신에게 그 OS를위한 '최소 바'를 제공합니다. ''VersionHelpers.h'' 헤더는''VerifyVersionInfo''를 사용하여 정확한 일치가 아닌 최소값을 설정합니다. –

+0

@ChuckWalbourn : 3 년 전 *이 답변을 작성했을 때, 내가 링크 된 MSDN 기사는 매우 다르고 GetVersionEx() 값을 자세한 OS 이름 문자열로 변환하는 많은 코드를 보여줍니다. 이 코드는 Microsoft에서 버전 도우미 기능을 도입했을 때 기사에서 삭제되었습니다. 이전 기사의 보관 된 버전에 대한 링크를 포함하도록 답변을 업데이트했습니다. –

+0

죄송합니다 ... 6 명의 사람들이''GetVersionEx''가 올바른 대답이라고 생각한 바로 그 이유는 오랫동안 그토록 많은 문제가있었습니다. 'VerifyVersionInfo'는 14 년 전의 정답입니다 *. 즉, MSDN은 API 참조에서이 항목을 지적하는 것이 항상 좋은 것은 아니며 오도 된 페이지에 쉽게 착륙 할 수 있습니다. 아무튼, 업데이트 주셔서 감사합니다. –