mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-12 21:30:45 +01:00

Since Windows 10, Windows starts to support virtual desktops. The problem is when one virtual desktop is not the current one, we can still enumerate the windows on it, which are still marked as visible by OS. This causes troubles to decide if a window is on top to be cropped out. This cl is to utilize a COM API, IsWindowOnCurrentVirtualDesktop of VirtualDesktopManager, to make sure only the windows on current desktop will be enumerated. Bug: chromium:796112 Change-Id: I6e0546e90fbdb37365a8d98694ded0e30791628e Reviewed-on: https://webrtc-review.googlesource.com/65882 Reviewed-by: Jamie Walch <jamiewalch@chromium.org> Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org> Commit-Queue: Brave Yao <braveyao@webrtc.org> Cr-Commit-Position: refs/heads/master@{#22842}
94 lines
2.6 KiB
C++
94 lines
2.6 KiB
C++
/*
|
|
* Copyright 2004 The WebRTC Project Authors. All rights reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef RTC_BASE_WIN32_H_
|
|
#define RTC_BASE_WIN32_H_
|
|
|
|
#ifndef WEBRTC_WIN
|
|
#error "Only #include this header in Windows builds"
|
|
#endif
|
|
|
|
#ifndef WIN32_LEAN_AND_MEAN
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#endif
|
|
|
|
// Make sure we don't get min/max macros
|
|
#ifndef NOMINMAX
|
|
#define NOMINMAX
|
|
#endif
|
|
|
|
#include <winsock2.h>
|
|
#include <windows.h>
|
|
|
|
#ifndef SECURITY_MANDATORY_LABEL_AUTHORITY
|
|
// Add defines that we use if we are compiling against older sdks
|
|
#define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
|
|
#define TokenIntegrityLevel static_cast<TOKEN_INFORMATION_CLASS>(0x19)
|
|
typedef struct _TOKEN_MANDATORY_LABEL {
|
|
SID_AND_ATTRIBUTES Label;
|
|
} TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
|
|
#endif // SECURITY_MANDATORY_LABEL_AUTHORITY
|
|
|
|
#undef SetPort
|
|
|
|
#include <string>
|
|
|
|
#include "rtc_base/basictypes.h"
|
|
#include "rtc_base/stringutils.h"
|
|
|
|
namespace rtc {
|
|
|
|
const char* win32_inet_ntop(int af, const void *src, char* dst, socklen_t size);
|
|
int win32_inet_pton(int af, const char* src, void *dst);
|
|
|
|
// Convert a Utf8 path representation to a non-length-limited Unicode pathname.
|
|
bool Utf8ToWindowsFilename(const std::string& utf8, std::wstring* filename);
|
|
|
|
enum WindowsMajorVersions {
|
|
kWindows2000 = 5,
|
|
kWindowsVista = 6,
|
|
kWindows10 = 10,
|
|
};
|
|
bool GetOsVersion(int* major, int* minor, int* build);
|
|
|
|
inline bool IsWindowsVistaOrLater() {
|
|
int major;
|
|
return (GetOsVersion(&major, nullptr, nullptr) && major >= kWindowsVista);
|
|
}
|
|
|
|
inline bool IsWindowsXpOrLater() {
|
|
int major, minor;
|
|
return (GetOsVersion(&major, &minor, nullptr) &&
|
|
(major >= kWindowsVista || (major == kWindows2000 && minor >= 1)));
|
|
}
|
|
|
|
inline bool IsWindows8OrLater() {
|
|
int major, minor;
|
|
return (GetOsVersion(&major, &minor, nullptr) &&
|
|
(major > kWindowsVista || (major == kWindowsVista && minor >= 2)));
|
|
}
|
|
|
|
inline bool IsWindows10OrLater() {
|
|
int major;
|
|
return (GetOsVersion(&major, nullptr, nullptr) && (major >= kWindows10));
|
|
}
|
|
|
|
// Determine the current integrity level of the process.
|
|
bool GetCurrentProcessIntegrityLevel(int* level);
|
|
|
|
inline bool IsCurrentProcessLowIntegrity() {
|
|
int level;
|
|
return (GetCurrentProcessIntegrityLevel(&level) &&
|
|
level < SECURITY_MANDATORY_MEDIUM_RID);
|
|
}
|
|
|
|
} // namespace rtc
|
|
|
|
#endif // RTC_BASE_WIN32_H_
|