ipc/chromium/src/base/win_util.cc

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
     2 // Use of this source code is governed by a BSD-style license that can be
     3 // found in the LICENSE file.
     5 #include "base/win_util.h"
     7 #include <map>
     8 #include <sddl.h>
    10 #include "base/logging.h"
    11 #include "base/registry.h"
    12 #include "base/scoped_handle.h"
    13 #include "base/scoped_ptr.h"
    14 #include "base/singleton.h"
    15 #include "base/string_util.h"
    16 #include "base/tracked.h"
    18 namespace win_util {
    20 WinVersion GetWinVersion() {
    21   static bool checked_version = false;
    22   static WinVersion win_version = WINVERSION_PRE_2000;
    23   if (!checked_version) {
    24     OSVERSIONINFOEX version_info;
    25     version_info.dwOSVersionInfoSize = sizeof version_info;
    26     GetVersionEx(reinterpret_cast<OSVERSIONINFO*>(&version_info));
    27     if (version_info.dwMajorVersion == 5) {
    28       switch (version_info.dwMinorVersion) {
    29         case 0:
    30           win_version = WINVERSION_2000;
    31           break;
    32         case 1:
    33           win_version = WINVERSION_XP;
    34           break;
    35         case 2:
    36         default:
    37           win_version = WINVERSION_SERVER_2003;
    38           break;
    39       }
    40     } else if (version_info.dwMajorVersion == 6) {
    41       if (version_info.wProductType != VER_NT_WORKSTATION) {
    42         // 2008 is 6.0, and 2008 R2 is 6.1.
    43         win_version = WINVERSION_2008;
    44       } else {
    45         if (version_info.dwMinorVersion == 0) {
    46           win_version = WINVERSION_VISTA;
    47         } else {
    48           win_version = WINVERSION_WIN7;
    49         }
    50       }
    51     } else if (version_info.dwMajorVersion > 6) {
    52       win_version = WINVERSION_WIN7;
    53     }
    54     checked_version = true;
    55   }
    56   return win_version;
    57 }
    59 bool IsShiftPressed() {
    60   return (::GetKeyState(VK_SHIFT) & 0x80) == 0x80;
    61 }
    63 bool IsCtrlPressed() {
    64   return (::GetKeyState(VK_CONTROL) & 0x80) == 0x80;
    65 }
    67 bool IsAltPressed() {
    68   return (::GetKeyState(VK_MENU) & 0x80) == 0x80;
    69 }
    71 std::wstring FormatMessage(unsigned messageid) {
    72   wchar_t* string_buffer = NULL;
    73   unsigned string_length = ::FormatMessage(
    74       FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
    75       FORMAT_MESSAGE_IGNORE_INSERTS, NULL, messageid, 0,
    76       reinterpret_cast<wchar_t *>(&string_buffer), 0, NULL);
    78   std::wstring formatted_string;
    79   if (string_buffer) {
    80     formatted_string = string_buffer;
    81     LocalFree(reinterpret_cast<HLOCAL>(string_buffer));
    82   } else {
    83     // The formating failed. simply convert the message value into a string.
    84     SStringPrintf(&formatted_string, L"message number %d", messageid);
    85   }
    86   return formatted_string;
    87 }
    89 std::wstring FormatLastWin32Error() {
    90   return FormatMessage(GetLastError());
    91 }
    93 }  // namespace win_util
    95 #ifdef _MSC_VER
    96 //
    97 // If the ASSERT below fails, please install Visual Studio 2005 Service Pack 1.
    98 //
    99 extern char VisualStudio2005ServicePack1Detection[10];
   100 COMPILE_ASSERT(sizeof(&VisualStudio2005ServicePack1Detection) == sizeof(void*),
   101                VS2005SP1Detect);
   102 //
   103 // Chrome requires at least Service Pack 1 for Visual Studio 2005.
   104 //
   105 #endif  // _MSC_VER
   107 #if 0
   108 #error You must install the Windows 2008 or Vista Software Development Kit and \
   109 set it as your default include path to build this library. You can grab it by \
   110 searching for "download windows sdk 2008" in your favorite web search engine.  \
   111 Also make sure you register the SDK with Visual Studio, by selecting \
   112 "Integrate Windows SDK with Visual Studio 2005" from the Windows SDK \
   113 menu (see Start - All Programs - Microsoft Windows SDK - \
   114 Visual Studio Registration).
   115 #endif

mercurial