mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
683 lines
No EOL
28 KiB
C++
683 lines
No EOL
28 KiB
C++
#include "SysInfo_in.h"
|
|
|
|
namespace Upp {
|
|
|
|
#if defined(PLATFORM_WIN32) || defined (PLATFORM_WIN64)
|
|
|
|
#ifndef PRODUCT_UNLICENSED
|
|
#define PRODUCT_UNLICENSED 0xABCDABCD
|
|
#endif
|
|
#ifndef PRODUCT_BUSINESS
|
|
#define PRODUCT_BUSINESS 0x00000006
|
|
#endif
|
|
#ifndef PRODUCT_BUSINESS_N
|
|
#define PRODUCT_BUSINESS_N 0x00000010
|
|
#endif
|
|
#ifndef PRODUCT_CLUSTER_SERVER
|
|
#define PRODUCT_CLUSTER_SERVER 0x00000012
|
|
#endif
|
|
#ifndef PRODUCT_CLUSTER_SERVER_V
|
|
#define PRODUCT_CLUSTER_SERVER_V 0x00000040
|
|
#endif
|
|
#ifndef PRODUCT_CORE
|
|
#define PRODUCT_CORE 0x00000065
|
|
#endif
|
|
#ifndef PRODUCT_CORE_N
|
|
#define PRODUCT_CORE_N 0x00000062
|
|
#endif
|
|
#ifndef PRODUCT_CORE_COUNTRYSPECIFIC
|
|
#define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063
|
|
#endif
|
|
#ifndef PRODUCT_CORE_SINGLELANGUAGE
|
|
#define PRODUCT_CORE_SINGLELANGUAGE 0x00000064
|
|
#endif
|
|
#ifndef PRODUCT_DATACENTER_EVALUATION_SERVER
|
|
#define PRODUCT_DATACENTER_EVALUATION_SERVER 0x00000050
|
|
#endif
|
|
#ifndef PRODUCT_DATACENTER_SERVER
|
|
#define PRODUCT_DATACENTER_SERVER 0x00000008
|
|
#endif
|
|
#ifndef PRODUCT_DATACENTER_SERVER_CORE
|
|
#define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C
|
|
#endif
|
|
#ifndef PRODUCT_DATACENTER_SERVER_CORE_V
|
|
#define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027
|
|
#endif
|
|
#ifndef PRODUCT_DATACENTER_SERVER_V
|
|
#define PRODUCT_DATACENTER_SERVER_V 0x00000025
|
|
#endif
|
|
#ifndef PRODUCT_ENTERPRISE
|
|
#define PRODUCT_ENTERPRISE 0x00000004
|
|
#endif
|
|
#ifndef PRODUCT_ENTERPRISE_E
|
|
#define PRODUCT_ENTERPRISE_E 0x00000046
|
|
#endif
|
|
#ifndef PRODUCT_ENTERPRISE_N_EVALUATION
|
|
#define PRODUCT_ENTERPRISE_N_EVALUATION 0x00000054
|
|
#endif
|
|
#ifndef PRODUCT_ENTERPRISE_N
|
|
#define PRODUCT_ENTERPRISE_N 0x0000001B
|
|
#endif
|
|
#ifndef PRODUCT_ENTERPRISE_EVALUATION
|
|
#define PRODUCT_ENTERPRISE_EVALUATION 0x00000048
|
|
#endif
|
|
#ifndef PRODUCT_ENTERPRISE_SERVER
|
|
#define PRODUCT_ENTERPRISE_SERVER 0x0000000A
|
|
#endif
|
|
#ifndef PRODUCT_ENTERPRISE_SERVER_CORE
|
|
#define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E
|
|
#endif
|
|
#ifndef PRODUCT_ENTERPRISE_SERVER_CORE_V
|
|
#define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029
|
|
#endif
|
|
#ifndef PRODUCT_ENTERPRISE_SERVER_IA64
|
|
#define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F
|
|
#endif
|
|
#ifndef PRODUCT_ENTERPRISE_SERVER_V
|
|
#define PRODUCT_ENTERPRISE_SERVER_V 0x00000026
|
|
#endif
|
|
#ifndef PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT
|
|
#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x0000003B
|
|
#endif
|
|
#ifndef PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL
|
|
#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x0000003C
|
|
#endif
|
|
#ifndef PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC
|
|
#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x0000003D
|
|
#endif
|
|
#ifndef PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC
|
|
#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x0000003E
|
|
#endif
|
|
#ifndef PRODUCT_HOME_BASIC
|
|
#define PRODUCT_HOME_BASIC 0x00000002
|
|
#endif
|
|
#ifndef PRODUCT_HOME_BASIC_E
|
|
#define PRODUCT_HOME_BASIC_E 0x00000043
|
|
#endif
|
|
#ifndef PRODUCT_HOME_BASIC_N
|
|
#define PRODUCT_HOME_BASIC_N 0x00000005
|
|
#endif
|
|
#ifndef PRODUCT_HOME_PREMIUM
|
|
#define PRODUCT_HOME_PREMIUM 0x00000003
|
|
#endif
|
|
#ifndef PRODUCT_HOME_PREMIUM_E
|
|
#define PRODUCT_HOME_PREMIUM_E 0x00000044
|
|
#endif
|
|
#ifndef PRODUCT_HOME_PREMIUM_N
|
|
#define PRODUCT_HOME_PREMIUM_N 0x0000001A
|
|
#endif
|
|
#ifndef PRODUCT_HOME_PREMIUM_SERVER
|
|
#define PRODUCT_HOME_PREMIUM_SERVER 0x00000022
|
|
#endif
|
|
#ifndef PRODUCT_HOME_SERVER
|
|
#define PRODUCT_HOME_SERVER 0x00000013
|
|
#endif
|
|
#ifndef PRODUCT_HYPERV
|
|
#define PRODUCT_HYPERV 0x0000002A
|
|
#endif
|
|
#ifndef PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT
|
|
#define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E
|
|
#endif
|
|
#ifndef PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING
|
|
#define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020
|
|
#endif
|
|
#ifndef PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY
|
|
#define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F
|
|
#endif
|
|
#ifndef PRODUCT_MULTIPOINT_STANDARD_SERVER
|
|
#define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x0000004C
|
|
#endif
|
|
#ifndef PRODUCT_MULTIPOINT_PREMIUM_SERVER
|
|
#define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x0000004D
|
|
#endif
|
|
#ifndef PRODUCT_PROFESSIONAL
|
|
#define PRODUCT_PROFESSIONAL 0x00000030
|
|
#endif
|
|
#ifndef PRODUCT_PROFESSIONAL_E
|
|
#define PRODUCT_PROFESSIONAL_E 0x00000045
|
|
#endif
|
|
#ifndef PRODUCT_PROFESSIONAL_N
|
|
#define PRODUCT_PROFESSIONAL_N 0x00000031
|
|
#endif
|
|
#ifndef PRODUCT_PROFESSIONAL_WMC
|
|
#define PRODUCT_PROFESSIONAL_WMC 0x00000067
|
|
#endif
|
|
#ifndef PRODUCT_SB_SOLUTION_SERVER_EM
|
|
#define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036
|
|
#endif
|
|
#ifndef PRODUCT_SERVER_FOR_SB_SOLUTIONS
|
|
#define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033
|
|
#endif
|
|
#ifndef PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM
|
|
#define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037
|
|
#endif
|
|
#ifndef PRODUCT_SERVER_FOR_SMALLBUSINESS
|
|
#define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018
|
|
#endif
|
|
#ifndef PRODUCT_SERVER_FOR_SMALLBUSINESS_V
|
|
#define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023
|
|
#endif
|
|
#ifndef PRODUCT_SERVER_FOUNDATION
|
|
#define PRODUCT_SERVER_FOUNDATION 0x00000021
|
|
#endif
|
|
#ifndef PRODUCT_SB_SOLUTION_SERVER
|
|
#define PRODUCT_SB_SOLUTION_SERVER 0x00000032
|
|
#endif
|
|
#ifndef PRODUCT_SMALLBUSINESS_SERVER
|
|
#define PRODUCT_SMALLBUSINESS_SERVER 0x00000009
|
|
#endif
|
|
#ifndef PRODUCT_SMALLBUSINESS_SERVER_PREMIUM
|
|
#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019
|
|
#endif
|
|
#ifndef PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE
|
|
#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x0000003F
|
|
#endif
|
|
#ifndef PRODUCT_SOLUTION_EMBEDDEDSERVER
|
|
#define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038
|
|
#endif
|
|
#ifndef PRODUCT_STANDARD_EVALUATION_SERVER
|
|
#define PRODUCT_STANDARD_EVALUATION_SERVER 0x0000004F
|
|
#endif
|
|
#ifndef PRODUCT_STANDARD_SERVER
|
|
#define PRODUCT_STANDARD_SERVER 0x00000007
|
|
#endif
|
|
#ifndef PRODUCT_STANDARD_SERVER_CORE
|
|
#define PRODUCT_STANDARD_SERVER_CORE 0x0000000D
|
|
#endif
|
|
#ifndef PRODUCT_STANDARD_SERVER_V
|
|
#define PRODUCT_STANDARD_SERVER_V 0x00000024
|
|
#endif
|
|
#ifndef PRODUCT_STANDARD_SERVER_CORE_V
|
|
#define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028
|
|
#endif
|
|
#ifndef PRODUCT_STANDARD_SERVER_SOLUTIONS
|
|
#define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034
|
|
#endif
|
|
#ifndef PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE
|
|
#define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035
|
|
#endif
|
|
#ifndef PRODUCT_STARTER
|
|
#define PRODUCT_STARTER 0x0000000B
|
|
#endif
|
|
#ifndef PRODUCT_STARTER_E
|
|
#define PRODUCT_STARTER_E 0x00000042
|
|
#endif
|
|
#ifndef PRODUCT_STARTER_N
|
|
#define PRODUCT_STARTER_N 0x0000002F
|
|
#endif
|
|
#ifndef PRODUCT_STORAGE_ENTERPRISE_SERVER
|
|
#define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017
|
|
#endif
|
|
#ifndef PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE
|
|
#define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x0000002E
|
|
#endif
|
|
#ifndef PRODUCT_STORAGE_EXPRESS_SERVER
|
|
#define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014
|
|
#endif
|
|
#ifndef PRODUCT_STORAGE_EXPRESS_SERVER_CORE
|
|
#define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x0000002B
|
|
#endif
|
|
#ifndef PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER
|
|
#define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x00000060
|
|
#endif
|
|
#ifndef PRODUCT_STORAGE_STANDARD_SERVER
|
|
#define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015
|
|
#endif
|
|
#ifndef PRODUCT_STORAGE_STANDARD_SERVER_CORE
|
|
#define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x0000002C
|
|
#endif
|
|
#ifndef PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER
|
|
#define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x0000005F
|
|
#endif
|
|
#ifndef PRODUCT_STORAGE_WORKGROUP_SERVER
|
|
#define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016
|
|
#endif
|
|
#ifndef PRODUCT_STORAGE_WORKGROUP_SERVER_CORE
|
|
#define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x0000002D
|
|
#endif
|
|
#ifndef PRODUCT_UNDEFINED
|
|
#define PRODUCT_UNDEFINED 0x00000000
|
|
#endif
|
|
#ifndef PRODUCT_ULTIMATE
|
|
#define PRODUCT_ULTIMATE 0x00000001
|
|
#endif
|
|
#ifndef PRODUCT_ULTIMATE_E
|
|
#define PRODUCT_ULTIMATE_E 0x00000047
|
|
#endif
|
|
#ifndef PRODUCT_ULTIMATE_N
|
|
#define PRODUCT_ULTIMATE_N 0x0000001C
|
|
#endif
|
|
#ifndef PRODUCT_WEB_SERVER
|
|
#define PRODUCT_WEB_SERVER 0x00000011
|
|
#endif
|
|
#ifndef PRODUCT_WEB_SERVER_CORE
|
|
#define PRODUCT_WEB_SERVER_CORE 0x0000001D
|
|
#endif
|
|
#ifndef SM_SERVERR2
|
|
#define SM_SERVERR2 89
|
|
#endif
|
|
#ifndef VER_SUITE_WH_SERVER
|
|
#define VER_SUITE_WH_SERVER 0x00008000
|
|
#endif
|
|
|
|
//typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
|
|
//typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);
|
|
|
|
|
|
bool GetOsInfo(String &kernel, String &kerVersion, String &kerArchitecture, String &distro,
|
|
String &distVersion, String &desktop, String &deskVersion)
|
|
{
|
|
OSVERSIONINFOEX osvi;
|
|
SYSTEM_INFO si;
|
|
BOOL bOsVersionInfoEx;
|
|
|
|
ZeroMemory(&si, sizeof(SYSTEM_INFO));
|
|
|
|
// Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.
|
|
PGNSI pGNSI = Get_GetNativeSystemInfo();
|
|
if(NULL != pGNSI)
|
|
pGNSI(&si);
|
|
else
|
|
GetSystemInfo(&si);
|
|
|
|
switch(si.wProcessorArchitecture) {
|
|
case PROCESSOR_ARCHITECTURE_AMD64: kerArchitecture = "64 bits"; break;
|
|
case PROCESSOR_ARCHITECTURE_IA64: kerArchitecture = "Itanium 64 bits"; break;
|
|
case PROCESSOR_ARCHITECTURE_INTEL: kerArchitecture = "32 bits"; break;
|
|
default: kerArchitecture = "Unknown";
|
|
}
|
|
|
|
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
|
|
|
|
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
|
|
|
|
if(!(bOsVersionInfoEx = GetVersionEx(reinterpret_cast<OSVERSIONINFO *>(&osvi))))
|
|
return false;
|
|
|
|
kerVersion = Format("%d.%d", static_cast<int>(osvi.dwMajorVersion), static_cast<int>(osvi.dwMinorVersion));
|
|
kernel = "Windows";
|
|
|
|
if (VER_PLATFORM_WIN32_NT == osvi.dwPlatformId && osvi.dwMajorVersion > 4) {
|
|
if (osvi.dwMajorVersion == 10 && osvi.dwMinorVersion == 0) {
|
|
if (osvi.wProductType == VER_NT_WORKSTATION)
|
|
kernel.Cat(" 10");
|
|
else
|
|
kernel.Cat(" Server 2016");
|
|
} else if (osvi.dwMajorVersion == 6) {
|
|
if (osvi.dwMinorVersion == 3) {
|
|
if (osvi.wProductType == VER_NT_WORKSTATION)
|
|
kernel.Cat(" 8.1");
|
|
else
|
|
kernel.Cat(" Server 2012 R2");
|
|
} else if (osvi.dwMinorVersion == 2) {
|
|
if (osvi.wProductType == VER_NT_WORKSTATION)
|
|
kernel.Cat(" 8");
|
|
else
|
|
kernel.Cat(" Server 2012");
|
|
} else if (osvi.dwMinorVersion == 1) {
|
|
if (osvi.wProductType == VER_NT_WORKSTATION)
|
|
kernel.Cat(" 7");
|
|
else
|
|
kernel.Cat(" Server 2008 R2");
|
|
} else if (osvi.dwMinorVersion == 0) {
|
|
if (osvi.wProductType == VER_NT_WORKSTATION)
|
|
kernel.Cat(" Vista");
|
|
else
|
|
kernel.Cat(" Server 2008");
|
|
}
|
|
PGPI pGPI = Get_GetProductInfo();
|
|
DWORD dwType;
|
|
if (pGPI(osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType)) {
|
|
switch(dwType) {
|
|
case PRODUCT_UNLICENSED: distro = "Unlicensed"; break;
|
|
case PRODUCT_BUSINESS: distro = "Business Edition"; break;
|
|
case PRODUCT_BUSINESS_N: distro = "Business Edition N"; break;
|
|
case PRODUCT_CLUSTER_SERVER: distro = "HPC Edition"; break;
|
|
case PRODUCT_CLUSTER_SERVER_V: distro = "Server Hyper Core V"; break;
|
|
case PRODUCT_CORE: distro = "Windows 8"; break;
|
|
case PRODUCT_CORE_N: distro = "Windows 8 N"; break;
|
|
case PRODUCT_CORE_COUNTRYSPECIFIC: distro = "Windows 8 China"; break;
|
|
case PRODUCT_CORE_SINGLELANGUAGE: distro = "Windows 8 Single Language"; break;
|
|
case PRODUCT_DATACENTER_EVALUATION_SERVER: distro = "Server Datacenter (evaluation installation)"; break;
|
|
case PRODUCT_DATACENTER_SERVER: distro = "Server Datacenter (full installation)"; break;
|
|
case PRODUCT_DATACENTER_SERVER_CORE: distro = "Server Datacenter (core installation)"; break;
|
|
case PRODUCT_DATACENTER_SERVER_CORE_V: distro = "Server Datacenter without Hyper-V (core installation)"; break;
|
|
case PRODUCT_DATACENTER_SERVER_V: distro = "Server Datacenter without Hyper-V (full installation)"; break;
|
|
case PRODUCT_ENTERPRISE: distro = "Enterprise"; break;
|
|
case PRODUCT_ENTERPRISE_E: distro = "Not supported"; break;
|
|
case PRODUCT_ENTERPRISE_N_EVALUATION: distro = "Enterprise N (evaluation installation)"; break;
|
|
case PRODUCT_ENTERPRISE_N: distro = "Enterprise N"; break;
|
|
case PRODUCT_ENTERPRISE_EVALUATION: distro = "Server Enterprise (evaluation installation)"; break;
|
|
case PRODUCT_ENTERPRISE_SERVER: distro = "Server Enterprise (full installation)"; break;
|
|
case PRODUCT_ENTERPRISE_SERVER_CORE: distro = "Server Enterprise (core installation)"; break;
|
|
case PRODUCT_ENTERPRISE_SERVER_CORE_V: distro = "Server Enterprise without Hyper-V (core installation)"; break;
|
|
case PRODUCT_ENTERPRISE_SERVER_IA64: distro = "Server Enterprise for Itanium-based Systems"; break;
|
|
case PRODUCT_ENTERPRISE_SERVER_V: distro = "Server Enterprise without Hyper-V (full installation)"; break;
|
|
case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT: distro = "Windows Essential Server Solution Management"; break;
|
|
case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL: distro = "Windows Essential Server Solution Additional"; break;
|
|
case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC: distro = "Windows Essential Server Solution Management SVC"; break;
|
|
case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC: distro = "Windows Essential Server Solution Additional SVC"; break;
|
|
case PRODUCT_HOME_BASIC: distro = "Home Basic"; break;
|
|
case PRODUCT_HOME_BASIC_E: distro = "Not supported"; break;
|
|
case PRODUCT_HOME_BASIC_N: distro = "Home Basic N"; break;
|
|
case PRODUCT_HOME_PREMIUM: distro = "Home Premium"; break;
|
|
case PRODUCT_HOME_PREMIUM_E: distro = "Not supported"; break;
|
|
case PRODUCT_HOME_PREMIUM_N: distro = "Home Premium N"; break;
|
|
case PRODUCT_HOME_PREMIUM_SERVER: distro = "Windows Home Server 2011"; break;
|
|
case PRODUCT_HOME_SERVER: distro = "Windows Storage Server 2008 R2 Essentials"; break;
|
|
case PRODUCT_HYPERV: distro = "Microsoft Hyper-V Server"; break;
|
|
case PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT: distro = "Windows Essential Business Server Management Server"; break;
|
|
case PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING: distro = "Windows Essential Business Server Messaging Server"; break;
|
|
case PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY: distro = "Windows Essential Business Server Security Server"; break;
|
|
case PRODUCT_MULTIPOINT_STANDARD_SERVER: distro = "Windows MultiPoint Server Standard (full installation)"; break;
|
|
case PRODUCT_MULTIPOINT_PREMIUM_SERVER: distro = "Windows MultiPoint Server Premium (full installation)"; break;
|
|
case PRODUCT_PROFESSIONAL: distro = "Professional"; break;
|
|
case PRODUCT_PROFESSIONAL_E: distro = "Not supported"; break;
|
|
case PRODUCT_PROFESSIONAL_N: distro = "Professional N"; break;
|
|
case PRODUCT_PROFESSIONAL_WMC: distro = "Professional with Media Center"; break;
|
|
case PRODUCT_SB_SOLUTION_SERVER_EM: distro = "Server For SB Solutions EM"; break;
|
|
case PRODUCT_SERVER_FOR_SB_SOLUTIONS: distro = "Server For SB Solutions"; break;
|
|
case PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM: distro = "Server For SB Solutions EM"; break;
|
|
case PRODUCT_SERVER_FOR_SMALLBUSINESS: distro = "Windows Server 2008 for Windows Essential Server Solutions"; break;
|
|
case PRODUCT_SERVER_FOR_SMALLBUSINESS_V: distro = "Windows Server 2008 without Hyper-V for Windows Essential Server Solutions"; break;
|
|
case PRODUCT_SERVER_FOUNDATION: distro = "Server Foundation"; break;
|
|
case PRODUCT_SB_SOLUTION_SERVER: distro = "Windows Small Business Server 2011 Essentials"; break;
|
|
case PRODUCT_SMALLBUSINESS_SERVER: distro = "Windows Small Business Server"; break;
|
|
case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM: distro = "Small Business Server Premium"; break;
|
|
case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE: distro = "Small Business Server Premium (core installation)"; break;
|
|
case PRODUCT_SOLUTION_EMBEDDEDSERVER: distro = "Windows MultiPoint Server"; break;
|
|
case PRODUCT_STANDARD_EVALUATION_SERVER: distro = "Server Standard (evaluation installation)"; break;
|
|
case PRODUCT_STANDARD_SERVER: distro = "Server Standard"; break;
|
|
case PRODUCT_STANDARD_SERVER_CORE: distro = "Server Standard (core installation)"; break;
|
|
case PRODUCT_STANDARD_SERVER_V: distro = "Server Standard without Hyper-V"; break;
|
|
case PRODUCT_STANDARD_SERVER_CORE_V: distro = "Server Standard without Hyper-V (core installation)"; break;
|
|
case PRODUCT_STANDARD_SERVER_SOLUTIONS: distro = "Server Solutions Premium"; break;
|
|
case PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE: distro = "Server Solutions Premium (core installation)"; break;
|
|
case PRODUCT_STARTER: distro = "Starter"; break;
|
|
case PRODUCT_STARTER_E: distro = "Not supported"; break;
|
|
case PRODUCT_STARTER_N: distro = "Starter N"; break;
|
|
case PRODUCT_STORAGE_ENTERPRISE_SERVER: distro = "Storage Server Enterprise"; break;
|
|
case PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE: distro = "Storage Server Enterprise (core installation)"; break;
|
|
case PRODUCT_STORAGE_EXPRESS_SERVER: distro = "Storage Server Express"; break;
|
|
case PRODUCT_STORAGE_EXPRESS_SERVER_CORE: distro = "Storage Server Express (core installation)"; break;
|
|
case PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER: distro = "Storage Server Standard (evaluation installation)"; break;
|
|
case PRODUCT_STORAGE_STANDARD_SERVER: distro = "Storage Server Standard"; break;
|
|
case PRODUCT_STORAGE_STANDARD_SERVER_CORE: distro = "Storage Server Standard (core installation)"; break;
|
|
case PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER: distro = "Storage Server Workgroup (evaluation installation)"; break;
|
|
case PRODUCT_STORAGE_WORKGROUP_SERVER: distro = "Storage Server Workgroup"; break;
|
|
case PRODUCT_STORAGE_WORKGROUP_SERVER_CORE: distro = "Storage Server Workgroup (core installation)"; break;
|
|
case PRODUCT_UNDEFINED: distro = "An unknown product"; break;
|
|
case PRODUCT_ULTIMATE: distro = "Ultimate"; break;
|
|
case PRODUCT_ULTIMATE_E: distro = "Not supported"; break;
|
|
case PRODUCT_ULTIMATE_N: distro = "Ultimate N"; break;
|
|
case PRODUCT_WEB_SERVER: distro = "Web Server (full installation)"; break;
|
|
case PRODUCT_WEB_SERVER_CORE: distro = "Web Server (core installation)"; break;
|
|
}
|
|
}
|
|
} else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) {
|
|
if (GetSystemMetrics(SM_SERVERR2) )
|
|
kernel.Cat(" Server 2003 R2");
|
|
else if (osvi.wSuiteMask & VER_SUITE_STORAGE_SERVER)
|
|
kernel.Cat(" Storage Server 2003");
|
|
else if (osvi.wSuiteMask & VER_SUITE_WH_SERVER)
|
|
kernel.Cat(" Home Server");
|
|
else if( osvi.wProductType == VER_NT_WORKSTATION && si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
|
|
kernel.Cat(" XP Professional x64 Edition");
|
|
else
|
|
kernel.Cat(" Server 2003");
|
|
// Test for the server type.
|
|
if (osvi.wProductType != VER_NT_WORKSTATION ) {
|
|
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ) {
|
|
if(osvi.wSuiteMask & VER_SUITE_DATACENTER )
|
|
distro = "Datacenter Edition for Itanium-based Systems";
|
|
else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
|
|
distro = "Enterprise Edition for Itanium-based Systems";
|
|
}
|
|
} else if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ) {
|
|
if(osvi.wSuiteMask & VER_SUITE_DATACENTER )
|
|
distro = "Datacenter x64 Edition";
|
|
else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
|
|
distro = "Enterprise x64 Edition";
|
|
else
|
|
distro = "Standard x64 Edition";
|
|
} else {
|
|
if (osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER )
|
|
distro = "Compute Cluster Edition";
|
|
else if(osvi.wSuiteMask & VER_SUITE_DATACENTER )
|
|
distro = "Datacenter Edition";
|
|
else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
|
|
distro = "Enterprise Edition";
|
|
else if (osvi.wSuiteMask & VER_SUITE_BLADE )
|
|
distro = "Web Edition";
|
|
else
|
|
distro = "Standard Edition";
|
|
}
|
|
} else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) {
|
|
kernel.Cat(" XP");
|
|
if(osvi.wSuiteMask & VER_SUITE_PERSONAL )
|
|
distro = "Home Edition";
|
|
else
|
|
distro = "Professional";
|
|
} else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) {
|
|
kernel.Cat(" 2000");
|
|
if (osvi.wProductType == VER_NT_WORKSTATION)
|
|
distro = "Professional";
|
|
else {
|
|
if(osvi.wSuiteMask & VER_SUITE_DATACENTER)
|
|
distro = "Datacenter Server";
|
|
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
|
|
distro = "Advanced Server";
|
|
else
|
|
distro = "Server";
|
|
}
|
|
}
|
|
// Include service pack (if any) and build number.
|
|
if(osvi.wServicePackMajor > 0)
|
|
kerVersion.Cat(Format(" %s", osvi.szCSDVersion));
|
|
|
|
kerVersion.Cat(Format(" (Build %d)", static_cast<int>(osvi.dwBuildNumber)));
|
|
} else if (osvi.dwPlatformId == 1) {
|
|
switch(osvi.dwMinorVersion) {
|
|
case 0:
|
|
kernel.Cat(" 95");
|
|
break;
|
|
case 10:
|
|
kernel.Cat(" 98");
|
|
break;
|
|
case 90:
|
|
kernel.Cat(" Millennium");
|
|
break;
|
|
}
|
|
distro = "";
|
|
} else if (osvi.dwPlatformId == 2) {
|
|
kernel.Cat(" NT");
|
|
switch(osvi.dwMajorVersion) {
|
|
case 3:
|
|
kernel.Cat(" 3.51");
|
|
break;
|
|
case 4:
|
|
kernel.Cat(" 4.0");
|
|
break;
|
|
}
|
|
distro = "";
|
|
}
|
|
desktop = kernel;
|
|
distVersion = deskVersion = "";
|
|
return true;
|
|
}
|
|
#endif
|
|
#ifdef PLATFORM_POSIX
|
|
|
|
static bool GetOsInfoCheckRelease(String &distro, String &distVersion) {
|
|
StringParse release;
|
|
for (FindFile ff("/etc/*-release"); ff; ff.Next())
|
|
release += LoadFile_Safe(ff.GetPath());
|
|
if (release.IsEmpty())
|
|
return false;
|
|
if(!release.GoAfter("DISTRIB_ID="))
|
|
if (!release.GoAfter("ID="))
|
|
return false;
|
|
distro = ToLower(release.GetText());
|
|
if (distro.IsEmpty())
|
|
return false;
|
|
if (!release.GoAfter_Init("DISTRIB_RELEASE="))
|
|
if (!release.GoAfter_Init("VERSION_ID="))
|
|
return false;
|
|
distVersion = ToLower(release.GetText());
|
|
|
|
return true;
|
|
}
|
|
|
|
bool GetOsInfo(String &kernel, String &kerVersion, String &kerArchitecture, String &distro, String &distVersion, String &desktop, String &deskVersion)
|
|
{
|
|
struct utsname buf;
|
|
|
|
if (0 == uname(&buf)) {
|
|
kernel = buf.sysname;
|
|
kerVersion = String(buf.release) + " " + String(buf.version);
|
|
kerArchitecture = buf.machine;
|
|
}
|
|
if (kernel.IsEmpty())
|
|
kernel = LoadFile_Safe("/proc/sys/kernel/ostype");
|
|
if (kernel.IsEmpty())
|
|
kernel = LoadFile_Safe("/proc/version");
|
|
if (kernel.IsEmpty()) {
|
|
if (Sys("sysctl_cmd -n kern.version").Find("FreeBSD") >= 0)
|
|
kernel = "freebsd";
|
|
}
|
|
if (kernel.IsEmpty())
|
|
kernel = ToLower(Sys("uname -s"));
|
|
|
|
if (kerVersion.IsEmpty())
|
|
kerVersion = LoadFile_Safe("/proc/sys/kernel/osrelease") + " " + LoadFile_Safe("/proc/sys/kernel/version");
|
|
if (kerVersion.IsEmpty())
|
|
kerArchitecture = ToLower(Sys("uname -v"));
|
|
|
|
if (kerArchitecture.IsEmpty())
|
|
kerArchitecture = ToLower(Sys("uname -m"));
|
|
|
|
// printenv
|
|
if (GetEnv("GNOME_DESKTOP_SESSION_ID").GetCount() || GetEnv("GNOME_KEYRING_SOCKET").GetCount()) {
|
|
desktop = "gnome";
|
|
StringParse gnomeVersion = Sys("gnome-about --version");
|
|
gnomeVersion.GoAfter("gnome-about");
|
|
deskVersion = gnomeVersion.GetText();
|
|
} else if (GetEnv("KDE_FULL_SESSION").GetCount() || GetEnv("KDEDIR").GetCount() || GetEnv("KDE_MULTIHEAD").GetCount()) {
|
|
desktop = "kde";
|
|
StringParse konsole = Sys("konsole --version");
|
|
konsole.GoAfter("KDE", ":");
|
|
deskVersion = konsole.GetText();
|
|
if (deskVersion.IsEmpty())
|
|
deskVersion = GetEnv("KDE_SESSION_VERSION");
|
|
} else if (GetEnv("MATE_KEYRING_CONTROL").GetCount()) {
|
|
desktop = "mate";
|
|
StringParse mateVersion = Sys("mate-about --version");
|
|
while (true) {
|
|
String str = mateVersion.GetText();
|
|
if (atof(str) > 0) {
|
|
deskVersion = str;
|
|
break;
|
|
} else if (str.IsEmpty())
|
|
break;
|
|
}
|
|
} else {
|
|
String str = GetEnv("CINNAMON_VERSION");
|
|
if (!str.IsEmpty()) {
|
|
desktop = "cinnamon";
|
|
deskVersion = str;
|
|
} else {
|
|
StringParse desktopStr = ToLower(Sys("xprop -root"));
|
|
if (desktopStr.Find("lxde") >= 0 || ToLower(GetEnv("DESKTOP_SESSION")) == "lxde") {
|
|
desktop = "lxde";
|
|
desktopStr.GoAfter("_ob_version", "=");
|
|
deskVersion = desktopStr.GetText();
|
|
} else if (desktopStr.Find("xfce") >= 0) {
|
|
desktopStr.GoAfter("_dt_save_mode", "=");
|
|
desktop = desktopStr.GetText();
|
|
StringParse xfceVersion = Sys(Format("%s-about --version", desktop));
|
|
while (true) {
|
|
String str = xfceVersion.GetText();
|
|
if (atof(str) > 0) {
|
|
deskVersion = str;
|
|
break;
|
|
} else if (str.IsEmpty())
|
|
break;
|
|
}
|
|
} else if (desktopStr.Find("enlightenment") >= 0) {
|
|
desktop = "enlightenment";
|
|
desktopStr.GoAfter("enlightenment_version", "=");
|
|
desktopStr = desktopStr.GetText();
|
|
if (desktopStr.GetText() == "enlightenment")
|
|
deskVersion = desktopStr.GetText();
|
|
} else
|
|
desktop = GetEnv("DESKTOP_SESSION");
|
|
}
|
|
}
|
|
|
|
if (GetOsInfoCheckRelease(distro, distVersion))
|
|
;
|
|
else if (FileExists("/usr/share/doc/ubuntu-minimal") || FileExists("/usr/share/ubuntu-docs"))
|
|
distro = "ubuntu";
|
|
else if (FileExists("/etc/fedora-release")) {
|
|
distro = "fedora";
|
|
StringParse strFile = LoadFile_Safe("/etc/fedora-release");
|
|
strFile.GoAfter("release");
|
|
distVersion = strFile.GetText();
|
|
} else if (FileExists("/etc/redhat-release")) {
|
|
distro = "redhat";
|
|
distVersion = LoadFile_Safe("/etc/redhat-release");
|
|
} else if (FileExists("/etc/SuSE-release")) {
|
|
StringParse strFile = LoadFile_Safe("/etc/SuSE-release");
|
|
distro = strFile.GetText();
|
|
strFile.GoAfter_Init("VERSION", "=");
|
|
distVersion = strFile.GetText();
|
|
} else if (FileExists("/etc/mandrake-release")) {
|
|
distro = "mandrake";
|
|
distVersion = LoadFile_Safe("/etc/mandrake-release");
|
|
} else if (FileExists("/etc/mandriva-release")) {
|
|
distro = "mandriva";
|
|
distVersion = LoadFile_Safe("/etc/mandriva-release");
|
|
} else if (FileExists("/etc/aurox-release")) {
|
|
distro = "aurox";
|
|
distVersion = LoadFile_Safe("/etc/aurox-release");
|
|
} else if (FileExists("/etc/altlinux-release")) {
|
|
distro = "altlinux";
|
|
distVersion = LoadFile_Safe("/etc/altlinux-releas");
|
|
} else if (FileExists("/etc/yellowdog-release")) {
|
|
distro = "yellowdog";
|
|
distVersion = LoadFile_Safe("/etc/gentoo-yellowdog");
|
|
} else if (FileExists("/etc/gentoo-release")) {
|
|
distro = "gentoo";
|
|
distVersion = LoadFile_Safe("/etc/gentoo-release");
|
|
} else if (FileExists("/usr/portage")) {
|
|
distro = "gentoo";
|
|
distVersion = LoadFile_Safe("/usr/portage");
|
|
} else if (FileExists("/etc/slackware-version")) {
|
|
distro = "slackware";
|
|
StringParse strFile = LoadFile_Safe("/etc/slackware-version");
|
|
strFile.GetText();
|
|
distVersion = strFile.GetText();
|
|
} else if (FileExists("/etc/debian_version")) {
|
|
distro = "debian";
|
|
distVersion = LoadFile_Safe("/etc/debian_version");
|
|
} else if (LoadFile_Safe("/etc/release").Find("Solaris") >= 0)
|
|
distro = "solaris";
|
|
else if (ToLower(Sys("uname -r")).Find("freebsd") >= 0)
|
|
distro = "freebsd";
|
|
else if (ToLower(Sys("uname -r")).Find("solaris") >= 0)
|
|
distro = "solaris";
|
|
else {
|
|
distro = LoadFile_Safe("/etc/osname_version");
|
|
distVersion = "";
|
|
}
|
|
if (distro.IsEmpty())
|
|
distro = LoadFile_Safe("/etc/issue");
|
|
if (distro.IsEmpty())
|
|
distro = distVersion = "UNKNOWN";
|
|
|
|
return true;
|
|
}
|
|
|
|
#endif
|
|
|
|
} |