blob: b20f3f3268bdfc1eeb8fe62ffc3fd263b7899232 [file] [log] [blame]
henrike@webrtc.orgf0488722014-05-13 18:00:26 +00001/*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 *
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
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef RTC_BASE_WIN32_H_
12#define RTC_BASE_WIN32_H_
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000013
Mirko Bonadeie0623852018-02-01 11:17:40 +010014#ifndef WEBRTC_WIN
15#error "Only #include this header in Windows builds"
16#endif
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000017
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020018#ifndef WIN32_LEAN_AND_MEAN
19#define WIN32_LEAN_AND_MEAN
20#endif
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000021
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020022// Make sure we don't get min/max macros
23#ifndef NOMINMAX
24#define NOMINMAX
25#endif
26
27#include <winsock2.h>
28#include <windows.h>
29
Niels Möllerd7b91312018-05-24 11:21:34 +020030typedef int socklen_t;
31
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020032#ifndef SECURITY_MANDATORY_LABEL_AUTHORITY
33// Add defines that we use if we are compiling against older sdks
34#define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
35#define TokenIntegrityLevel static_cast<TOKEN_INFORMATION_CLASS>(0x19)
36typedef struct _TOKEN_MANDATORY_LABEL {
37 SID_AND_ATTRIBUTES Label;
38} TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
39#endif // SECURITY_MANDATORY_LABEL_AUTHORITY
40
41#undef SetPort
42
43#include <string>
44
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020045namespace rtc {
46
47const char* win32_inet_ntop(int af, const void *src, char* dst, socklen_t size);
48int win32_inet_pton(int af, const char* src, void *dst);
49
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020050// Convert a Utf8 path representation to a non-length-limited Unicode pathname.
51bool Utf8ToWindowsFilename(const std::string& utf8, std::wstring* filename);
52
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020053enum WindowsMajorVersions {
54 kWindows2000 = 5,
55 kWindowsVista = 6,
braveyao8944f6a2018-04-06 10:59:50 -070056 kWindows10 = 10,
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020057};
58bool GetOsVersion(int* major, int* minor, int* build);
59
60inline bool IsWindowsVistaOrLater() {
61 int major;
62 return (GetOsVersion(&major, nullptr, nullptr) && major >= kWindowsVista);
63}
64
65inline bool IsWindowsXpOrLater() {
66 int major, minor;
67 return (GetOsVersion(&major, &minor, nullptr) &&
68 (major >= kWindowsVista || (major == kWindows2000 && minor >= 1)));
69}
70
71inline bool IsWindows8OrLater() {
72 int major, minor;
73 return (GetOsVersion(&major, &minor, nullptr) &&
74 (major > kWindowsVista || (major == kWindowsVista && minor >= 2)));
75}
76
braveyao8944f6a2018-04-06 10:59:50 -070077inline bool IsWindows10OrLater() {
78 int major;
79 return (GetOsVersion(&major, nullptr, nullptr) && (major >= kWindows10));
80}
81
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020082// Determine the current integrity level of the process.
83bool GetCurrentProcessIntegrityLevel(int* level);
84
85inline bool IsCurrentProcessLowIntegrity() {
86 int level;
87 return (GetCurrentProcessIntegrityLevel(&level) &&
88 level < SECURITY_MANDATORY_MEDIUM_RID);
89}
90
91} // namespace rtc
92
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020093#endif // RTC_BASE_WIN32_H_