diff options
| -rw-r--r-- | .appveyor.yml | 6 | ||||
| -rw-r--r-- | src/kvilib/ext/KviRuntimeInfo.cpp | 227 |
2 files changed, 118 insertions, 115 deletions
diff --git a/.appveyor.yml b/.appveyor.yml index f1e4158d2..1d1fa6ebe 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -82,9 +82,9 @@ install: c:\cygwin\bin\bash -lc "cd /cygdrive/c/spellcheck-dicts/unzip; 7z x -y ../zip/en_US.zip; 7z x -y ../zip/en_GB-ize.zip; 7z x -y ../zip/en_GB-ise.zip" } - ps: | - (New-Object Net.WebClient).DownloadFile('https://github.com/lordmulder/stdutils/releases/download/1.13/StdUtils.2018-03-29.zip', 'c:\StdUtils.2018-03-29.zip') - 7z e -o"C:\Program Files (x86)\NSIS\Plugins\x86-unicode" c:\StdUtils.2018-03-29.zip Plugins\Unicode\*.dll - 7z e -o"C:\Program Files (x86)\NSIS\Include" c:\StdUtils.2018-03-29.zip Include\*.nsh + (New-Object Net.WebClient).DownloadFile('https://github.com/lordmulder/stdutils/releases/download/1.14/StdUtils.2018-10-27.zip', 'c:\StdUtils.2018-10-27.zip') + 7z e -o"C:\Program Files (x86)\NSIS\Plugins\x86-unicode" c:\StdUtils.2018-10-27.zip Plugins\Unicode\*.dll + 7z e -o"C:\Program Files (x86)\NSIS\Include" c:\StdUtils.2018-10-27.zip Include\*.nsh # - c:\cygwin\bin\find "/cygdrive/c/Program Files (x86)/NSIS" "-type" f build_script: - mkdir build diff --git a/src/kvilib/ext/KviRuntimeInfo.cpp b/src/kvilib/ext/KviRuntimeInfo.cpp index 77e9ac274..86dcfaf43 100644 --- a/src/kvilib/ext/KviRuntimeInfo.cpp +++ b/src/kvilib/ext/KviRuntimeInfo.cpp @@ -50,7 +50,7 @@ typedef BOOL(WINAPI * PGETPRODUCTINFO)(DWORD, DWORD, DWORD, DWORD, PDWORD); #define BUFSIZE 1024 -// stolen from WinNT.h (last updated from 10.0.10240.0 SDK) +// stolen from WinNT.h (last updated from 10.0.17763.0 SDK) // // Product types // This list grows with each OS release. @@ -63,10 +63,7 @@ typedef BOOL(WINAPI * PGETPRODUCTINFO)(DWORD, DWORD, DWORD, DWORD, PDWORD); // When a product-type 'X' gets dropped from a // OS release onwards, the value of 'X' continues // to be used in the mapping table of GetProductInfo. -// MSDN: If the product has not been activated and is no longer in -// the grace period, this parameter is set to -// PRODUCT_UNLICENSED (0xABCDABCD). - +// // clang-format off #define PRODUCT_UNDEFINED 0x00000000 @@ -163,7 +160,6 @@ typedef BOOL(WINAPI * PGETPRODUCTINFO)(DWORD, DWORD, DWORD, DWORD, PDWORD); #define PRODUCT_CORE_SINGLELANGUAGE 0x00000064 #define PRODUCT_CORE 0x00000065 #define PRODUCT_PROFESSIONAL_WMC 0x00000067 -#define PRODUCT_MOBILE_CORE 0x00000068 #define PRODUCT_EMBEDDED_INDUSTRY_EVAL 0x00000069 #define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL 0x0000006A #define PRODUCT_EMBEDDED_EVAL 0x0000006B @@ -190,6 +186,37 @@ typedef BOOL(WINAPI * PGETPRODUCTINFO)(DWORD, DWORD, DWORD, DWORD, PDWORD); #define PRODUCT_PROFESSIONAL_S_N 0x00000080 #define PRODUCT_ENTERPRISE_S_EVALUATION 0x00000081 #define PRODUCT_ENTERPRISE_S_N_EVALUATION 0x00000082 +#define PRODUCT_HOLOGRAPHIC 0x00000087 +#define PRODUCT_PRO_SINGLE_LANGUAGE 0x0000008A +#define PRODUCT_PRO_CHINA 0x0000008B +#define PRODUCT_ENTERPRISE_SUBSCRIPTION 0x0000008C +#define PRODUCT_ENTERPRISE_SUBSCRIPTION_N 0x0000008D +#define PRODUCT_DATACENTER_NANO_SERVER 0x0000008F +#define PRODUCT_STANDARD_NANO_SERVER 0x00000090 +#define PRODUCT_DATACENTER_A_SERVER_CORE 0x00000091 +#define PRODUCT_STANDARD_A_SERVER_CORE 0x00000092 +#define PRODUCT_DATACENTER_WS_SERVER_CORE 0x00000093 +#define PRODUCT_STANDARD_WS_SERVER_CORE 0x00000094 +#define PRODUCT_UTILITY_VM 0x00000095 +#define PRODUCT_DATACENTER_EVALUATION_SERVER_CORE 0x0000009F +#define PRODUCT_STANDARD_EVALUATION_SERVER_CORE 0x000000A0 +#define PRODUCT_PRO_WORKSTATION 0x000000A1 +#define PRODUCT_PRO_WORKSTATION_N 0x000000A2 +#define PRODUCT_PRO_FOR_EDUCATION 0x000000A4 +#define PRODUCT_PRO_FOR_EDUCATION_N 0x000000A5 +#define PRODUCT_AZURE_SERVER_CORE 0x000000A8 +#define PRODUCT_AZURE_NANO_SERVER 0x000000A9 +#define PRODUCT_ENTERPRISEG 0x000000AB +#define PRODUCT_ENTERPRISEGN 0x000000AC +#define PRODUCT_SERVERRDSH 0x000000AF +#define PRODUCT_CLOUD 0x000000B2 +#define PRODUCT_CLOUDN 0x000000B3 +#define PRODUCT_HUBOS 0x000000B4 +#define PRODUCT_ONECOREUPDATEOS 0x000000B6 +#define PRODUCT_CLOUDE 0x000000B7 +#define PRODUCT_ANDROMEDA 0x000000B8 +#define PRODUCT_IOTOS 0x000000B9 +#define PRODUCT_CLOUDEN 0x000000BA #define PRODUCT_UNLICENSED 0xABCDABCD // clang-format on @@ -238,8 +265,14 @@ static QString queryWinInfo(QueryInfo info) { if(osvi.wProductType == VER_NT_WORKSTATION) szVersion += "Windows 10 "; - else - szVersion += "Windows Server 2016"; + else if(osvi.wProductType == VER_NT_SERVER || osvi.wProductType == VER_NT_DOMAIN_CONTROLLER ) + szVersion += "Windows Server "; + if(osvi.dwBuildNumber <= 14393) + szVersion += "2016 "; + else if(osvi.dwBuildNumber <= 17763) + szVersion += "2019 "; + else + szVersion += "vNext "; } if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 3) @@ -247,7 +280,7 @@ static QString queryWinInfo(QueryInfo info) if(osvi.wProductType == VER_NT_WORKSTATION) szVersion += "Windows 8.1 "; else - szVersion += "Windows Server 2012 R2"; + szVersion += "Windows Server 2012 R2 "; } if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 2) @@ -266,34 +299,11 @@ static QString queryWinInfo(QueryInfo info) szVersion += "Windows Server 2008 R2 "; } - if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0) - { - if(osvi.wProductType == VER_NT_WORKSTATION) - szVersion += "Windows Vista "; - else - szVersion += "Windows Server 2008 "; - } - - if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) - { - if(GetSystemMetrics(SM_SERVERR2)) - szVersion += "Windows Server 2003 \"R2\" "; - else if(osvi.wProductType == VER_NT_WORKSTATION && si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) - { - szVersion += "Windows XP Professional x64 "; - } - else - szVersion += "Windows Server 2003, "; - } - - if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1) - szVersion += "Windows XP "; - PGETPRODUCTINFO pGetProductInfo; pGetProductInfo = (PGETPRODUCTINFO)GetProcAddress( GetModuleHandle(TEXT("kernel32.dll")), "GetProductInfo"); - // from MSDN, Document Date 9/7/2012 - // http://msdn.microsoft.com/en-us/library/windows/desktop/ms724358 + // from MSDN, Document Date 12/05/2018 + // https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getproductinfo // the entire PRODUCT_CORE group has the base Windows version in the // returned value. rip out "Windows" of all PRODUCT values as well if(bOsVersionInfoEx) @@ -318,20 +328,26 @@ static QString queryWinInfo(QueryInfo info) szVersion += "Server Hyper Core V"; break; case PRODUCT_CORE: - //szVersion+="Windows 8"; - break; - case PRODUCT_CORE_N: - szVersion += "N"; + //szVersion+="10 Home"; break; case PRODUCT_CORE_COUNTRYSPECIFIC: szVersion += "China"; break; + case PRODUCT_CORE_N: + szVersion += "N"; + break; case PRODUCT_CORE_SINGLELANGUAGE: szVersion += "Single Language"; break; case PRODUCT_DATACENTER_EVALUATION_SERVER: szVersion += "Server Datacenter (evaluation installation)"; break; + case PRODUCT_DATACENTER_A_SERVER_CORE: + szVersion += "Server Datacenter, Semi-Annual Channel (core installation)"; + break; + case PRODUCT_STANDARD_A_SERVER_CORE: + szVersion += "Server Standard, Semi-Annual Channel (core installation)"; + break; case PRODUCT_DATACENTER_SERVER: szVersion += "Server Datacenter (full installation)"; break; @@ -344,20 +360,38 @@ static QString queryWinInfo(QueryInfo info) case PRODUCT_DATACENTER_SERVER_V: szVersion += "Server Datacenter without Hyper-V (full installation)"; break; + case PRODUCT_EDUCATION: + szVersion += "Education"; + break; + case PRODUCT_EDUCATION_N: + szVersion += "Education N"; + break; case PRODUCT_ENTERPRISE: szVersion += "Enterprise"; break; case PRODUCT_ENTERPRISE_E: - //szVersion+="Not supported"; + szVersion+= "Enterprise E"; break; - case PRODUCT_ENTERPRISE_N_EVALUATION: - szVersion += "Enterprise N (evaluation installation)"; + case PRODUCT_ENTERPRISE_EVALUATION: + szVersion += "Enterprise Evaluation"; break; case PRODUCT_ENTERPRISE_N: szVersion += "Enterprise N"; break; - case PRODUCT_ENTERPRISE_EVALUATION: - szVersion += "Server Enterprise (evaluation installation)"; + case PRODUCT_ENTERPRISE_N_EVALUATION: + szVersion += "Enterprise N (evaluation installation)"; + break; + case PRODUCT_ENTERPRISE_S: + szVersion+= "Enterprise 2015 LTSB"; + break; + case PRODUCT_ENTERPRISE_S_EVALUATION: + szVersion += "Enterprise 2015 LTSB Evaluation"; + break; + case PRODUCT_ENTERPRISE_S_N: + szVersion += "Windows 10 Enterprise 2015 LTSB N"; + break; + case PRODUCT_ENTERPRISE_S_N_EVALUATION: + szVersion += "Windows 10 Enterprise 2015 LTSB N Evaluation"; break; case PRODUCT_ENTERPRISE_SERVER: szVersion += "Server Enterprise (full installation)"; @@ -374,18 +408,18 @@ static QString queryWinInfo(QueryInfo info) case PRODUCT_ENTERPRISE_SERVER_V: szVersion += "Server Enterprise without Hyper-V (full installation)"; break; - case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT: - szVersion += "Essential Server Solution Management"; - break; case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL: szVersion += "Essential Server Solution Additional"; break; - case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC: - szVersion += "Essential Server Solution Management SVC"; - break; case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC: szVersion += "Essential Server Solution Additional SVC"; break; + case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT: + szVersion += "Essential Server Solution Management"; + break; + case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC: + szVersion += "Essential Server Solution Management SVC"; + break; case PRODUCT_HOME_BASIC: szVersion += "Home Basic"; break; @@ -413,6 +447,12 @@ static QString queryWinInfo(QueryInfo info) case PRODUCT_HYPERV: szVersion += "Hyper-V Server"; break; + case PRODUCT_IOTUAP: + szVersion += "IoT Core"; + break; + //case PRODUCT_IOTUAPCOMMERCIAL: + //szVersion += "IoT Core Commercial"; + //break; case PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT: szVersion += "Essential Business Server Management Server"; break; @@ -422,24 +462,39 @@ static QString queryWinInfo(QueryInfo info) case PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY: szVersion += "Essential Business Server Security Server"; break; + //case PRODUCT_MOBILE_CORE: + //szVersion += "Mobile"; + //break; + //case PRODUCT_MOBILE_ENTERPRISE: + //szVersion += "Mobile Enterprise"; + //break; + case PRODUCT_MULTIPOINT_PREMIUM_SERVER: + szVersion += "MultiPoint Server Premium (full installation)"; + break; case PRODUCT_MULTIPOINT_STANDARD_SERVER: szVersion += "MultiPoint Server Standard (full installation)"; break; - case PRODUCT_MULTIPOINT_PREMIUM_SERVER: - szVersion += "MultiPoint Server Premium (full installation)"; + case PRODUCT_PRO_WORKSTATION: + szVersion += "Pro for Workstations"; + break; + case PRODUCT_PRO_WORKSTATION_N: + szVersion += "Pro for Workstations N"; break; case PRODUCT_PROFESSIONAL: - szVersion += "Professional"; + szVersion += "Pro"; break; case PRODUCT_PROFESSIONAL_E: //szVersion+="Not supported"; break; case PRODUCT_PROFESSIONAL_N: - szVersion += "Professional N"; + szVersion += "Pro N"; break; case PRODUCT_PROFESSIONAL_WMC: szVersion += "Professional with Media Center"; break; + case PRODUCT_SB_SOLUTION_SERVER: + szVersion += "Small Business Server 2011 Essentials"; + break; case PRODUCT_SB_SOLUTION_SERVER_EM: szVersion += "Server For SB Solutions EM"; break; @@ -458,9 +513,6 @@ static QString queryWinInfo(QueryInfo info) case PRODUCT_SERVER_FOUNDATION: szVersion += "Server Foundation"; break; - case PRODUCT_SB_SOLUTION_SERVER: - szVersion += "Small Business Server 2011 Essentials"; - break; case PRODUCT_SMALLBUSINESS_SERVER: szVersion += "Small Business Server"; break; @@ -533,13 +585,6 @@ static QString queryWinInfo(QueryInfo info) case PRODUCT_STORAGE_WORKGROUP_SERVER_CORE: szVersion += "Storage Server Workgroup (core installation)"; break; - case PRODUCT_UNDEFINED: - szVersion += "An unknown product"; - break; - // just use unknown here since we do not care. - case PRODUCT_UNLICENSED: - szVersion += "An unknown product"; - break; case PRODUCT_ULTIMATE: szVersion += "Ultimate"; break; @@ -549,6 +594,13 @@ static QString queryWinInfo(QueryInfo info) case PRODUCT_ULTIMATE_N: szVersion += "Ultimate N"; break; + case PRODUCT_UNDEFINED: + szVersion += "An unknown product"; + break; + // just use unknown here since we do not care. + case PRODUCT_UNLICENSED: + szVersion += "An unknown product"; + break; case PRODUCT_WEB_SERVER: szVersion += "Web Server (full installation)"; break; @@ -562,55 +614,6 @@ static QString queryWinInfo(QueryInfo info) szVersion += "(x64) "; } } - else - { - // Test for the workstation type, for XP 32 bit - if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1) - { - if(osvi.wProductType == VER_NT_WORKSTATION) - { - if(osvi.wSuiteMask & VER_SUITE_PERSONAL) - szVersion += "Home Edition "; - else - szVersion += "Professional "; - } - } - // Test for the server type. - else if(osvi.wProductType == VER_NT_SERVER || osvi.wProductType == VER_NT_DOMAIN_CONTROLLER) - { - if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) - { - if(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64) - { - if(osvi.wSuiteMask & VER_SUITE_DATACENTER) - szVersion += "Datacenter Edition for Itanium-based Systems"; - else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE) - szVersion += "Enterprise Edition for Itanium-based Systems"; - } - - else if(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) - { - if(osvi.wSuiteMask & VER_SUITE_DATACENTER) - szVersion += "Datacenter x64 Edition "; - else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE) - szVersion += "Enterprise x64 Edition "; - else - szVersion += "Standard x64 Edition "; - } - else - { - if(osvi.wSuiteMask & VER_SUITE_DATACENTER) - szVersion += "Datacenter Edition "; - else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE) - szVersion += "Enterprise Edition "; - else if(osvi.wSuiteMask == VER_SUITE_BLADE) - szVersion += "Web Edition "; - else - szVersion += "Standard Edition "; - } - } - } - } } // Display service pack (if any) and build number. szVersion += QString("%1 (Build %2)").arg(QString::fromWCharArray(osvi.szCSDVersion)).arg(osvi.dwBuildNumber & 0xFFFF); |
