푸른나무그늘

마음이 쉬는 곳...

포토로그


QR CODE

이글루스 구글 검색엔진


Twitter


OS Version 얻어오기 //프로그래밍//

OS Version 얻어오는 코드 구현 할 때마다 찾아서 하려니 귀찮아서 블로그에 올려둡니다.
이 코드는 Windows 2000 부터 Windows 7 까지의 버전 정보를 구분합니다.

코드를 가져와 실행 해보니 Windows 7을 구분 못하길래
살펴보니 Windows 7 이 빠져 있어서 추가 하였습니다.

=============================================================
#include <windows.h>
#include <strsafe.h>

#define BUFSIZE 256

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

BOOL GetOSDisplayString( LPSTR pszOS)
{
OSVERSIONINFOEX osvi;
SYSTEM_INFO si;
PGNSI pGNSI;
PGPI pGPI;
BOOL bOsVersionInfoEx;
DWORD dwType;
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;

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

osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
return 1;
}

// Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.

pGNSI = (PGNSI) GetProcAddress(GetModuleHandle("kernel32.dll"), "GetNativeSystemInfo");

if(NULL != pGNSI)
pGNSI(&si);
else GetSystemInfo(&si);

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

// Test for the specific product.

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

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

pGPI( 6, 0, 0, 0, &dwType);

switch( dwType )
{
case PRODUCT_ULTIMATE:
StringCchCat(pszOS, BUFSIZE, "Ultimate Edition" );
break;
case PRODUCT_HOME_PREMIUM:
StringCchCat(pszOS, BUFSIZE, "Home Premium Edition" );
break;
case PRODUCT_HOME_BASIC:
StringCchCat(pszOS, BUFSIZE, "Home Basic Edition" );
break;
case PRODUCT_ENTERPRISE:
StringCchCat(pszOS, BUFSIZE, "Enterprise Edition" );
break;
case PRODUCT_BUSINESS:
StringCchCat(pszOS, BUFSIZE, "Business Edition" );
break;
case PRODUCT_STARTER:
StringCchCat(pszOS, BUFSIZE, "Starter Edition" );
break;
case PRODUCT_CLUSTER_SERVER:
StringCchCat(pszOS, BUFSIZE, "Cluster Server Edition" );
break;
case PRODUCT_DATACENTER_SERVER:
StringCchCat(pszOS, BUFSIZE, "Datacenter Edition" );
break;
case PRODUCT_DATACENTER_SERVER_CORE:
StringCchCat(pszOS, BUFSIZE, "Datacenter Edition (core installation)" );
break;
case PRODUCT_ENTERPRISE_SERVER:
StringCchCat(pszOS, BUFSIZE, "Enterprise Edition" );
break;
case PRODUCT_ENTERPRISE_SERVER_CORE:
StringCchCat(pszOS, BUFSIZE, "Enterprise Edition (core installation)" );
break;
case PRODUCT_ENTERPRISE_SERVER_IA64:
StringCchCat(pszOS, BUFSIZE, "Enterprise Edition for Itanium-based Systems" );
break;
case PRODUCT_SMALLBUSINESS_SERVER:
StringCchCat(pszOS, BUFSIZE, "Small Business Server" );
break;
case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
StringCchCat(pszOS, BUFSIZE, "Small Business Server Premium Edition" );
break;
case PRODUCT_STANDARD_SERVER:
StringCchCat(pszOS, BUFSIZE, "Standard Edition" );
break;
case PRODUCT_STANDARD_SERVER_CORE:
StringCchCat(pszOS, BUFSIZE, "Standard Edition (core installation)" );
break;
case PRODUCT_WEB_SERVER:
StringCchCat(pszOS, BUFSIZE, "Web Server Edition" );
break;
}
if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
StringCchCat(pszOS, BUFSIZE,  ", 64-bit" );
else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL )
StringCchCat(pszOS, BUFSIZE, ", 32-bit");
}

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

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

pGPI( 6, 0, 0, 0, &dwType);

switch( dwType )
{
case PRODUCT_ULTIMATE:
StringCchCat(pszOS, BUFSIZE, "Ultimate Edition" );
break;
case PRODUCT_HOME_PREMIUM:
StringCchCat(pszOS, BUFSIZE, "Home Premium Edition" );
break;
case PRODUCT_HOME_BASIC:
StringCchCat(pszOS, BUFSIZE, "Home Basic Edition" );
break;
case PRODUCT_ENTERPRISE:
StringCchCat(pszOS, BUFSIZE, "Enterprise Edition" );
break;
case PRODUCT_BUSINESS:
StringCchCat(pszOS, BUFSIZE, "Business Edition" );
break;
case PRODUCT_STARTER:
StringCchCat(pszOS, BUFSIZE, "Starter Edition" );
break;
case PRODUCT_CLUSTER_SERVER:
StringCchCat(pszOS, BUFSIZE, "Cluster Server Edition" );
break;
case PRODUCT_DATACENTER_SERVER:
StringCchCat(pszOS, BUFSIZE, "Datacenter Edition" );
break;
case PRODUCT_DATACENTER_SERVER_CORE:
StringCchCat(pszOS, BUFSIZE, "Datacenter Edition (core installation)" );
break;
case PRODUCT_ENTERPRISE_SERVER:
StringCchCat(pszOS, BUFSIZE, "Enterprise Edition" );
break;
case PRODUCT_ENTERPRISE_SERVER_CORE:
StringCchCat(pszOS, BUFSIZE, "Enterprise Edition (core installation)" );
break;
case PRODUCT_ENTERPRISE_SERVER_IA64:
StringCchCat(pszOS, BUFSIZE, "Enterprise Edition for Itanium-based Systems" );
break;
case PRODUCT_SMALLBUSINESS_SERVER:
StringCchCat(pszOS, BUFSIZE, "Small Business Server" );
break;
case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
StringCchCat(pszOS, BUFSIZE, "Small Business Server Premium Edition" );
break;
case PRODUCT_STANDARD_SERVER:
StringCchCat(pszOS, BUFSIZE, "Standard Edition" );
break;
case PRODUCT_STANDARD_SERVER_CORE:
StringCchCat(pszOS, BUFSIZE, "Standard Edition (core installation)" );
break;
case PRODUCT_WEB_SERVER:
StringCchCat(pszOS, BUFSIZE, "Web Server Edition" );
break;
}
if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
StringCchCat(pszOS, BUFSIZE,  ", 64-bit" );
else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL )
StringCchCat(pszOS, BUFSIZE, ", 32-bit");
}

if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
{
if( GetSystemMetrics(SM_SERVERR2) )
StringCchCat(pszOS, BUFSIZE,  "Windows Server 2003 R2, ");
else if ( osvi.wSuiteMask==VER_SUITE_STORAGE_SERVER )
StringCchCat(pszOS, BUFSIZE,  "Windows Storage Server 2003");
else if( osvi.wProductType == VER_NT_WORKSTATION &&
si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
{
StringCchCat(pszOS, BUFSIZE,  "Windows XP Professional x64 Edition");
}
else StringCchCat(pszOS, BUFSIZE, "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,  "Datacenter Edition for Itanium-based Systems" );
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
StringCchCat(pszOS, BUFSIZE,  "Enterprise Edition for Itanium-based Systems" );
}

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

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

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

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

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

// 32-bit, 64-bit 출력
fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(GetModuleHandle("kernel32"),"IsWow64Process");

if(NULL != fnIsWow64Process)
{
fnIsWow64Process(GetCurrentProcess(),&bIsWow64);

if (bIsWow64)
StringCchCat(pszOS, BUFSIZE,  " 64-bit" );
else
StringCchCat(pszOS, BUFSIZE,  " 32-bit" );
}

return TRUE; 
}
else
{
return FALSE;
}
}
=============================================================

Windows 버전 정보 참조:



덧글

  • 2012/03/17 16:25 # 답글 비공개

    비공개 덧글입니다.
  • 푸른나무 2012/03/21 10:57 #

    하핫, 아이님도 즐거운 하루 되시길 바래요~!! ^^
  • 로렌 2012/05/31 15:23 # 답글

    와아 님 코딩의 신이시네요.. 멋쟁이...
  • 푸른나무 2012/05/31 15:26 #

    보시면 알겠지만 퍼온거라구요!! ㅋㅋㅋ
    그리고 형은 저랑 분야가 좀 다르잖아요!!! ㅋㅋㅋㅋㅋ
  • 로렌 2012/05/31 16:53 # 답글

    겸손하기까지.. 아아.. 멋져..
  • 푸른나무 2012/05/31 18:01 #

    헐....... 이러지 말자구요!! ㅋㅋㅋㅋㅋ
  • 로렌 2012/06/01 10:22 # 답글

    멋진님아 저 또 놀러옴^^ 다시봐도 멋지네요~~
  • 푸른나무 2012/06/01 11:06 #

    솔직히 얘기해봐요... 졸려서 온거죠!! ㅋㅋㅋㅋㅋ
  • 로렌 2012/06/01 13:41 # 답글

    예리하기까지.. 멋쟁이에 능력자야...
  • 좋은자료라 퍼감니다 2012/06/25 09:19 # 삭제 답글

    한참 찾던 자료라 주인 허락없이 퍼갑니다.
    등록을 원하지시 않으시면 블러그에 글 남겨주세요. 삭제하겠습니다.^^;;;
  • 푸른나무 2012/06/25 19:52 #

    괜찮습니다. 저도 일부는 어딘가에서 참고한거니까요. ㅎㅎ
댓글 입력 영역



YES24