MessageBox(NULL, buf, "Pause", MB_OK);
}
-#include <tchar.h>
-#include <stdio.h>
-
-#ifndef PRODUCT_UNLICENSED
-#define PRODUCT_UNLICENSED 0xABCDABCD
-#define PRODUCT_BUSINESS 0x00000006
-#define PRODUCT_BUSINESS_N 0x00000010
-#define PRODUCT_CLUSTER_SERVER 0x00000012
-#define PRODUCT_DATACENTER_SERVER 0x00000008
-#define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C
-#define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027
-#define PRODUCT_DATACENTER_SERVER_V 0x00000025
-#define PRODUCT_ENTERPRISE 0x00000004
-#define PRODUCT_ENTERPRISE_E 0x00000046
-#define PRODUCT_ENTERPRISE_N 0x0000001B
-#define PRODUCT_ENTERPRISE_SERVER 0x0000000A
-#define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E
-#define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029
-#define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F
-#define PRODUCT_ENTERPRISE_SERVER_V 0x00000026
-#define PRODUCT_HOME_BASIC 0x00000002
-#define PRODUCT_HOME_BASIC_E 0x00000043
-#define PRODUCT_HOME_BASIC_N 0x00000005
-#define PRODUCT_HOME_PREMIUM 0x00000003
-#define PRODUCT_HOME_PREMIUM_E 0x00000044
-#define PRODUCT_HOME_PREMIUM_N 0x0000001A
-#define PRODUCT_HYPERV 0x0000002A
-#define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E
-#define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020
-#define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F
-#define PRODUCT_PROFESSIONAL 0x00000030
-#define PRODUCT_PROFESSIONAL_E 0x00000045
-#define PRODUCT_PROFESSIONAL_N 0x00000031
-#define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018
-#define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023
-#define PRODUCT_SERVER_FOUNDATION 0x00000021
-#define PRODUCT_SMALLBUSINESS_SERVER 0x00000009
-#define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038
-#define PRODUCT_STANDARD_SERVER 0x00000007
-#define PRODUCT_STANDARD_SERVER_CORE 0x0000000D
-#define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028
-#define PRODUCT_STANDARD_SERVER_V 0x00000024
-#define PRODUCT_STARTER 0x0000000B
-#define PRODUCT_STARTER_E 0x00000042
-#define PRODUCT_STARTER_N 0x0000002F
-#define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017
-#define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014
-#define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015
-#define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016
-#define PRODUCT_UNDEFINED 0x00000000
-#define PRODUCT_ULTIMATE 0x00000001
-#define PRODUCT_ULTIMATE_E 0x00000047
-#define PRODUCT_ULTIMATE_N 0x0000001C
-#define PRODUCT_WEB_SERVER 0x00000011
-#define PRODUCT_WEB_SERVER_CORE 0x0000001D
-
-#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x19
-#define SM_SERVERR2 89
-#define VER_SERVER_NT 0x80000000
-
-#define PRODUCT_CLUSTER_SERVER_V 0x00000040
-#define PRODUCT_ENTERPRISE_EVALUATION 0x00000048
-#define PRODUCT_ENTERPRISE_N_EVALUATION 0x00000054
-#define PRODUCT_HOME_PREMIUM_SERVER 0x00000022
-#define PRODUCT_HOME_SERVER 0x00000013
-#define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x0000002E
-#define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x0000002B
-#define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x0000002C
-#define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x00000060
-#define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x0000002D
-#define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x0000005F
-#define PRODUCT_CORE 0x00000065
-#define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063
-#define PRODUCT_CORE_N 0x00000062
-#define PRODUCT_CORE_SINGLELANGUAGE 0x00000064
-#define PRODUCT_DATACENTER_EVALUATION_SERVER 0x00000050
-#define PRODUCT_DATACENTER_A_SERVER_CORE 0x00000091
-#define PRODUCT_STANDARD_A_SERVER_CORE 0x00000092
-#define PRODUCT_EDUCATION 0x00000079
-#define PRODUCT_EDUCATION_N 0x0000007A
-#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x0000003C
-#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x0000003E
-#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x0000003B
-#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x0000003D
-#define PRODUCT_MOBILE_CORE 0x00000068
-#define PRODUCT_MOBILE_ENTERPRISE 0x00000085
-#define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x0000004D
-#define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x0000004C
-#define PRODUCT_PRO_WORKSTATION 0x000000A1
-#define PRODUCT_PRO_WORKSTATION_N 0x000000A2
-#define PRODUCT_PROFESSIONAL_WMC 0x00000067
-#define PRODUCT_SB_SOLUTION_SERVER 0x00000032
-#define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036
-#define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033
-#define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037
-#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x0000003F
-#define PRODUCT_STANDARD_EVALUATION_SERVER 0x0000004F
-#define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034
-#define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035
-#endif
-
-/* Windows 10 */
-#ifndef PRODUCT_ENTERPRISE_S
-#define PRODUCT_ENTERPRISE_S 0x0000007D
-#define PRODUCT_ENTERPRISE_S_EVALUATION 0x00000081
-#define PRODUCT_ENTERPRISE_S_N 0x0000007E
-#define PRODUCT_ENTERPRISE_S_N_EVALUATION 0x00000082
-#endif
-#ifndef PRODUCT_IOTUAP
-#define PRODUCT_IOTUAP 0x0000007B
-#endif
-#ifndef PRODUCT_IOTUAPCOMMERCIAL
-#define PRODUCT_IOTUAPCOMMERCIAL 0x00000083
-#endif
-
-#define PRODUCT_DATACENTER_A_SERVER_CORE 0x00000091
-#define PRODUCT_PRO_WORKSTATION 0x000000A1
-#define PRODUCT_PRO_WORKSTATION_N 0x000000A2
-#define PRODUCT_STANDARD_A_SERVER_CORE 0x00000092
-
-
-
-
-#ifndef PRODUCT_PROFESSIONAL
-#define PRODUCT_PROFESSIONAL 0x00000030
-#endif
-#ifndef VER_SUITE_STORAGE_SERVER
-#define VER_SUITE_STORAGE_SERVER 0x00002000
-#endif
-#ifndef VER_SUITE_COMPUTE_SERVER
-#define VER_SUITE_COMPUTE_SERVER 0x00004000
-#endif
-
-/* Unknown value */
-#ifndef VER_SUITE_WH_SERVER
-#define VER_SUITE_WH_SERVER -1
-#endif
-
-typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
-typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);
-
/*
* Get Windows version display string
*/
bool GetWindowsVersionString(LPTSTR osbuf, int maxsiz)
{
- OSVERSIONINFOEX osvi;
- SYSTEM_INFO si;
- PGNSI pGNSI;
- PGPI pGPI;
- BOOL bOsVersionInfoEx;
- DWORD dwType;
+ HRESULT hr;
- memset(&si, 0, sizeof(SYSTEM_INFO));
- memset(&osvi, 0, sizeof(OSVERSIONINFOEX));
+ HKEY currentVersionKey;
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
-
- if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
- return 1;
+ DWORD type;
+ DWORD size;
- // Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.
+ *osbuf = 0;
+ char *p = osbuf;
- pGNSI = (PGNSI)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),
- "GetNativeSystemInfo");
- if (pGNSI) {
- pGNSI(&si);
- } else {
- GetSystemInfo(&si);
+ hr = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_ALL_ACCESS, ¤tVersionKey);
+ if (hr != ERROR_SUCCESS) {
+ return false;
}
- if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion > 4) {
- bstrncpy(osbuf, TEXT("Microsoft "), maxsiz);
-
- // Test for the specific product.
-
- if (osvi.dwMajorVersion == 10) {
- if (osvi.dwMinorVersion == 0) {
- if (osvi.wProductType == VER_NT_WORKSTATION)
- bstrncat(osbuf, TEXT("Windows 10 "), maxsiz);
- else
- bstrncat(osbuf, TEXT("Windows Server 2016 " ), maxsiz);
- }
-
- pGPI = (PGPI)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),
- "GetProductInfo");
-
- if (pGPI) {
- pGPI(osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType);
- } else {
- dwType = PRODUCT_HOME_BASIC;
- }
-
- switch (dwType) {
- case PRODUCT_ULTIMATE:
- bstrncat(osbuf, TEXT("Ultimate Edition" ), maxsiz);
- break;
- case PRODUCT_PROFESSIONAL:
- bstrncat(osbuf, TEXT("Professional" ), maxsiz);
- break;
- case PRODUCT_HOME_PREMIUM:
- bstrncat(osbuf, TEXT("Home Premium Edition" ), maxsiz);
- break;
- case PRODUCT_HOME_BASIC:
- bstrncat(osbuf, TEXT("Home Basic Edition" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE:
- bstrncat(osbuf, TEXT("Enterprise Edition" ), maxsiz);
- break;
- case PRODUCT_BUSINESS:
- bstrncat(osbuf, TEXT("Business Edition" ), maxsiz);
- break;
- case PRODUCT_BUSINESS_N:
- bstrncat(osbuf, TEXT("Business Edition N" ), maxsiz);
- break;
- case PRODUCT_CORE:
- bstrncat(osbuf, TEXT("Home Edition" ), maxsiz);
- break;
- case PRODUCT_CORE_COUNTRYSPECIFIC:
- bstrncat(osbuf, TEXT("Home China Edition" ), maxsiz);
- break;
- case PRODUCT_CORE_N:
- bstrncat(osbuf, TEXT("Home N Edition" ), maxsiz);
- break;
- case PRODUCT_CORE_SINGLELANGUAGE:
- bstrncat(osbuf, TEXT("Home Single Language Edition" ), maxsiz);
- break;
- case PRODUCT_DATACENTER_EVALUATION_SERVER:
- bstrncat(osbuf, TEXT("Server Datacenter (evaluation installation)" ), maxsiz);
- break;
- case PRODUCT_DATACENTER_A_SERVER_CORE:
- bstrncat(osbuf, TEXT("Server Datacenter, Semi-Annual Channel (core installation)" ), maxsiz);
- break;
- case PRODUCT_STANDARD_A_SERVER_CORE:
- bstrncat(osbuf, TEXT("Server Standard, Semi-Annual Channel (core installation)" ), maxsiz);
- break;
- case PRODUCT_DATACENTER_SERVER_CORE_V:
- bstrncat(osbuf, TEXT("Server Datacenter without Hyper-V (core installation)" ), maxsiz);
- break;
- case PRODUCT_DATACENTER_SERVER_V:
- bstrncat(osbuf, TEXT("Server Datacenter without Hyper-V (full installation)" ), maxsiz);
- break;
- case PRODUCT_EDUCATION:
- bstrncat(osbuf, TEXT("Education" ), maxsiz);
- break;
- case PRODUCT_EDUCATION_N:
- bstrncat(osbuf, TEXT("Education N" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_E:
- bstrncat(osbuf, TEXT("Enterprise E" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_EVALUATION:
- bstrncat(osbuf, TEXT("Enterprise Evaluation" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_N:
- bstrncat(osbuf, TEXT("Enterprise N" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_N_EVALUATION:
- bstrncat(osbuf, TEXT("Enterprise N Evaluation" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_S:
- bstrncat(osbuf, TEXT("Enterprise 2015 LTSB" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_S_EVALUATION:
- bstrncat(osbuf, TEXT("Enterprise 2015 LTSB Evaluation" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_S_N:
- bstrncat(osbuf, TEXT("Enterprise 2015 LTSB N" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_S_N_EVALUATION:
- bstrncat(osbuf, TEXT("Enterprise 2015 LTSB N Evaluation" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_SERVER:
- bstrncat(osbuf, TEXT("Enterprise (full installation)" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_SERVER_CORE_V:
- bstrncat(osbuf, TEXT("Server Enterprise without Hyper-V (core installation)" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_SERVER_IA64:
- bstrncat(osbuf, TEXT("Server Enterprise for Itanium-based Systems" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_SERVER_V:
- bstrncat(osbuf, TEXT("Server Enterprise without Hyper-V (full installation)" ), maxsiz);
- break;
- case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL:
- bstrncat(osbuf, TEXT("Essential Server Solution Additional" ), maxsiz);
- break;
- case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC:
- bstrncat(osbuf, TEXT("Essential Server Solution Additional SVC" ), maxsiz);
- break;
- case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT:
- bstrncat(osbuf, TEXT("Essential Server Solution Management" ), maxsiz);
- break;
- case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC:
- bstrncat(osbuf, TEXT("Essential Server Solution Management SVC" ), maxsiz);
- break;
- case PRODUCT_HOME_BASIC_E:
- bstrncat(osbuf, TEXT("Not supported" ), maxsiz);
- break;
- case PRODUCT_HOME_BASIC_N:
- bstrncat(osbuf, TEXT("Home Basic N" ), maxsiz);
- break;
- case PRODUCT_HOME_PREMIUM_E:
- bstrncat(osbuf, TEXT("Not supported" ), maxsiz);
- break;
- case PRODUCT_HOME_PREMIUM_N:
- bstrncat(osbuf, TEXT("Home Premium N" ), maxsiz);
- break;
- case PRODUCT_HOME_PREMIUM_SERVER:
- bstrncat(osbuf, TEXT("Home Server 2011" ), maxsiz);
- break;
- case PRODUCT_HOME_SERVER:
- bstrncat(osbuf, TEXT("Storage Server 2008 R2 Essentials" ), maxsiz);
- break;
- case PRODUCT_HYPERV:
- bstrncat(osbuf, TEXT("Hyper-V Server" ), maxsiz);
- break;
- case PRODUCT_IOTUAP:
- bstrncat(osbuf, TEXT("IoT Core" ), maxsiz);
- break;
- case PRODUCT_IOTUAPCOMMERCIAL:
- bstrncat(osbuf, TEXT("IoT Core Commercial" ), maxsiz);
- break;
- case PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT:
- bstrncat(osbuf, TEXT("Essential Business Server Management Server" ), maxsiz);
- break;
- case PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING:
- bstrncat(osbuf, TEXT("Essential Business Server Messaging Server" ), maxsiz);
- break;
- case PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY:
- bstrncat(osbuf, TEXT("Essential Business Server Security Server" ), maxsiz);
- break;
- case PRODUCT_MOBILE_CORE:
- bstrncat(osbuf, TEXT("Mobile" ), maxsiz);
- break;
- case PRODUCT_MOBILE_ENTERPRISE:
- bstrncat(osbuf, TEXT("Mobile Enterprise" ), maxsiz);
- break;
- case PRODUCT_MULTIPOINT_PREMIUM_SERVER:
- bstrncat(osbuf, TEXT("MultiPoint Server Premium (full installation)" ), maxsiz);
- break;
- case PRODUCT_MULTIPOINT_STANDARD_SERVER:
- bstrncat(osbuf, TEXT("MultiPoint Server Standard (full installation)" ), maxsiz);
- break;
- case PRODUCT_PRO_WORKSTATION:
- bstrncat(osbuf, TEXT("Pro for Workstations" ), maxsiz);
- break;
- case PRODUCT_PRO_WORKSTATION_N:
- bstrncat(osbuf, TEXT("Pro for Workstations N" ), maxsiz);
- break;
- case PRODUCT_PROFESSIONAL_E:
- bstrncat(osbuf, TEXT("Not supported" ), maxsiz);
- break;
- case PRODUCT_PROFESSIONAL_N:
- bstrncat(osbuf, TEXT("Pro N" ), maxsiz);
- break;
- case PRODUCT_PROFESSIONAL_WMC:
- bstrncat(osbuf, TEXT("Professional with Media Center" ), maxsiz);
- break;
- case PRODUCT_SB_SOLUTION_SERVER:
- bstrncat(osbuf, TEXT("Small Business Server 2011 Essentials" ), maxsiz);
- break;
- case PRODUCT_SB_SOLUTION_SERVER_EM:
- bstrncat(osbuf, TEXT("Server For SB Solutions EM" ), maxsiz);
- break;
- case PRODUCT_SERVER_FOR_SB_SOLUTIONS:
- bstrncat(osbuf, TEXT("Server For SB Solutions" ), maxsiz);
- break;
- case PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM:
- bstrncat(osbuf, TEXT("Server For SB Solutions EM" ), maxsiz);
- break;
- case PRODUCT_SERVER_FOR_SMALLBUSINESS:
- bstrncat(osbuf, TEXT("for Windows Essential Server Solutions" ), maxsiz);
- break;
- case PRODUCT_SERVER_FOR_SMALLBUSINESS_V:
- bstrncat(osbuf, TEXT("without Hyper-V for Windows Essential Server Solutions" ), maxsiz);
- break;
- case PRODUCT_SERVER_FOUNDATION:
- bstrncat(osbuf, TEXT("Server Foundation" ), maxsiz);
- break;
- case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE:
- bstrncat(osbuf, TEXT("Small Business Server Premium (core installation)" ), maxsiz);
- break;
- case PRODUCT_SOLUTION_EMBEDDEDSERVER:
- bstrncat(osbuf, TEXT("Windows MultiPoint Server" ), maxsiz);
- break;
- case PRODUCT_STANDARD_EVALUATION_SERVER:
- bstrncat(osbuf, TEXT("Server Standard (evaluation installation)" ), maxsiz);
- break;
- case PRODUCT_STANDARD_SERVER_CORE_V:
- bstrncat(osbuf, TEXT("Server Standard without Hyper-V" ), maxsiz);
- break;
- case PRODUCT_STANDARD_SERVER_SOLUTIONS:
- bstrncat(osbuf, TEXT("Server Solutions Premium" ), maxsiz);
- break;
- case PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE:
- bstrncat(osbuf, TEXT("Server Solutions Premium (core installation)" ), maxsiz);
- break;
- case PRODUCT_STARTER_E:
- bstrncat(osbuf, TEXT("Not supported" ), maxsiz);
- break;
- case PRODUCT_STARTER_N:
- bstrncat(osbuf, TEXT("Starter N" ), maxsiz);
- break;
- case PRODUCT_STORAGE_ENTERPRISE_SERVER:
- bstrncat(osbuf, TEXT("Storage Server Enterprise" ), maxsiz);
- break;
- case PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE:
- bstrncat(osbuf, TEXT("Storage Server Enterprise (core installation)" ), maxsiz);
- break;
- case PRODUCT_STORAGE_EXPRESS_SERVER:
- bstrncat(osbuf, TEXT("Storage Server Express" ), maxsiz);
- break;
- case PRODUCT_STORAGE_EXPRESS_SERVER_CORE:
- bstrncat(osbuf, TEXT("Storage Server Express (core installation)" ), maxsiz);
- break;
- case PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER:
- bstrncat(osbuf, TEXT("Storage Server Standard (evaluation installation)" ), maxsiz);
- break;
- case PRODUCT_STORAGE_STANDARD_SERVER:
- bstrncat(osbuf, TEXT("Storage Server Standard" ), maxsiz);
- break;
- case PRODUCT_STORAGE_STANDARD_SERVER_CORE:
- bstrncat(osbuf, TEXT("Storage Server Standard (core installation)" ), maxsiz);
- break;
- case PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER:
- bstrncat(osbuf, TEXT("Storage Server Workgroup (evaluation installation)" ), maxsiz);
- break;
- case PRODUCT_STORAGE_WORKGROUP_SERVER:
- bstrncat(osbuf, TEXT("Storage Server Workgroup" ), maxsiz);
- break;
- case PRODUCT_STORAGE_WORKGROUP_SERVER_CORE:
- bstrncat(osbuf, TEXT("Storage Server Workgroup (core installation)" ), maxsiz);
- break;
- case PRODUCT_ULTIMATE_E:
- bstrncat(osbuf, TEXT("Not supported" ), maxsiz);
- break;
- case PRODUCT_ULTIMATE_N:
- bstrncat(osbuf, TEXT("Ultimate N" ), maxsiz);
- break;
- case PRODUCT_UNDEFINED:
- bstrncat(osbuf, TEXT("Unknown product" ), maxsiz);
- break;
- case PRODUCT_WEB_SERVER_CORE:
- bstrncat(osbuf, TEXT("Web Server (core installation)" ), maxsiz);
- break;
- case PRODUCT_STARTER:
- bstrncat(osbuf, TEXT("Starter Edition" ), maxsiz);
- break;
- case PRODUCT_CLUSTER_SERVER_V:
- bstrncat(osbuf, TEXT("Server Hyper Core V" ), maxsiz);
- break;
- case PRODUCT_CLUSTER_SERVER:
- bstrncat(osbuf, TEXT("Cluster Server Edition" ), maxsiz);
- break;
- case PRODUCT_DATACENTER_SERVER:
- bstrncat(osbuf, TEXT("Datacenter Edition" ), maxsiz);
- break;
- case PRODUCT_DATACENTER_SERVER_CORE:
- bstrncat(osbuf, TEXT("Datacenter Edition (core installation)" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_SERVER_CORE:
- bstrncat(osbuf, TEXT("Enterprise Edition (core installation)" ), maxsiz);
- break;
- case PRODUCT_SMALLBUSINESS_SERVER:
- bstrncat(osbuf, TEXT("Small Business Server" ), maxsiz);
- break;
- case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
- bstrncat(osbuf, TEXT("Small Business Server Premium Edition" ), maxsiz);
- break;
- case PRODUCT_STANDARD_SERVER:
- bstrncat(osbuf, TEXT("Standard Edition" ), maxsiz);
- break;
- case PRODUCT_STANDARD_SERVER_CORE:
- bstrncat(osbuf, TEXT("Standard Edition (core installation)" ), maxsiz);
- break;
- case PRODUCT_WEB_SERVER:
- bstrncat(osbuf, TEXT("Web Server Edition" ), maxsiz);
- break;
- }
- }
- if (osvi.dwMajorVersion == 6) {
- if (osvi.dwMinorVersion == 0) {
- if (osvi.wProductType == VER_NT_WORKSTATION)
- bstrncat(osbuf, TEXT("Windows Vista "), maxsiz);
- else
- bstrncat(osbuf, TEXT("Windows Server 2008 " ), maxsiz);
- }
-
- if (osvi.dwMinorVersion == 1) {
- if (osvi.wProductType == VER_NT_WORKSTATION )
- bstrncat(osbuf, TEXT("Windows 7 "), maxsiz);
- else
- bstrncat(osbuf, TEXT("Windows Server 2008 R2 " ), maxsiz);
- }
- if (osvi.dwMinorVersion == 2) {
- if (osvi.wProductType == VER_NT_WORKSTATION )
- bstrncat(osbuf, TEXT("Windows 8 "), maxsiz);
- else
- bstrncat(osbuf, TEXT("Windows Server 2012 " ), maxsiz);
- }
- if (osvi.dwMinorVersion == 3) {
- if (osvi.wProductType == VER_NT_WORKSTATION )
- bstrncat(osbuf, TEXT("Windows 8.1 "), maxsiz);
- else
- bstrncat(osbuf, TEXT("Windows Server 2012 RC2 " ), maxsiz);
- }
-
- pGPI = (PGPI)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),
- "GetProductInfo");
-
- if (pGPI) {
- pGPI(osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType);
- } else {
- dwType = PRODUCT_HOME_BASIC;
- }
-
- switch (dwType) {
- case PRODUCT_ULTIMATE:
- bstrncat(osbuf, TEXT("Ultimate Edition" ), maxsiz);
- break;
- case PRODUCT_PROFESSIONAL:
- bstrncat(osbuf, TEXT("Professional" ), maxsiz);
- break;
- case PRODUCT_HOME_PREMIUM:
- bstrncat(osbuf, TEXT("Home Premium Edition" ), maxsiz);
- break;
- case PRODUCT_HOME_BASIC:
- bstrncat(osbuf, TEXT("Home Basic Edition" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE:
- bstrncat(osbuf, TEXT("Enterprise Edition" ), maxsiz);
- break;
- case PRODUCT_BUSINESS:
- bstrncat(osbuf, TEXT("Business Edition" ), maxsiz);
- break;
- case PRODUCT_STARTER:
- bstrncat(osbuf, TEXT("Starter Edition" ), maxsiz);
- break;
- case PRODUCT_CLUSTER_SERVER:
- bstrncat(osbuf, TEXT("Cluster Server Edition" ), maxsiz);
- break;
- case PRODUCT_DATACENTER_SERVER:
- bstrncat(osbuf, TEXT("Datacenter Edition" ), maxsiz);
- break;
- case PRODUCT_DATACENTER_SERVER_CORE:
- bstrncat(osbuf, TEXT("Datacenter Edition (core installation)" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_SERVER:
- bstrncat(osbuf, TEXT("Enterprise Edition" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_SERVER_CORE:
- bstrncat(osbuf, TEXT("Enterprise Edition (core installation)" ), maxsiz);
- break;
- case PRODUCT_ENTERPRISE_SERVER_IA64:
- bstrncat(osbuf, TEXT("Enterprise Edition for Itanium-based Systems" ), maxsiz);
- break;
- case PRODUCT_SMALLBUSINESS_SERVER:
- bstrncat(osbuf, TEXT("Small Business Server" ), maxsiz);
- break;
- case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
- bstrncat(osbuf, TEXT("Small Business Server Premium Edition" ), maxsiz);
- break;
- case PRODUCT_STANDARD_SERVER:
- bstrncat(osbuf, TEXT("Standard Edition" ), maxsiz);
- break;
- case PRODUCT_STANDARD_SERVER_CORE:
- bstrncat(osbuf, TEXT("Standard Edition (core installation)" ), maxsiz);
- break;
- case PRODUCT_WEB_SERVER:
- bstrncat(osbuf, TEXT("Web Server Edition" ), maxsiz);
- break;
- }
+ hr = RegQueryValueExA(currentVersionKey, "ProductName", NULL, &type, NULL, &size);
+ if (hr == ERROR_MORE_DATA || hr == ERROR_SUCCESS) {
+ hr = RegQueryValueExA(currentVersionKey, "ProductName", NULL, &type, (LPBYTE)p, &size);
+ if (hr != ERROR_SUCCESS) {
+ return false;
}
-
- if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) {
- if( GetSystemMetrics(SM_SERVERR2) )
- bstrncat(osbuf, TEXT( "Windows Server 2003 R2 "), maxsiz);
- else if (osvi.wSuiteMask & VER_SUITE_STORAGE_SERVER)
- bstrncat(osbuf, TEXT( "Windows Storage Server 2003"), maxsiz);
- else if (osvi.wSuiteMask & VER_SUITE_WH_SERVER )
- bstrncat(osbuf, TEXT( "Windows Home Server"), maxsiz);
- else if (osvi.wProductType == VER_NT_WORKSTATION &&
- si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
- bstrncat(osbuf, TEXT( "Windows XP Professional x64 Edition"), maxsiz);
- else
- bstrncat(osbuf, TEXT("Windows Server 2003 "), maxsiz);
-
- // Test for the server type.
- if (osvi.wProductType != VER_NT_WORKSTATION) {
- if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_IA64) {
- if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- bstrncat(osbuf, TEXT( "Datacenter Edition for Itanium-based Systems" ), maxsiz);
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- bstrncat(osbuf, TEXT( "Enterprise Edition for Itanium-based Systems" ), maxsiz);
- }
-
- else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) {
- if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- bstrncat(osbuf, TEXT( "Datacenter x64 Edition" ), maxsiz);
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- bstrncat(osbuf, TEXT( "Enterprise x64 Edition" ), maxsiz);
- else bstrncat(osbuf, TEXT( "Standard x64 Edition" ), maxsiz);
- } else {
- if ( osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER )
- bstrncat(osbuf, TEXT( "Compute Cluster Edition" ), maxsiz);
- else if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- bstrncat(osbuf, TEXT( "Datacenter Edition" ), maxsiz);
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- bstrncat(osbuf, TEXT( "Enterprise Edition" ), maxsiz);
- else if ( osvi.wSuiteMask & VER_SUITE_BLADE )
- bstrncat(osbuf, TEXT( "Web Edition" ), maxsiz);
- else bstrncat(osbuf, TEXT( "Standard Edition" ), maxsiz);
- }
- }
- }
-
- if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1) {
- bstrncat(osbuf, TEXT("Windows XP "), maxsiz);
- if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
- bstrncat(osbuf, TEXT( "Home Edition" ), maxsiz);
- else
- bstrncat(osbuf, TEXT( "Professional" ), maxsiz);
- }
-
- if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) {
- bstrncat(osbuf, TEXT("Windows 2000 "), maxsiz);
- if ( osvi.wProductType == VER_NT_WORKSTATION ) {
- bstrncat(osbuf, TEXT( "Professional" ), maxsiz);
- } else {
- if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- bstrncat(osbuf, TEXT( "Datacenter Server" ), maxsiz);
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- bstrncat(osbuf, TEXT( "Advanced Server" ), maxsiz);
- else bstrncat(osbuf, TEXT( "Server" ), maxsiz);
- }
- }
-
- // Include service pack (if any) and build number.
-
- if (_tcslen(osvi.szCSDVersion) > 0) {
- bstrncat(osbuf, TEXT(" ") , maxsiz);
- bstrncat(osbuf, osvi.szCSDVersion, maxsiz);
+ p += size-1;
+ *p++ = ' ';
+ }
+ hr = RegQueryValueExA(currentVersionKey, "EditionID", NULL, &type, NULL, &size);
+ if (hr == ERROR_MORE_DATA || hr == ERROR_SUCCESS) {
+ hr = RegQueryValueExA(currentVersionKey, "EditionID", NULL, &type, (LPBYTE)p, &size);
+ if (hr != ERROR_SUCCESS) {
+ return false;
}
-
- char buf[80];
-
- snprintf(buf, 80, " (build %d)", (int)osvi.dwBuildNumber);
- bstrncat(osbuf, buf, maxsiz);
-
- if (osvi.dwMajorVersion >= 6) {
- if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
- bstrncat(osbuf, TEXT( ", 64-bit" ), maxsiz);
- else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL )
- bstrncat(osbuf, TEXT(", 32-bit"), maxsiz);
+ p += size-1;
+ *p++ = ' ';
+ *p++ = '(';
+ }
+ hr = RegQueryValueExA(currentVersionKey, "CurrentBuild", NULL, &type, NULL, &size);
+ if (hr == ERROR_MORE_DATA || hr == ERROR_SUCCESS) {
+ hr = RegQueryValueExA(currentVersionKey, "CurrentBuild", NULL, &type, (LPBYTE)p, &size);
+ if (hr != ERROR_SUCCESS) {
+ return false;
}
-
- return true;
- } else {
- bstrncpy(osbuf, "Unknown Windows version.", maxsiz);
- return true;
+ p += size-1;
+ *p++ = ')';
}
+ return true;
}