judge failure of get_current_process_session_id with None rather than 0 (#7188)

Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
21pages 2024-02-19 13:06:06 +08:00 committed by GitHub
parent a8eff641b2
commit 58ddac63d2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1194,6 +1194,7 @@ impl Connection {
.into(); .into();
let mut sub_service = false; let mut sub_service = false;
#[allow(unused_mut)]
let mut wait_session_id_confirm = false; let mut wait_session_id_confirm = false;
#[cfg(windows)] #[cfg(windows)]
self.handle_windows_specific_session(&mut pi, &mut wait_session_id_confirm); self.handle_windows_specific_session(&mut pi, &mut wait_session_id_confirm);
@ -1303,22 +1304,22 @@ impl Connection {
wait_session_id_confirm: &mut bool, wait_session_id_confirm: &mut bool,
) { ) {
let sessions = crate::platform::get_available_sessions(true); let sessions = crate::platform::get_available_sessions(true);
let current_sid = crate::platform::get_current_process_session_id().unwrap_or_default(); if let Some(current_sid) = crate::platform::get_current_process_session_id() {
if crate::platform::is_installed() if crate::platform::is_installed()
&& crate::platform::is_share_rdp() && crate::platform::is_share_rdp()
&& raii::AuthedConnID::remote_and_file_conn_count() == 1 && raii::AuthedConnID::remote_and_file_conn_count() == 1
&& sessions.len() > 1 && sessions.len() > 1
&& current_sid != 0 && (get_version_number(&self.lr.version) > get_version_number("1.2.4")
&& (get_version_number(&self.lr.version) > get_version_number("1.2.4") || self.lr.option.support_windows_specific_session == BoolOption::Yes.into())
|| self.lr.option.support_windows_specific_session == BoolOption::Yes.into()) {
{ pi.windows_sessions = Some(WindowsSessions {
pi.windows_sessions = Some(WindowsSessions { sessions,
sessions, current_sid,
current_sid, ..Default::default()
..Default::default() })
}) .into();
.into(); *wait_session_id_confirm = true;
*wait_session_id_confirm = true; }
} }
} }
@ -2283,28 +2284,29 @@ impl Connection {
.user_record(self.inner.id(), status), .user_record(self.inner.id(), status),
#[cfg(windows)] #[cfg(windows)]
Some(misc::Union::SelectedSid(sid)) => { Some(misc::Union::SelectedSid(sid)) => {
let current_process_usid = if let Some(current_process_sid) =
crate::platform::get_current_process_session_id().unwrap_or_default(); crate::platform::get_current_process_session_id()
let sessions = crate::platform::get_available_sessions(false);
if crate::platform::is_installed()
&& crate::platform::is_share_rdp()
&& raii::AuthedConnID::remote_and_file_conn_count() == 1
&& sessions.len() > 1
&& current_process_usid != 0
&& current_process_usid != sid
&& sessions.iter().any(|e| e.sid == sid)
{ {
std::thread::spawn(move || { let sessions = crate::platform::get_available_sessions(false);
let _ = ipc::connect_to_user_session(Some(sid)); if crate::platform::is_installed()
}); && crate::platform::is_share_rdp()
return false; && raii::AuthedConnID::remote_and_file_conn_count() == 1
} && sessions.len() > 1
if self.file_transfer.is_some() { && current_process_sid != sid
if let Some((dir, show_hidden)) = self.delayed_read_dir.take() { && sessions.iter().any(|e| e.sid == sid)
self.read_dir(&dir, show_hidden); {
std::thread::spawn(move || {
let _ = ipc::connect_to_user_session(Some(sid));
});
return false;
}
if self.file_transfer.is_some() {
if let Some((dir, show_hidden)) = self.delayed_read_dir.take() {
self.read_dir(&dir, show_hidden);
}
} else {
self.try_sub_services();
} }
} else {
self.try_sub_services();
} }
} }
_ => {} _ => {}