Skip to content

Instantly share code, notes, and snippets.

@RazenIW
Last active December 19, 2022 03:52
Show Gist options
  • Save RazenIW/def11b1f07b952287906854e757f7499 to your computer and use it in GitHub Desktop.
Save RazenIW/def11b1f07b952287906854e757f7499 to your computer and use it in GitHub Desktop.
Accurately getting the running Windows version in C++
#include <iostream>
#include <windows.h>
// Required for RtlGetVersion()
#pragma comment(lib, "ntdll.lib")
extern "C" {
NTSYSAPI NTSTATUS NTAPI RtlGetVersion(PRTL_OSVERSIONINFOEXW lpVersionInformation);
}
std::string get_windows_version() {
std::string windows_version;
RTL_OSVERSIONINFOEXW osvi;
ZeroMemory(&osvi, sizeof(osvi));
osvi.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
RtlGetVersion(&osvi);
if (osvi.dwMajorVersion == 10 && osvi.dwMinorVersion == 0 && osvi.dwBuildNumber > 22000)
windows_version = "Windows 11";
else if (osvi.dwMajorVersion == 10 && osvi.dwMinorVersion == 0)
windows_version = "Windows 10";
else if (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 3)
windows_version = "Windows 8.1";
else if (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 2)
windows_version = "Windows 8";
else if (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1)
windows_version = "Windows 7";
else if (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0)
windows_version = "Windows Vista";
else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1)
windows_version = "Windows XP";
else
windows_version = "Unknown version";
SYSTEM_INFO system_info;
GetNativeSystemInfo(&system_info);
if (system_info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || system_info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64)
windows_version += " (64-bit)";
else
windows_version += " (32-bit)";
return windows_version;
}
int main(int argc, char* argv[]) {
std::string version = get_windows_version();
std::cout << version << std::endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment