blob: c90296ebbb9f2916d2f3c4b8352c184348c5c558 [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// Make sure we don't get min/max macros
19#ifndef NOMINMAX
20#define NOMINMAX
21#endif
22
Yves Gerey665174f2018-06-19 15:03:05 +020023// clang-format off
24// clang formating would change include order.
25#include <winsock2.h> // must come first
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020026#include <windows.h>
Yves Gerey665174f2018-06-19 15:03:05 +020027// clang-format on
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020028
Niels Möllerd7b91312018-05-24 11:21:34 +020029typedef int socklen_t;
30
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020031#ifndef SECURITY_MANDATORY_LABEL_AUTHORITY
32// Add defines that we use if we are compiling against older sdks
Yves Gerey665174f2018-06-19 15:03:05 +020033#define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020034#define TokenIntegrityLevel static_cast<TOKEN_INFORMATION_CLASS>(0x19)
35typedef struct _TOKEN_MANDATORY_LABEL {
Yves Gerey665174f2018-06-19 15:03:05 +020036 SID_AND_ATTRIBUTES Label;
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020037} TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
38#endif // SECURITY_MANDATORY_LABEL_AUTHORITY
39
40#undef SetPort
41
42#include <string>
43
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020044namespace rtc {
45
Yves Gerey665174f2018-06-19 15:03:05 +020046const char* win32_inet_ntop(int af, const void* src, char* dst, socklen_t size);
47int win32_inet_pton(int af, const char* src, void* dst);
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020048
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020049enum WindowsMajorVersions {
50 kWindows2000 = 5,
51 kWindowsVista = 6,
braveyao8944f6a2018-04-06 10:59:50 -070052 kWindows10 = 10,
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020053};
Robin Raymondce1b1402018-11-22 20:10:11 -050054
55#if !defined(WINUWP)
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020056bool GetOsVersion(int* major, int* minor, int* build);
57
58inline bool IsWindowsVistaOrLater() {
59 int major;
60 return (GetOsVersion(&major, nullptr, nullptr) && major >= kWindowsVista);
61}
62
63inline bool IsWindowsXpOrLater() {
64 int major, minor;
65 return (GetOsVersion(&major, &minor, nullptr) &&
66 (major >= kWindowsVista || (major == kWindows2000 && minor >= 1)));
67}
68
69inline bool IsWindows8OrLater() {
70 int major, minor;
71 return (GetOsVersion(&major, &minor, nullptr) &&
72 (major > kWindowsVista || (major == kWindowsVista && minor >= 2)));
73}
74
braveyao8944f6a2018-04-06 10:59:50 -070075inline bool IsWindows10OrLater() {
76 int major;
77 return (GetOsVersion(&major, nullptr, nullptr) && (major >= kWindows10));
78}
79
Robin Raymondce1b1402018-11-22 20:10:11 -050080#else
81
82// When targetting WinUWP the OS must be Windows 10 (or greater) as lesser
83// Windows OS targets are not supported.
84inline bool IsWindowsVistaOrLater() {
85 return true;
86}
87
88inline bool IsWindowsXpOrLater() {
89 return true;
90}
91
92inline bool IsWindows8OrLater() {
93 return true;
94}
95
96inline bool IsWindows10OrLater() {
97 return true;
98}
99
Robin Raymondce1b1402018-11-22 20:10:11 -0500100#endif // !defined(WINUWP)
101
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +0200102} // namespace rtc
103
Mirko Bonadei92ea95e2017-09-15 06:47:31 +0200104#endif // RTC_BASE_WIN32_H_