use crate::memory_hook::Architecture;
use windows::Win32::Foundation::CloseHandle;
use windows::Win32::System::Threading::{IsWow64Process, OpenProcess, PROCESS_QUERY_INFORMATION};
pub fn detect_process_architecture(pid: u32) -> Architecture {
unsafe {
if let Ok(handle) = OpenProcess(PROCESS_QUERY_INFORMATION, false, pid) {
let mut is_wow64: i32 = 0;
if IsWow64Process(handle, &mut is_wow64 as *mut i32 as *mut _).is_ok() {
let _ = CloseHandle(handle);
return if is_wow64 != 0 {
Architecture::X86
} else {
if cfg!(target_pointer_width = "32") {
Architecture::X86
} else {
Architecture::X64
}
};
}
let _ = CloseHandle(handle);
}
if cfg!(target_pointer_width = "32") {
Architecture::X86
} else {
Architecture::X64
}
}
}