improve reliability and logging when running into game access denied issues

This commit is contained in:
2025-09-09 03:03:32 +01:00
parent 356d5f17e5
commit f63d24ea43
3 changed files with 28 additions and 8 deletions
+12 -3
View File
@@ -1,6 +1,7 @@
use crate::util::{ use crate::util::{
consts::game::{EXE_ENHANCED, EXE_LEGACY}, consts::game::{EXE_ENHANCED, EXE_LEGACY},
countdown::Countdown, countdown::Countdown,
log,
}; };
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use sysinfo::System; use sysinfo::System;
@@ -61,14 +62,22 @@ fn get_gta_pid(sysinfo: &mut System) -> Option<u32> {
} }
} }
pub fn activate(game_handle: &mut HANDLE, sysinfo: &mut System) { pub fn activate(game_handle: &mut HANDLE, sysinfo: &mut System) -> Result<(), ()> {
let Some(pid) = get_gta_pid(sysinfo) else { let Some(pid) = get_gta_pid(sysinfo) else {
return; return Err(());
}; };
unsafe { unsafe {
*game_handle = OpenProcess(PROCESS_SUSPEND_RESUME, false, pid).unwrap(); match OpenProcess(PROCESS_SUSPEND_RESUME, false, pid) {
Ok(handle) => *game_handle = handle,
Err(why) => {
let message = format!("failed to suspend game for empty session:\n{why}");
log::log(log::LogLevel::Error, &message);
return Err(());
}
}
let _ = NtSuspendProcess(*game_handle); let _ = NtSuspendProcess(*game_handle);
} }
Ok(())
} }
pub fn deactivate(game_handle: &mut HANDLE) { pub fn deactivate(game_handle: &mut HANDLE) {
+10 -2
View File
@@ -1,4 +1,7 @@
use crate::util::consts::game::{EXE_ENHANCED, EXE_LEGACY}; use crate::util::{
consts::game::{EXE_ENHANCED, EXE_LEGACY},
log,
};
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use sysinfo::System; use sysinfo::System;
@@ -58,7 +61,12 @@ fn activate(sysinfo: &mut System) {
.iter() .iter()
.filter(|(_, p)| p.name() == EXE_ENHANCED || p.name() == EXE_LEGACY) .filter(|(_, p)| p.name() == EXE_ENHANCED || p.name() == EXE_LEGACY)
.for_each(|(_, p)| { .for_each(|(_, p)| {
p.kill(); if p.kill() == false {
log::log(
log::LogLevel::Error,
"failed to force close game, probably due to access denied",
);
}
}); });
sysinfo.refresh_all(); sysinfo.refresh_all();
} }
+4 -1
View File
@@ -117,9 +117,12 @@ impl App {
ui.add_enabled_ui(!self.empty_session.disabled, |ui| { ui.add_enabled_ui(!self.empty_session.disabled, |ui| {
ui.horizontal(|ui| { ui.horizontal(|ui| {
if ui.button("Empty current session").clicked() { if ui.button("Empty current session").clicked() {
if features::empty_session::activate(&mut self.game_handle, &mut self.sysinfo)
.is_ok()
{
self.empty_session.interval = Instant::now(); self.empty_session.interval = Instant::now();
self.empty_session.disabled = true; self.empty_session.disabled = true;
features::empty_session::activate(&mut self.game_handle, &mut self.sysinfo); }
} }
ui.label(&self.empty_session.countdown.i_string); ui.label(&self.empty_session.countdown.i_string);
}); });