......
typedef void (WINAPI *PGetNativeSystemInfo)(LPSYSTEM_INFO);
char m_operatingSystemName [100];
......
void GetOSInfo()
{
PGetNativeSystemInfo pGNSI = NULL;
OSVERSIONINFOEX osvi;
SYSTEM_INFO si;
BOOL bOsVersionInfoEx;
ZeroMemory( &si, sizeof(SYSTEM_INFO) );
ZeroMemory( &osvi, sizeof(OSVERSIONINFOEX) );
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *)&osvi)) )
{
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if( !GetVersionEx ( (OSVERSIONINFO *)&osvi ) )
return;
}
pGNSI = (PGetNativeSystemInfo)GetProcAddress( GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo" );
if(NULL != pGNSI)
pGNSI(&si);
else
GetSystemInfo(&si);
switch( osvi.dwPlatformId )
{
case VER_PLATFORM_WIN32_NT: // Windows NT family.
{
if( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 && osvi.wProductType == VER_NT_WORKSTATION )
m_operatingSystemName = "Microsoft Windows Vista";
else if( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 && osvi.wProductType != VER_NT_WORKSTATION )
m_operatingSystemName = "Microsoft Windows Server 2008";
else if( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1 && osvi.wProductType == VER_NT_WORKSTATION )
m_operatingSystemName = "Microsoft Windows7";
else if( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1 && osvi.wProductType != VER_NT_WORKSTATION )
m_operatingSystemName = "Microsoft Windows Server 2008 R2";
else if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
{
if( osvi.wProductType == VER_NT_WORKSTATION && si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 )
m_operatingSystemName = "Microsoft Windows XP Professional x64 Edition";
else
m_operatingSystemName = GetSystemMetrics(SM_SERVERR2) != 0 ? "Microsoft Windows Server 2003 R2" : "Microsoft Windows Server 2003";
}
else if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
m_operatingSystemName = "Microsoft Windows XP";
else if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
m_operatingSystemName = "Microsoft Windows 2000";
else if( osvi.dwMajorVersion <= 4 )
m_operatingSystemName = "Microsoft Windows NT";
}
break;
case VER_PLATFORM_WIN32_WINDOWS: // Windows 95 family.
{
if( osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0 )
m_operatingSystemName = "Microsoft Windows 95";
else if( osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10 )
m_operatingSystemName = osvi.szCSDVersion[1] == 'A' ? "Windows 98_SE" : "Windows 98";
else if( osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90 )
m_operatingSystemName = "Microsoft Windows Millennium Edition";
}
break;
case VER_PLATFORM_WIN32s:
{
m_operatingSystemName = "Microsoft Win32s";
}
break;
default:
{
m_operatingSystemName = "Unknown";
}
}
}