diff options
author | nsylvain@chromium.org <nsylvain@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-12 20:23:10 +0000 |
---|---|---|
committer | nsylvain@chromium.org <nsylvain@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-12 20:23:10 +0000 |
commit | edb4c82c5b851305a2045fc4661912c7d6b10de4 (patch) | |
tree | 4df3f11cf27ed31811637ef3149affc3bd056f39 /base | |
parent | 3fad9ce12443c3cecdcb0759586e77ac8a639a4c (diff) | |
download | chromium_src-edb4c82c5b851305a2045fc4661912c7d6b10de4.zip chromium_src-edb4c82c5b851305a2045fc4661912c7d6b10de4.tar.gz chromium_src-edb4c82c5b851305a2045fc4661912c7d6b10de4.tar.bz2 |
Add code to be able to detect windows7 and 2008 in GetWinVersion.
Review URL: http://codereview.chromium.org/21274
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9694 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r-- | base/win_util.cc | 19 | ||||
-rw-r--r-- | base/win_util.h | 2 |
2 files changed, 17 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; } diff --git a/base/win_util.h b/base/win_util.h index 2af65a4..5c49efd 100644 --- a/base/win_util.h +++ b/base/win_util.h @@ -23,6 +23,8 @@ enum WinVersion { WINVERSION_XP = 2, WINVERSION_SERVER_2003 = 3, WINVERSION_VISTA = 4, + WINVERSION_2008 = 5, + WINVERSION_WIN7 = 6, }; void GetNonClientMetrics(NONCLIENTMETRICS* metrics); |