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