mirror of
https://github.com/rustdesk/rustdesk.git
synced 2024-12-02 02:39:16 +08:00
privacy_mode_win_magnifier: remove unused win event hook
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
parent
fc1af7b0d9
commit
376c042666
@ -19,8 +19,6 @@
|
|||||||
// https://slhck.info/video/2017/03/01/rate-control.html
|
// https://slhck.info/video/2017/03/01/rate-control.html
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
#[cfg(windows)]
|
|
||||||
use crate::ui::win_privacy::win_event_hook;
|
|
||||||
use hbb_common::tokio::sync::{
|
use hbb_common::tokio::sync::{
|
||||||
mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender},
|
mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender},
|
||||||
Mutex as TokioMutex,
|
Mutex as TokioMutex,
|
||||||
@ -307,16 +305,13 @@ pub fn test_create_capturer(privacy_mode_id: i32, timeout_millis: u64) -> bool {
|
|||||||
fn check_uac_switch(privacy_mode_id: i32, captuerer_privacy_mode_id: i32) -> ResultType<()> {
|
fn check_uac_switch(privacy_mode_id: i32, captuerer_privacy_mode_id: i32) -> ResultType<()> {
|
||||||
if captuerer_privacy_mode_id != 0 {
|
if captuerer_privacy_mode_id != 0 {
|
||||||
if privacy_mode_id != captuerer_privacy_mode_id {
|
if privacy_mode_id != captuerer_privacy_mode_id {
|
||||||
if !win_event_hook::is_process_consent_running()? {
|
if !crate::ui::win_privacy::is_process_consent_running()? {
|
||||||
bail!("consent.exe is running");
|
bail!("consent.exe is running");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//if win_event_hook::is_desktop_switched() {
|
if crate::ui::win_privacy::is_process_consent_running()? {
|
||||||
if win_event_hook::is_process_consent_running()? {
|
|
||||||
// win_event_hook::reset_desktop_switch();
|
|
||||||
bail!("consent.exe is running");
|
bail!("consent.exe is running");
|
||||||
}
|
}
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -347,13 +342,14 @@ fn run(sp: GenericService) -> ResultType<()> {
|
|||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
let mut captuerer_privacy_mode_id = privacy_mode_id;
|
let mut captuerer_privacy_mode_id = privacy_mode_id;
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
if win_event_hook::is_process_consent_running()? {
|
if crate::ui::win_privacy::is_process_consent_running()? {
|
||||||
captuerer_privacy_mode_id = 0;
|
captuerer_privacy_mode_id = 0;
|
||||||
}
|
}
|
||||||
log::debug!(
|
log::debug!(
|
||||||
"Try create capturer with captuerer privacy mode id {}",
|
"Try create capturer with captuerer privacy mode id {}",
|
||||||
captuerer_privacy_mode_id,
|
captuerer_privacy_mode_id,
|
||||||
);
|
);
|
||||||
|
|
||||||
if privacy_mode_id != captuerer_privacy_mode_id {
|
if privacy_mode_id != captuerer_privacy_mode_id {
|
||||||
log::info!("In privacy mode, but show UAC prompt window for now");
|
log::info!("In privacy mode, but show UAC prompt window for now");
|
||||||
} else {
|
} else {
|
||||||
|
@ -314,6 +314,13 @@ fn wait_find_privacy_hwnd(msecs: u128) -> ResultType<HWND> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_process_consent_running() -> ResultType<bool> {
|
||||||
|
let output = std::process::Command::new("cmd")
|
||||||
|
.args(&["/C", "tasklist | findstr consent.exe"])
|
||||||
|
.output()?;
|
||||||
|
Ok(output.status.success() && !output.stdout.is_empty())
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::main(flavor = "current_thread")]
|
#[tokio::main(flavor = "current_thread")]
|
||||||
async fn set_privacy_mode_state(
|
async fn set_privacy_mode_state(
|
||||||
conn_id: i32,
|
conn_id: i32,
|
||||||
@ -552,95 +559,6 @@ pub(super) mod privacy_hook {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod win_event_hook {
|
|
||||||
use hbb_common::{bail, lazy_static, ResultType};
|
|
||||||
use std::sync::Mutex;
|
|
||||||
use winapi::{
|
|
||||||
shared::{
|
|
||||||
minwindef::DWORD,
|
|
||||||
ntdef::{LONG, NULL},
|
|
||||||
windef::{HWINEVENTHOOK, HWND},
|
|
||||||
winerror::RPC_E_CHANGED_MODE,
|
|
||||||
},
|
|
||||||
um::{
|
|
||||||
combaseapi::{CoInitializeEx, CoUninitialize},
|
|
||||||
objbase::COINIT_MULTITHREADED,
|
|
||||||
winuser::{
|
|
||||||
SetWinEventHook, UnhookWinEvent, EVENT_SYSTEM_DESKTOPSWITCH, WINEVENT_OUTOFCONTEXT,
|
|
||||||
WINEVENT_SKIPOWNPROCESS,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
lazy_static::lazy_static! {
|
|
||||||
static ref DESKTOP_SWITCH: Mutex<bool> = Mutex::new(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn is_desktop_switched() -> bool {
|
|
||||||
*DESKTOP_SWITCH.lock().unwrap()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn reset_desktop_switch() {
|
|
||||||
*DESKTOP_SWITCH.lock().unwrap() = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct WinEventHook {
|
|
||||||
hook: HWINEVENTHOOK,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl WinEventHook {
|
|
||||||
fn create() -> ResultType<Self> {
|
|
||||||
unsafe {
|
|
||||||
if RPC_E_CHANGED_MODE == CoInitializeEx(NULL, COINIT_MULTITHREADED) {
|
|
||||||
bail!("Failed CoInitializeEx with RPC_E_CHANGED_MODE");
|
|
||||||
}
|
|
||||||
|
|
||||||
let hook = SetWinEventHook(
|
|
||||||
EVENT_SYSTEM_DESKTOPSWITCH,
|
|
||||||
EVENT_SYSTEM_DESKTOPSWITCH,
|
|
||||||
NULL as _,
|
|
||||||
Some(hook_win_event),
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS,
|
|
||||||
);
|
|
||||||
Ok(Self { hook })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Drop for WinEventHook {
|
|
||||||
fn drop(&mut self) {
|
|
||||||
unsafe {
|
|
||||||
UnhookWinEvent(self.hook);
|
|
||||||
CoUninitialize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "system" fn hook_win_event(
|
|
||||||
_hook: HWINEVENTHOOK,
|
|
||||||
event: DWORD,
|
|
||||||
_hwnd: HWND,
|
|
||||||
_id_object: LONG,
|
|
||||||
_id_child: LONG,
|
|
||||||
_dw_event_thread: DWORD,
|
|
||||||
_dwms_event_time: DWORD,
|
|
||||||
) {
|
|
||||||
if event == EVENT_SYSTEM_DESKTOPSWITCH {
|
|
||||||
*DESKTOP_SWITCH.lock().unwrap() = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn is_process_consent_running() -> ResultType<bool> {
|
|
||||||
let output = std::process::Command::new("cmd")
|
|
||||||
.args(&["/C", "tasklist | findstr consent.exe"])
|
|
||||||
.output()?;
|
|
||||||
Ok(output.status.success() && !output.stdout.is_empty())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mod test {
|
mod test {
|
||||||
#[test]
|
#[test]
|
||||||
fn privacy_hook() {
|
fn privacy_hook() {
|
||||||
|
Loading…
Reference in New Issue
Block a user