| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #ifndef WEBRTC_BASE_WIN32_H_ | 11 #ifndef WEBRTC_BASE_WIN32_H_ |
| 12 #define WEBRTC_BASE_WIN32_H_ | 12 #define WEBRTC_BASE_WIN32_H_ |
| 13 | 13 |
| 14 #if defined(WEBRTC_WIN) | |
| 15 | 14 |
| 16 #ifndef WIN32_LEAN_AND_MEAN | 15 // This header is deprecated and is just left here temporarily during |
| 17 #define WIN32_LEAN_AND_MEAN | 16 // refactoring. See https://bugs.webrtc.org/7634 for more details. |
| 18 #endif | 17 #include "webrtc/rtc_base/win32.h" |
| 19 | 18 |
| 20 // Make sure we don't get min/max macros | |
| 21 #ifndef NOMINMAX | |
| 22 #define NOMINMAX | |
| 23 #endif | |
| 24 | |
| 25 #include <winsock2.h> | |
| 26 #include <windows.h> | |
| 27 | |
| 28 #ifndef SECURITY_MANDATORY_LABEL_AUTHORITY | |
| 29 // Add defines that we use if we are compiling against older sdks | |
| 30 #define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L) | |
| 31 #define TokenIntegrityLevel static_cast<TOKEN_INFORMATION_CLASS>(0x19) | |
| 32 typedef struct _TOKEN_MANDATORY_LABEL { | |
| 33 SID_AND_ATTRIBUTES Label; | |
| 34 } TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL; | |
| 35 #endif // SECURITY_MANDATORY_LABEL_AUTHORITY | |
| 36 | |
| 37 #undef SetPort | |
| 38 | |
| 39 #include <string> | |
| 40 | |
| 41 #include "webrtc/base/stringutils.h" | |
| 42 #include "webrtc/base/basictypes.h" | |
| 43 | |
| 44 namespace rtc { | |
| 45 | |
| 46 const char* win32_inet_ntop(int af, const void *src, char* dst, socklen_t size); | |
| 47 int win32_inet_pton(int af, const char* src, void *dst); | |
| 48 | |
| 49 inline std::wstring ToUtf16(const char* utf8, size_t len) { | |
| 50 int len16 = ::MultiByteToWideChar(CP_UTF8, 0, utf8, static_cast<int>(len), | |
| 51 nullptr, 0); | |
| 52 wchar_t* ws = STACK_ARRAY(wchar_t, len16); | |
| 53 ::MultiByteToWideChar(CP_UTF8, 0, utf8, static_cast<int>(len), ws, len16); | |
| 54 return std::wstring(ws, len16); | |
| 55 } | |
| 56 | |
| 57 inline std::wstring ToUtf16(const std::string& str) { | |
| 58 return ToUtf16(str.data(), str.length()); | |
| 59 } | |
| 60 | |
| 61 inline std::string ToUtf8(const wchar_t* wide, size_t len) { | |
| 62 int len8 = ::WideCharToMultiByte(CP_UTF8, 0, wide, static_cast<int>(len), | |
| 63 nullptr, 0, nullptr, nullptr); | |
| 64 char* ns = STACK_ARRAY(char, len8); | |
| 65 ::WideCharToMultiByte(CP_UTF8, 0, wide, static_cast<int>(len), ns, len8, | |
| 66 nullptr, nullptr); | |
| 67 return std::string(ns, len8); | |
| 68 } | |
| 69 | |
| 70 inline std::string ToUtf8(const wchar_t* wide) { | |
| 71 return ToUtf8(wide, wcslen(wide)); | |
| 72 } | |
| 73 | |
| 74 inline std::string ToUtf8(const std::wstring& wstr) { | |
| 75 return ToUtf8(wstr.data(), wstr.length()); | |
| 76 } | |
| 77 | |
| 78 // Convert FILETIME to time_t | |
| 79 void FileTimeToUnixTime(const FILETIME& ft, time_t* ut); | |
| 80 | |
| 81 // Convert time_t to FILETIME | |
| 82 void UnixTimeToFileTime(const time_t& ut, FILETIME * ft); | |
| 83 | |
| 84 // Convert a Utf8 path representation to a non-length-limited Unicode pathname. | |
| 85 bool Utf8ToWindowsFilename(const std::string& utf8, std::wstring* filename); | |
| 86 | |
| 87 // Convert a FILETIME to a UInt64 | |
| 88 inline uint64_t ToUInt64(const FILETIME& ft) { | |
| 89 ULARGE_INTEGER r = {{ft.dwLowDateTime, ft.dwHighDateTime}}; | |
| 90 return r.QuadPart; | |
| 91 } | |
| 92 | |
| 93 enum WindowsMajorVersions { | |
| 94 kWindows2000 = 5, | |
| 95 kWindowsVista = 6, | |
| 96 }; | |
| 97 bool GetOsVersion(int* major, int* minor, int* build); | |
| 98 | |
| 99 inline bool IsWindowsVistaOrLater() { | |
| 100 int major; | |
| 101 return (GetOsVersion(&major, nullptr, nullptr) && major >= kWindowsVista); | |
| 102 } | |
| 103 | |
| 104 inline bool IsWindowsXpOrLater() { | |
| 105 int major, minor; | |
| 106 return (GetOsVersion(&major, &minor, nullptr) && | |
| 107 (major >= kWindowsVista || (major == kWindows2000 && minor >= 1))); | |
| 108 } | |
| 109 | |
| 110 inline bool IsWindows8OrLater() { | |
| 111 int major, minor; | |
| 112 return (GetOsVersion(&major, &minor, nullptr) && | |
| 113 (major > kWindowsVista || (major == kWindowsVista && minor >= 2))); | |
| 114 } | |
| 115 | |
| 116 // Determine the current integrity level of the process. | |
| 117 bool GetCurrentProcessIntegrityLevel(int* level); | |
| 118 | |
| 119 inline bool IsCurrentProcessLowIntegrity() { | |
| 120 int level; | |
| 121 return (GetCurrentProcessIntegrityLevel(&level) && | |
| 122 level < SECURITY_MANDATORY_MEDIUM_RID); | |
| 123 } | |
| 124 | |
| 125 } // namespace rtc | |
| 126 | |
| 127 #endif // WEBRTC_WIN | |
| 128 #endif // WEBRTC_BASE_WIN32_H_ | 19 #endif // WEBRTC_BASE_WIN32_H_ |
| OLD | NEW |