diff options
Diffstat (limited to 'base/win_util.cc')
-rw-r--r-- | base/win_util.cc | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/base/win_util.cc b/base/win_util.cc index 8373f4c..c3bc69b 100644 --- a/base/win_util.cc +++ b/base/win_util.cc @@ -39,9 +39,9 @@ WinVersion GetWinVersion() { static bool checked_version = false; static WinVersion win_version = WINVERSION_PRE_2000; if (!checked_version) { - OSVERSIONINFO version_info; + OSVERSIONINFOEX version_info; version_info.dwOSVersionInfoSize = sizeof version_info; - GetVersionEx(&version_info); + GetVersionEx(reinterpret_cast<OSVERSIONINFO*>(&version_info)); if (version_info.dwMajorVersion == 5) { switch (version_info.dwMinorVersion) { case 0: @@ -55,8 +55,19 @@ WinVersion GetWinVersion() { win_version = WINVERSION_SERVER_2003; break; } - } else if (version_info.dwMajorVersion >= 6) { - win_version = WINVERSION_VISTA; + } else if (version_info.dwMajorVersion == 6) { + if (version_info.wProductType != VER_NT_WORKSTATION) { + // 2008 is 6.0, and 2008 R2 is 6.1. + win_version = WINVERSION_2008; + } else { + if (version_info.dwMinorVersion == 0) { + win_version = WINVERSION_VISTA; + } else { + win_version = WINVERSION_WIN7; + } + } + } else if (version_info.dwMajorVersion > 6) { + win_version = WINVERSION_WIN7; } checked_version = true; } |