Utilities: remove getversionex dependency

This commit is contained in:
Ty Lamontagne 2021-07-06 15:25:17 -04:00 committed by Kojin
parent 811f9c52c6
commit d9cee7467f

View File

@ -48,133 +48,24 @@ u64 GetPhysicalMemory()
return status.ullTotalPhys;
}
typedef void(WINAPI *PGNSI)(LPSYSTEM_INFO);
typedef BOOL(WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);
// Win 10 SDK
#ifndef PRODUCT_CORE_N
#define PRODUCT_CORE_N 0x00000062
#endif
#ifndef PRODUCT_CORE
#define PRODUCT_CORE 0x00000065
#endif
#ifndef PRODUCT_PROFESSIONAL_WMC
#define PRODUCT_PROFESSIONAL_WMC 0x00000067
#endif
#ifndef PRODUCT_EDUCATION
#define PRODUCT_EDUCATION 0x00000079
#endif
#ifndef PRODUCT_EDUCATION_N
#define PRODUCT_EDUCATION_N 0x0000007A
#endif
#ifndef PRODUCT_ENTERPRISE_S
#define PRODUCT_ENTERPRISE_S 0x0000007D
#endif
#ifndef PRODUCT_ENTERPRISE_S_N
#define PRODUCT_ENTERPRISE_S_N 0x0000007E
#endif
// Calculates the Windows OS Version and install information, and returns it as a
// Calculates the Windows OS Version and processor architecture, and returns it as a
// human-readable string. :)
// (Handy function borrowed from Microsoft's MSDN Online, and reformatted to use wxString.)
wxString GetOSVersionString()
{
wxString retval;
OSVERSIONINFOEX osvi;
SYSTEM_INFO si;
PGNSI pGNSI;
PGPI pGPI;
BOOL bOsVersionInfoEx;
DWORD dwType;
memzero(si);
memzero(osvi);
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
// GetVersionEx is deprecated, but we don't use it for version checking anyways
#pragma warning(suppress : 4996)
if (!(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *)&osvi)))
return L"GetVersionEx Error!";
// Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.
pGNSI = (PGNSI)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "GetNativeSystemInfo");
if (NULL != pGNSI)
pGNSI(&si);
else
GetSystemInfo(&si);
GetNativeSystemInfo(&si);
if (!IsWindows8Point1OrGreater())
return L"Unsupported Operating System!";
retval += L"Microsoft ";
// Test for the specific product.
if (IsWindows10OrGreater())
retval += IsWindowsServer() ? L"Windows Server 2016 " : L"Windows 10 ";
retval += IsWindowsServer() ? L"Windows Server 2016" : L"Windows 10";
else // IsWindows8Point1OrGreater()
retval += IsWindowsServer() ? L"Windows Server 2012 R2 " : L"Windows 8.1 ";
pGPI = (PGPI)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetProductInfo");
pGPI(osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType);
switch (dwType)
{
// Shared between Windows 8.1 and 10.
case PRODUCT_PROFESSIONAL:
retval += L"Pro";
break;
case PRODUCT_PROFESSIONAL_N:
retval += L"Pro N";
break;
case PRODUCT_PROFESSIONAL_WMC:
retval += L"Pro with Media Center";
break;
case PRODUCT_ENTERPRISE:
retval += L"Enterprise";
break;
case PRODUCT_ENTERPRISE_N:
retval += L"Enterprise N";
break;
case PRODUCT_SERVER_FOUNDATION:
retval += L"Foundation";
break;
case PRODUCT_STANDARD_SERVER:
retval += L"Standard";
break;
case PRODUCT_STANDARD_SERVER_CORE:
retval += L"Standard (core)";
break;
case PRODUCT_DATACENTER_SERVER:
retval += L"Datacenter";
break;
case PRODUCT_DATACENTER_SERVER_CORE:
retval += L"Datacenter (core)";
break;
// Windows 10 specific.
case PRODUCT_ENTERPRISE_S:
retval += L"Enterprise 2015 LTSB";
break;
case PRODUCT_ENTERPRISE_S_N:
retval += L"Enterprise 2015 LTSB N";
break;
case PRODUCT_EDUCATION:
retval += L"Education";
break;
case PRODUCT_CORE:
retval += L"Home";
break;
case PRODUCT_CORE_N:
retval += L"Home N";
break;
case PRODUCT_EDUCATION_N:
retval += L"Education N";
break;
}
retval += wxsFormat(L" (build %d)", osvi.dwBuildNumber);
retval += IsWindowsServer() ? L"Windows Server 2012 R2" : L"Windows 8.1";
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
retval += L", 64-bit";