summaryrefslogtreecommitdiffstats
path: root/base/win_util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'base/win_util.cc')
-rw-r--r--base/win_util.cc19
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;
}