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; } ```

Original source