#include "StdAfx.h"
#include "GetSystemInfo.h"
CGetSystemInfo::CGetSystemInfo(void)
{
}
CGetSystemInfo::~CGetSystemInfo(void)
{
}
void CGetSystemInfo::GetOSVersion()
{
CString str(L"Microsoft ");
OSVERSIONINFOEX osvi;
SYSTEM_INFO si;
BOOL bOsVersionInfoEx;
PGNSI pGNSI;
PGPI pGPI;
DWORD dwType;
ZeroMemory(&si, sizeof(SYSTEM_INFO));
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
GetVersionEx ( (OSVERSIONINFO *) &osvi);
}
pGNSI = (PGNSI)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),"GetNativeSystemInfo");
if (pGNSI != NULL)
{
pGNSI(&si);
}
else
GetSystemInfo(&si);
switch (osvi.dwPlatformId)
{
case VER_PLATFORM_WIN32_NT:
if( osvi.dwMajorVersion == 6)
{
if (osvi.dwMinorVersion > 2)
{
str.AppendFormat(_T("Windows 8 Later"));
}
if (osvi.dwMinorVersion == 2)
{
str.AppendFormat(_T("Windows 8 "));
}
if(osvi.dwMinorVersion == 1)
{
if( osvi.wProductType == VER_NT_WORKSTATION )
{
str.AppendFormat(_T("Windows 7 "));
}
else
{
str.AppendFormat(_T("Windows Server 2008 R2 "));
}
}
if(osvi.dwMinorVersion == 0)
{
if( osvi.wProductType == VER_NT_WORKSTATION )
{
str.AppendFormat(_T("Windows Vista "));
}
else
{
str.AppendFormat(_T("Windows Server 2008 "));
}
}
pGPI = (PGPI) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),"GetProductInfo");
pGPI( osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType);
switch( dwType )
{
case PRODUCT_ULTIMATE:
str.AppendFormat(_T("Ultimate Edition" ));
break;
case PRODUCT_PROFESSIONAL:
str.AppendFormat(_T("Professional" ));
break;
case PRODUCT_HOME_PREMIUM:
str.AppendFormat(_T("Home Premium Edition" ));
break;
case PRODUCT_HOME_BASIC:
str.AppendFormat(_T("Home Basic Edition" ));
break;
case PRODUCT_ENTERPRISE:
str.AppendFormat(_T("Enterprise Edition" ));
break;
case PRODUCT_BUSINESS:
str.AppendFormat(_T("Business Edition" ));
break;
case PRODUCT_STARTER:
str.AppendFormat(_T("Starter Edition" ));
break;
case PRODUCT_CLUSTER_SERVER:
str.AppendFormat(_T("Cluster Server Edition" ));
break;
case PRODUCT_DATACENTER_SERVER:
str.AppendFormat(_T("Datacenter Edition" ));
break;
case PRODUCT_DATACENTER_SERVER_CORE:
str.AppendFormat(_T("Datacenter Edition (core installation)" ));
break;
case PRODUCT_ENTERPRISE_SERVER:
str.AppendFormat(_T("Enterprise Edition" ));
break;
case PRODUCT_ENTERPRISE_SERVER_CORE:
str.AppendFormat(_T("Enterprise Edition (core installation)" ));
break;
case PRODUCT_ENTERPRISE_SERVER_IA64:
str.AppendFormat(_T("Enterprise Edition for Itanium-based Systems" ));
break;
case PRODUCT_SMALLBUSINESS_SERVER:
str.AppendFormat(_T("Small Business Server" ));
break;
case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
str.AppendFormat(_T("Small Business Server Premium Edition" ));
break;
case PRODUCT_STANDARD_SERVER:
str.AppendFormat(_T("Standard Edition" ));
break;
case PRODUCT_STANDARD_SERVER_CORE:
str.AppendFormat(_T("Standard Edition (core installation)" ));
break;
case PRODUCT_WEB_SERVER:
str.AppendFormat(_T("Web Server Edition" ));
break;
}
if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
{
str.AppendFormat(L", 64-bit" );
}
else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL )
{
str.AppendFormat(L", 32-bit");
}
}
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
{
if( GetSystemMetrics(SM_SERVERR2) )
{
str.AppendFormat(_T("Windows Server 2003 \"R2\" "));
}
else if( osvi.wProductType == VER_NT_WORKSTATION &&
si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
{
str.AppendFormat(_T("Windows XP Professional x64 Edition "));
}
else
{
str.AppendFormat(_T("Windows Server 2003, "));
}
}
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
{
str.AppendFormat(_T("Windows XP "));
}
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
str.AppendFormat(_T("Windows 2000 "));
if ( osvi.dwMajorVersion <= 4 )
{
str.AppendFormat(_T("Windows NT "));
}
// Test for specific product on Windows NT 4.0 SP6 and later.
if( bOsVersionInfoEx )
{
//将Service Pack 版本保存
strServiceVersion.Format(_T("Service Pack %d"),osvi.wServicePackMajor);
//Test for the workstation type.
if ( osvi.wProductType == VER_NT_WORKSTATION &&
si.wProcessorArchitecture!=PROCESSOR_ARCHITECTURE_AMD64)
{
if( osvi.dwMajorVersion == 4 )
str = str + _T("Workstation 4.0");
else if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
str = str + _T("Home Edition");
//else str = str + _T( "Professional");
}
// Test for the server type.
else if ( osvi.wProductType == VER_NT_SERVER ||
osvi.wProductType == VER_NT_DOMAIN_CONTROLLER )
{
if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==2)
{
if ( si.wProcessorArchitecture ==
PROCESSOR_ARCHITECTURE_IA64 )
{
if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
str = str + _T("Datacenter Edition for Itanium-based Systems");
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
str = str + _T("Enterprise Edition for Itanium-based Systems");
}
else if ( si.wProcessorArchitecture ==
PROCESSOR_ARCHITECTURE_AMD64 )
{
if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
str = str + _T( "Datacenter x64 Edition ");
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
str = str + _T( "Enterprise x64 Edition ");
else str = str + _T( "Standard x64 Edition ");
}
else
{
if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
str = str + _T( "Datacenter Edition ");
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
str = str + _T( "Enterprise Edition ");
else if ( osvi.wSuiteMask & VER_SUITE_BLADE )
str = str + _T( "Web Edition ");
else str = str + _T( "Standard Edition ");
}
}
else if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==0)
{
if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
str = str + _T("Datacenter Server ");
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
str = str + _T( "Advanced Server ");
else str = str + _T( "Server ");
}
else // Windows NT 4.0
{
if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
str = str + _T ("Server 4.0, Enterprise Edition ");
else str = str + _T ( "Server 4.0 " );
}
}
}
// Test for specific product on Windows NT 4.0 SP5 and earlier
else
{
HKEY hKey;
TCHAR szProductType[256];
DWORD dwBufLen=256*sizeof(TCHAR);
LONG lRet;
lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
_T("SYSTEM\\CurrentControlSet\\Control\\ProductOptions"), 0, KEY_QUERY_VALUE, &hKey );
if( lRet != ERROR_SUCCESS )
strOSVersion = str;
return;
lRet = RegQueryValueEx( hKey, TEXT("ProductType"),
NULL, NULL, (LPBYTE) szProductType, &dwBufLen);
RegCloseKey( hKey );
if( (lRet != ERROR_SUCCESS) ||
(dwBufLen > 256*sizeof(TCHAR)) )
strOSVersion = str;
return;
if ( lstrcmpi( TEXT("WINNT"), szProductType) == 0 )
str = str + _T( "Workstation ");
if ( lstrcmpi( TEXT("LANMANNT"), szProductType) == 0 )
str = str + _T( "Server " );
if ( lstrcmpi( TEXT("SERVERNT"), szProductType) == 0 )
str = str + _T( "Advanced Server ");
str.Format(_T( "%d.%d "), osvi.dwMajorVersion, osvi.dwMinorVersion );
- 1
- 2
前往页