From 376c042666f9d83fcbc45e361c8300adf58be38f Mon Sep 17 00:00:00 2001 From: fufesou Date: Thu, 2 Jun 2022 10:45:27 +0800 Subject: [PATCH] privacy_mode_win_magnifier: remove unused win event hook Signed-off-by: fufesou --- src/server/video_service.rs | 12 ++--- src/ui/win_privacy.rs | 96 +++---------------------------------- 2 files changed, 11 insertions(+), 97 deletions(-) diff --git a/src/server/video_service.rs b/src/server/video_service.rs index fa9fabb52..f688f9bee 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -19,8 +19,6 @@ // https://slhck.info/video/2017/03/01/rate-control.html use super::*; -#[cfg(windows)] -use crate::ui::win_privacy::win_event_hook; use hbb_common::tokio::sync::{ mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender}, 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<()> { if captuerer_privacy_mode_id != 0 { 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"); } } - //if win_event_hook::is_desktop_switched() { - if win_event_hook::is_process_consent_running()? { - // win_event_hook::reset_desktop_switch(); + if crate::ui::win_privacy::is_process_consent_running()? { bail!("consent.exe is running"); } - //} } Ok(()) } @@ -347,13 +342,14 @@ fn run(sp: GenericService) -> ResultType<()> { #[cfg(windows)] let mut captuerer_privacy_mode_id = privacy_mode_id; #[cfg(windows)] - if win_event_hook::is_process_consent_running()? { + if crate::ui::win_privacy::is_process_consent_running()? { captuerer_privacy_mode_id = 0; } log::debug!( "Try create capturer with captuerer 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"); } else { diff --git a/src/ui/win_privacy.rs b/src/ui/win_privacy.rs index b0919e2c8..0bbb040ec 100644 --- a/src/ui/win_privacy.rs +++ b/src/ui/win_privacy.rs @@ -314,6 +314,13 @@ fn wait_find_privacy_hwnd(msecs: u128) -> ResultType { } } +pub fn is_process_consent_running() -> ResultType { + 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")] async fn set_privacy_mode_state( 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 = 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 { - 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 { - let output = std::process::Command::new("cmd") - .args(&["/C", "tasklist | findstr consent.exe"]) - .output()?; - Ok(output.status.success() && !output.stdout.is_empty()) - } -} - mod test { #[test] fn privacy_hook() {