improve reliability and logging when running into game access denied issues
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
use crate::util::{
|
||||
consts::game::{EXE_ENHANCED, EXE_LEGACY},
|
||||
countdown::Countdown,
|
||||
log,
|
||||
};
|
||||
use std::time::{Duration, Instant};
|
||||
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 {
|
||||
return;
|
||||
return Err(());
|
||||
};
|
||||
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);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn deactivate(game_handle: &mut HANDLE) {
|
||||
|
||||
@@ -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 sysinfo::System;
|
||||
|
||||
@@ -58,7 +61,12 @@ fn activate(sysinfo: &mut System) {
|
||||
.iter()
|
||||
.filter(|(_, p)| p.name() == EXE_ENHANCED || p.name() == EXE_LEGACY)
|
||||
.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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user