94 lines
3.6 KiB
C++
94 lines
3.6 KiB
C++
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// File : gearos.cpp - GEAR os detection
|
|
// Copyright (c) Ubisoft Entertainment. All rights reserved.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "gearos.h"
|
|
#include "gearhardware.h"
|
|
#include "systeminc.h"
|
|
|
|
namespace G4 {
|
|
|
|
namespace SystemDetection
|
|
{
|
|
GearOS::GearOS()
|
|
{
|
|
FillInformation();
|
|
}
|
|
|
|
void GearOS::FillInformation()
|
|
{
|
|
windowsVersion = OS::WINDOWSVERSION_UNKNOWN;
|
|
supports64Bits = false;
|
|
isoRegionName[0] = '\0';
|
|
servicePack = 0;
|
|
|
|
// http://msdn.microsoft.com/en-us/library/ms724833(VS.85).aspx
|
|
OSVERSIONINFOEX info;
|
|
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
|
|
if (GetVersionEx((OSVERSIONINFO*) &info))
|
|
{
|
|
if (info.dwMajorVersion == 6)
|
|
{
|
|
if (info.wProductType == VER_NT_WORKSTATION)
|
|
{
|
|
if (info.dwMinorVersion == 0)
|
|
windowsVersion = OS::WINDOWSVERSION_VISTA;
|
|
else if (info.dwMinorVersion == 1)
|
|
windowsVersion = OS::WINDOWSVERSION_SEVEN;
|
|
else if (info.dwMinorVersion == 2)
|
|
windowsVersion = OS::WINDOWSVERSION_8;
|
|
}
|
|
else
|
|
{
|
|
if (info.dwMinorVersion == 0)
|
|
windowsVersion = OS::WINDOWSVERSION_SERVER_2008;
|
|
else if (info.dwMinorVersion == 1)
|
|
windowsVersion = OS::WINDOWSVERSION_SERVER_2008_R2;
|
|
else if (info.dwMinorVersion == 2)
|
|
windowsVersion = OS::WINDOWSVERSION_SERVER_2012;
|
|
}
|
|
}
|
|
else if(info.dwMajorVersion == 5)
|
|
{
|
|
if (info.dwMinorVersion == 2)
|
|
{
|
|
SYSTEM_INFO sysinfo;
|
|
GetSystemInfo(&sysinfo);
|
|
|
|
if((info.wProductType == VER_NT_WORKSTATION))
|
|
windowsVersion = OS::WINDOWSVERSION_XP;
|
|
else if(GetSystemMetrics(SM_SERVERR2) == 0)
|
|
windowsVersion = OS::WINDOWSVERSION_SERVER_2003;
|
|
}
|
|
else if (info.dwMinorVersion == 1)
|
|
windowsVersion = OS::WINDOWSVERSION_XP;
|
|
else if (info.dwMinorVersion == 0)
|
|
windowsVersion = OS::WINDOWSVERSION_2000;
|
|
}
|
|
|
|
servicePack = (unsigned long) info.wServicePackMajor;
|
|
}
|
|
else
|
|
{
|
|
G4_INTERNAL_LOG_ERROR(SystemDetection::Hardware, "Failed to get windows version.\n");
|
|
}
|
|
|
|
// Check for Operating system bits (32/64)
|
|
#if defined(_WIN64)
|
|
supports64Bits = true; // 64-bit programs run only on Win64
|
|
#elif defined(_WIN32)
|
|
// 32-bit programs run on both 32-bit and 64-bit Windows
|
|
BOOL f64 = FALSE;
|
|
supports64Bits = IsWow64Process(GetCurrentProcess(), &f64) && f64;
|
|
#endif
|
|
|
|
// Get the locale info
|
|
LCID id = GetUserDefaultLCID();
|
|
GetLocaleInfoA(id, LOCALE_SISO3166CTRYNAME, isoRegionName, sizeof(isoRegionName));
|
|
}
|
|
}
|
|
} // namespace G4()
|
|
|