How do I detect whether my software is running on windows XP?
c++, detection, windows, windows-xp
Solution
On the documentation page for the `OSVERSIONINFOEX` structure, the two relevant fields say this:
For more information, see Remarks.
Down in the remarks section is a handy table:
Operating system Version number dwMajorVersion dwMinorVersion Other
Windows 8 6.2 6 2 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 2012 6.2 6 2 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows 7 6.1 6 1 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 2008 R2 6.1 6 1 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows Server 2008 6 6 0 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows Vista 6 6 0 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 2003 R2 5.2 5 2 GetSystemMetrics(SM_SERVERR2) != 0
Windows Home Server 5.2 5 2 OSVERSIONINFOEX.wSuiteMask & VER_SUITE_WH_SERVER
Windows Server 2003 5.2 5 2 GetSystemMetrics(SM_SERVERR2) == 0
Windows XP Prof x64 Ed 5.2 5 2 (OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION) && (SYSTEM_INFO.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
Windows XP 5.1 5 1 Not applicable
Windows 2000 5 5 0 Not applicable
As seen in the table, XP is 5.1.
Problem
I have some code running to detect windows XP which I think should work but what should I replace the '??'s with to detect whether I'm running on Windows XP? ``` bool IsWindowsXP() { bool isWindowsXp = false; OSVERSIONINFOEX osvi; ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if( GetVersionEx((OSVERSIONINFO*)&osvi) ) { const DWORD MinXpVersion = ??; const DWORD MaxXpVersion = ??; if ((osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (vi.dwMajorVersion >= MinXpVersion) && (vi.dwMajorVersion <= MinXpVersion)) { isWindowsXp = false; } } return isWindowsXp; } ```