JD2022-TU1/main/extern/gear4/gear_detection/detection/gearos.cpp

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()