Index: src/ch/WindowsVersion.cpp =================================================================== diff -u -N -r50ad2dc9f0b42ba432bb54e4a042582277410773 -r50007f112b77cba170e6c427fee5428bda2d9dc5 --- src/ch/WindowsVersion.cpp (.../WindowsVersion.cpp) (revision 50ad2dc9f0b42ba432bb54e4a042582277410773) +++ src/ch/WindowsVersion.cpp (.../WindowsVersion.cpp) (revision 50007f112b77cba170e6c427fee5428bda2d9dc5) @@ -34,7 +34,7 @@ if (!m_wstrServicePack.empty()) wstrFullVer += L" " + m_wstrServicePack; - wstrFullVer += L" (" + m_wstrVersion + wstrShortInstallType + L";" + m_wstrCpuArch + L")"; + wstrFullVer += L" (" + m_wstrVersion + wstrShortInstallType + L")"; return wstrFullVer; } @@ -62,6 +62,28 @@ return m_wstrCpuArch; } +bool WindowsVersion::IsWindowsXP() +{ + OSVERSIONINFOEX ovi = { 0 }; + ovi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + + if(!GetVersionEx((OSVERSIONINFO*)&ovi)) + return false; + + if(ovi.dwMajorVersion != 5) + return false; + + // 32-bit WinXP + if(ovi.dwMinorVersion == 1) + return true; + + // 64bit WinXP + SYSTEM_INFO si = { 0 }; + GetNativeSystemInfo(&si); + + return ovi.dwMinorVersion == 2 && ovi.wProductType == VER_NT_WORKSTATION && si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64; +} + void WindowsVersion::UpdateCachedData() { if(m_bCacheFilled) @@ -96,19 +118,19 @@ case PROCESSOR_ARCHITECTURE_AMD64: { #ifndef _M_AMD64 - m_wstrCpuArch = L"x64-"; + m_wstrCpuArch = L"x86_64 WOW64"; #else - m_wstrCpuArch = L"x64"; + m_wstrCpuArch = L"x86_64"; #endif break; } case PROCESSOR_ARCHITECTURE_INTEL: { #ifndef _M_IX86 - m_wstrCpuArch = L"x86-"; + m_wstrCpuArch = L"x86_32-"; // should not happen #else - m_wstrCpuArch = L"x86"; + m_wstrCpuArch = L"x86_32"; #endif break; }