Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Unified Diff: base/system_info.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/system_info.h ('k') | base/system_info_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/system_info.cc
diff --git a/base/system_info.cc b/base/system_info.cc
deleted file mode 100644
index 3df007e507c1fe1f7cd1447b76c05376cc9af325..0000000000000000000000000000000000000000
--- a/base/system_info.cc
+++ /dev/null
@@ -1,467 +0,0 @@
-// Copyright 2004-2009 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// ========================================================================
-
-#include "omaha/base/system_info.h"
-#include "base/basictypes.h"
-#include "omaha/base/debug.h"
-#include "omaha/base/logging.h"
-#include "omaha/base/process.h"
-#include "omaha/base/string.h"
-
-namespace omaha {
-
-bool SystemInfo::OSWinXPSP2OrLater() {
- OSVersionType os_type(OS_WINDOWS_UNKNOWN);
- DWORD sp(0);
-
- HRESULT hr = CategorizeOS(&os_type, &sp);
- if (FAILED(hr)) {
- ASSERT(false, (_T("[CategorizeOS failed][0x%x]"), hr));
- return false;
- }
-
- return ((os_type == SystemInfo::OS_WINDOWS_XP && sp >= 2) ||
- os_type > SystemInfo::OS_WINDOWS_XP);
-}
-
-bool SystemInfo::IsRunningOnW2K() {
- OSVERSIONINFO os_info = {0};
- os_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-
- if (!::GetVersionEx(&os_info)) {
- ASSERT(false, (_T("GetVersionEx")));
- return false;
- }
-
- return os_info.dwMajorVersion == 5 && os_info.dwMinorVersion == 0;
-}
-
-bool SystemInfo::IsRunningOnXPOrLater() {
- OSVersionType os_type(OS_WINDOWS_UNKNOWN);
-
- HRESULT hr = CategorizeOS(&os_type, NULL);
- if (FAILED(hr)) {
- ASSERT(false, (_T("[Failed to get os type][0x%x]"), hr));
- return false;
- }
-
- return os_type >= SystemInfo::OS_WINDOWS_XP;
-}
-
-bool SystemInfo::IsRunningOnXPSP1OrLater() {
- OSVersionType os_type(OS_WINDOWS_UNKNOWN);
- DWORD sp(0);
-
- HRESULT hr = CategorizeOS(&os_type, &sp);
- if (FAILED(hr)) {
- ASSERT(false, (_T("[Failed to get os type][0x%x]"), hr));
- return false;
- }
-
- return ((os_type == SystemInfo::OS_WINDOWS_XP && sp >= 1) ||
- os_type > SystemInfo::OS_WINDOWS_XP);
-}
-
-
-bool SystemInfo::IsRunningOnVistaOrLater() {
- OSVersionType os_type(OS_WINDOWS_UNKNOWN);
- DWORD sp(0);
-
- HRESULT hr = CategorizeOS(&os_type, &sp);
- if (FAILED(hr)) {
- ASSERT(false, (_T("[Failed to get os type][0x%x]"), hr));
- return false;
- }
-
- return (os_type >= OS_WINDOWS_VISTA);
-}
-
-bool SystemInfo::IsRunningOnVistaRTM() {
- OSVersionType os_type(OS_WINDOWS_UNKNOWN);
- DWORD sp(0);
-
- HRESULT hr = CategorizeOS(&os_type, &sp);
- if (FAILED(hr)) {
- ASSERT(false, (_T("[Failed to get os type][0x%x]"), hr));
- return false;
- }
-
- return (os_type == SystemInfo::OS_WINDOWS_VISTA && sp == 0);
-}
-
-HRESULT SystemInfo::CategorizeOS(OSVersionType* os_ver, DWORD* sp) {
- static OSVersionType os_ver_cached(OS_WINDOWS_UNKNOWN);
- // Hopefully, Windows doesn't release a SP that's kuint32max.
- static DWORD sp_cached(kuint32max);
-
- ASSERT(os_ver, (_T("")));
-
- if (sp) {
- *sp = 0;
- }
-
- if (os_ver_cached == OS_WINDOWS_UNKNOWN || sp_cached == kuint32max) {
- // Use GetVersionEx to get OS and Service Pack information.
- OSVERSIONINFOEX osviex;
- ::ZeroMemory(&osviex, sizeof(OSVERSIONINFOEX));
- osviex.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
- BOOL r = ::GetVersionEx(reinterpret_cast<OSVERSIONINFO *>(&osviex));
-
- // If ::GetVersionEx fails when given an OSVERSIONINFOEX then we're running
- // on NT4.0SP5 or earlier.
- if (!r) {
- os_ver_cached = OS_WINDOWS_9X_OR_NT;
- } else {
- switch (osviex.dwPlatformId) {
- case VER_PLATFORM_WIN32_NT:
- // Windows 7 beta 1 reports the same major version as Vista does.
- if (osviex.dwMajorVersion == 6 && osviex.dwMinorVersion == 1) {
- os_ver_cached = OS_WINDOWS_7;
- } else if (osviex.dwMajorVersion == 6 && osviex.dwMinorVersion == 0) {
- os_ver_cached = OS_WINDOWS_VISTA;
- } else if (osviex.dwMajorVersion == 5 && osviex.dwMinorVersion == 2) {
- os_ver_cached = OS_WINDOWS_SERVER_2003;
- } else if (osviex.dwMajorVersion == 5 && osviex.dwMinorVersion == 1) {
- os_ver_cached = OS_WINDOWS_XP;
- } else if (osviex.dwMajorVersion == 5 && osviex.dwMinorVersion == 0) {
- os_ver_cached = OS_WINDOWS_2000;
- } else if (osviex.dwMajorVersion <= 4) {
- os_ver_cached = OS_WINDOWS_9X_OR_NT;
- break;
- } else {
- os_ver_cached = OS_WINDOWS_UNKNOWN;
- break;
- }
- sp_cached = osviex.wServicePackMajor;
- break;
-
- case VER_PLATFORM_WIN32_WINDOWS:
- case VER_PLATFORM_WIN32s:
- default:
- os_ver_cached = OS_WINDOWS_9X_OR_NT;
- break;
- }
- }
-
- OPT_LOG(L1, (_T("[OS][version: %s][service pack: %d]"),
- OSVersionTypeAsString(os_ver_cached),
- sp_cached));
- }
-
- ASSERT1(os_ver_cached != OS_WINDOWS_UNKNOWN && sp_cached != kuint32max);
-
- *os_ver = os_ver_cached;
- if (sp) {
- *sp = sp_cached;
- }
-
- return S_OK;
-}
-
-const wchar_t* SystemInfo::OSVersionTypeAsString(OSVersionType t) {
- switch (t) {
- case OS_WINDOWS_9X_OR_NT: return _T("OS_WINDOWS_9X_OR_NT");
- case OS_WINDOWS_2000: return _T("OS_WINDOWS_2000");
- case OS_WINDOWS_XP: return _T("OS_WINDOWS_XP");
- case OS_WINDOWS_SERVER_2003: return _T("OS_WINDOWS_SERVER_2003");
- case OS_WINDOWS_UNKNOWN: return _T("OS_WINDOWS_UNKNOWN");
- case OS_WINDOWS_VISTA: return _T("OS_WINDOWS_VISTA");
- case OS_WINDOWS_7: return _T("OS_WINDOWS_7");
- default: return _T("<unknown>");
- }
-}
-
-// The following code which names the operating system comes from MSDN article
-// "Getting the System Version"
-#define kNullChar (_T('\0'))
-bool SystemInfo::GetSystemVersion(int* major_version,
- int* minor_version,
- int* service_pack_major,
- int* service_pack_minor,
- TCHAR* name_buf,
- size_t name_buf_len) {
- ASSERT1(major_version);
- ASSERT1(minor_version);
- ASSERT1(service_pack_major);
- ASSERT1(service_pack_minor);
- ASSERT1(name_buf);
- ASSERT1(0 < name_buf_len);
-
- // Clear the name to start with.
- name_buf[0] = kNullChar;
-
- DWORD buf_len = MAX_PATH;
- TCHAR buffer[MAX_PATH];
- TCHAR format_buffer[64];
-
- buffer[0] = kNullChar;
-
- OSVERSIONINFOEX osvi;
- BOOL ver_info_exists;
-
- // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
- // If that fails, try using the OSVERSIONINFO structure.
- ::ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
-
- ver_info_exists = ::GetVersionEx(reinterpret_cast<OSVERSIONINFO*>(&osvi));
- if (!ver_info_exists) {
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- if (!::GetVersionEx(reinterpret_cast<OSVERSIONINFO*>(&osvi))) {
- return false;
- }
- }
-
- *major_version = osvi.dwMajorVersion;
- *minor_version = osvi.dwMinorVersion;
- *service_pack_major = osvi.wServicePackMajor;
- *service_pack_minor = osvi.wServicePackMinor;
-
- switch (osvi.dwPlatformId) {
- // Test for the Windows NT product family.
- case VER_PLATFORM_WIN32_NT:
-
- // Test for the specific product family.
- if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) {
- SafeStrCat(buffer,
- _T("Microsoft Windows Server 2003 family, "),
- buf_len);
- }
-
- if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1) {
- SafeStrCat(buffer, _T("Microsoft Windows XP "), buf_len);
- }
-
- if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) {
- SafeStrCat(buffer, _T("Microsoft Windows 2000 "), buf_len);
- }
-
- if (osvi.dwMajorVersion <= 4) {
- SafeStrCat(buffer, _T("Microsoft Windows NT "), buf_len);
- }
-
- // Test for specific product on Windows NT 4.0 SP6 and later.
- if (ver_info_exists) {
- // Test for the workstation type.
- if (osvi.wProductType == VER_NT_WORKSTATION) {
- if (osvi.dwMajorVersion == 4) {
- SafeStrCat(buffer, _T("Workstation 4.0 "), buf_len);
- } else if (osvi.wSuiteMask & VER_SUITE_PERSONAL) {
- SafeStrCat(buffer, _T("Home Edition "), buf_len);
- } else {
- SafeStrCat(buffer, _T("Professional "), buf_len);
- }
- } else if (osvi.wProductType == VER_NT_SERVER ||
- osvi.wProductType == VER_NT_DOMAIN_CONTROLLER) {
- // server type.
- if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) {
- if (osvi.wSuiteMask & VER_SUITE_DATACENTER) {
- SafeStrCat(buffer, _T("Datacenter Edition "), buf_len);
- } else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE) {
- SafeStrCat(buffer, _T("Enterprise Edition "), buf_len);
- } else if (osvi.wSuiteMask == VER_SUITE_BLADE) {
- SafeStrCat(buffer, _T("Web Edition "), buf_len);
- } else {
- SafeStrCat(buffer, _T("Standard Edition "), buf_len);
- }
- } else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) {
- if (osvi.wSuiteMask & VER_SUITE_DATACENTER) {
- SafeStrCat(buffer, _T("Datacenter Server "), buf_len);
- } else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE) {
- SafeStrCat(buffer, _T("Advanced Server "), buf_len);
- } else {
- SafeStrCat(buffer, _T("Server "), buf_len);
- }
- } else {
- // Windows NT 4.0.
- if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE) {
- SafeStrCat(buffer,
- _T("Server 4.0, Enterprise Edition "),
- buf_len);
- } else {
- SafeStrCat(buffer, _T("Server 4.0 "), buf_len);
- }
- }
- }
- } else {
- // Test for specific product on Windows NT 4.0 SP5 and earlier.
- HKEY hKey;
- TCHAR product_type[64] = {0};
- DWORD dwBufLen = arraysize(product_type);
- LONG lRet;
-
- // TODO(omaha): should we use the RegKey API for consistency.
- lRet = ::RegOpenKeyEx(
- HKEY_LOCAL_MACHINE,
- _T("SYSTEM\\CurrentControlSet\\Control\\ProductOptions"),
- 0,
- KEY_QUERY_VALUE,
- &hKey);
- if (lRet != ERROR_SUCCESS) {
- return false;
- }
-
- lRet = ::RegQueryValueEx(hKey,
- _T("ProductType"),
- NULL,
- NULL,
- reinterpret_cast<byte *>(product_type),
- &dwBufLen);
- if ((lRet != ERROR_SUCCESS) || (dwBufLen > arraysize(product_type))) {
- return false;
- }
-
- ::RegCloseKey(hKey);
-
- if (::lstrcmpi(_T("WINNT"), product_type) == 0) {
- SafeStrCat(buffer, _T("Workstation "), buf_len);
- }
- if (::lstrcmpi(_T("LANMANNT"), product_type) == 0) {
- SafeStrCat(buffer, _T("Server "), buf_len);
- }
- if (::lstrcmpi(_T("SERVERNT"), product_type) == 0) {
- SafeStrCat(buffer, _T("Advanced Server "), buf_len);
- }
-
- ::wsprintf(format_buffer,
- _T("%d.%d "),
- osvi.dwMajorVersion,
- osvi.dwMinorVersion);
- SafeStrCat(buffer, format_buffer, buf_len);
- }
-
- // Display service pack (if any) and build number.
- if (osvi.dwMajorVersion == 4 &&
- ::lstrcmpi(osvi.szCSDVersion, _T("Service Pack 6")) == 0) {
- HKEY hKey;
- LONG lRet;
-
- // Test for SP6 versus SP6a.
- lRet = ::RegOpenKeyEx(
- HKEY_LOCAL_MACHINE,
- _T("SOFTWARE\\Microsoft\\Windows NT\\")
- _T("CurrentVersion\\Hotfix\\Q246009"),
- 0,
- KEY_QUERY_VALUE,
- &hKey);
- if (lRet == ERROR_SUCCESS) {
- ::wsprintf(format_buffer,
- _T("Service Pack 6a (Build %d)"),
- osvi.dwBuildNumber & 0xFFFF);
- SafeStrCat(buffer, format_buffer, buf_len);
- } else {
- // Windows NT 4.0 prior to SP6a.
- ::wsprintf(format_buffer, _T("%s (Build %d)"),
- osvi.szCSDVersion,
- osvi.dwBuildNumber & 0xFFFF);
- SafeStrCat(buffer, format_buffer, buf_len);
- }
- ::RegCloseKey(hKey);
- } else {
- // Windows NT 3.51 and earlier or Windows 2000 and later.
- ::wsprintf(format_buffer,
- _T("%s (Build %d)"),
- osvi.szCSDVersion,
- osvi.dwBuildNumber & 0xFFFF);
- SafeStrCat(buffer, format_buffer, buf_len);
- }
-
- break;
-
- // Test for the Windows 95 product family.
- case VER_PLATFORM_WIN32_WINDOWS:
-
- if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) {
- SafeStrCat(buffer, _T("Microsoft Windows 95 "), buf_len);
- if (osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B') {
- SafeStrCat(buffer, _T("OSR2 "), buf_len);
- }
- }
-
- if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) {
- SafeStrCat(buffer, _T("Microsoft Windows 98 "), buf_len);
- if (osvi.szCSDVersion[1] == 'A') {
- SafeStrCat(buffer, _T("SE "), buf_len);
- }
- }
-
- if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) {
- SafeStrCat(buffer,
- _T("Microsoft Windows Millennium Edition"),
- buf_len);
- }
- break;
-
- case VER_PLATFORM_WIN32s:
-
- SafeStrCat(buffer, _T("Microsoft Win32s"), buf_len);
- break;
-
- default:
- SafeStrCat(buffer, _T("Unknown operating system"), buf_len);
- break;
- }
- // SKIP_LOC_END
-
- // Remove trailing space, if any.
- DWORD buffer_len = ::lstrlen(buffer);
- if (buffer[buffer_len-1] == kNullChar) {
- buffer[buffer_len-1] = kNullChar;
- }
-
- // Copy to destination argument.
- String_StrNCpy(name_buf, buffer, name_buf_len);
-
- return true;
-}
-
-DWORD SystemInfo::GetProcessorArchitecture() {
- static DWORD processor_architecture_cached(PROCESSOR_ARCHITECTURE_UNKNOWN);
-
- if (processor_architecture_cached == PROCESSOR_ARCHITECTURE_UNKNOWN) {
- typedef void (WINAPI * GetSystemInfoFunc)(LPSYSTEM_INFO);
-
- HMODULE handle = ::GetModuleHandle(_T("kernel32"));
- ASSERT1(handle);
- GetSystemInfoFunc get_native_system_info =
- reinterpret_cast<GetSystemInfoFunc>(::GetProcAddress(
- handle,
- "GetNativeSystemInfo"));
-
- if (get_native_system_info != NULL) {
- SYSTEM_INFO sys_info = {0};
-
- get_native_system_info(&sys_info);
-
- processor_architecture_cached = sys_info.wProcessorArchitecture;
- } else {
- // If we couldn't get the _native_ system info, then we must be on OS
- // earlier than XP, so can't be 64-bit anyway. Assume Intel.
- processor_architecture_cached = PROCESSOR_ARCHITECTURE_INTEL;
- }
- }
-
- return processor_architecture_cached;
-}
-
-bool SystemInfo::Is64BitWindows() {
-#if defined(_WIN64)
- return true;
-#else
- return Process::IsWow64(::GetCurrentProcessId());
-#endif
-}
-
-} // namespace omaha
« no previous file with comments | « base/system_info.h ('k') | base/system_info_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698