improve error handling syntax

This commit is contained in:
2025-12-03 11:50:30 +00:00
parent bd51e3e2e2
commit f2da8b5328
2 changed files with 24 additions and 43 deletions
+4 -12
View File
@@ -5,7 +5,7 @@ use std::{ffi::c_void, ptr};
use windows::Win32::System::Diagnostics::Debug::{ReadProcessMemory, WriteProcessMemory}; use windows::Win32::System::Diagnostics::Debug::{ReadProcessMemory, WriteProcessMemory};
pub fn read<T>(handle: &Handle, address: usize, value: &mut T) -> Result<(), crate::Error> { pub fn read<T>(handle: &Handle, address: usize, value: &mut T) -> Result<(), crate::Error> {
match unsafe { unsafe {
ReadProcessMemory( ReadProcessMemory(
handle.0, handle.0,
address as *const c_void, address as *const c_void,
@@ -13,16 +13,12 @@ pub fn read<T>(handle: &Handle, address: usize, value: &mut T) -> Result<(), cra
size_of::<T>(), size_of::<T>(),
None, None,
) )
} {
Ok(()) => Ok(()),
Err(why) => Err(crate::Error::AccessMemoryError(format!(
"failed to read memory: {why}"
))),
} }
.map_err(|why| crate::Error::AccessMemoryError(format!("failed to read memory: {why}")))
} }
pub fn write<T>(handle: &Handle, address: usize, value: &mut T) -> Result<(), crate::Error> { pub fn write<T>(handle: &Handle, address: usize, value: &mut T) -> Result<(), crate::Error> {
match unsafe { unsafe {
WriteProcessMemory( WriteProcessMemory(
handle.0, handle.0,
address as *const c_void, address as *const c_void,
@@ -30,10 +26,6 @@ pub fn write<T>(handle: &Handle, address: usize, value: &mut T) -> Result<(), cr
size_of::<T>(), size_of::<T>(),
None, None,
) )
} {
Ok(()) => Ok(()),
Err(why) => Err(crate::Error::AccessMemoryError(format!(
"failed to write memory: {why}"
))),
} }
.map_err(|why| crate::Error::AccessMemoryError(format!("failed to write memory: {why}")))
} }
+20 -31
View File
@@ -13,26 +13,21 @@ pub struct ProcessSnapshot {
impl ProcessSnapshot { impl ProcessSnapshot {
pub fn get_processes() -> Result<Vec<Self>, crate::Error> { pub fn get_processes() -> Result<Vec<Self>, crate::Error> {
let snapshot = match unsafe { CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) } { let snapshot =
Ok(snapshot) => snapshot, unsafe { CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) }.map_err(|why| {
Err(why) => { crate::Error::CreateSnapshotError(format!(
return Err(crate::Error::CreateSnapshotError(format!(
"failed to create process snapshot: {why}" "failed to create process snapshot: {why}"
))) ))
} })?;
};
let mut process_entry_32_w = PROCESSENTRY32W { let mut process_entry_32_w = PROCESSENTRY32W {
dwSize: u32::try_from(size_of::<PROCESSENTRY32W>())?, dwSize: u32::try_from(size_of::<PROCESSENTRY32W>())?,
..Default::default() ..Default::default()
}; };
match unsafe { Process32FirstW(snapshot, &mut process_entry_32_w) } { unsafe { Process32FirstW(snapshot, &mut process_entry_32_w) }.map_err(|why| {
Ok(()) => {} crate::Error::CreateSnapshotError(format!(
Err(why) => { "failed to get first process from snapshot: {why}"
return Err(crate::Error::CreateSnapshotError(format!( ))
"failed to get first process from snapshot: {why}" })?;
)))
}
};
let mut processes = Vec::new(); let mut processes = Vec::new();
loop { loop {
let name = String::from_utf16_lossy(&process_entry_32_w.szExeFile) let name = String::from_utf16_lossy(&process_entry_32_w.szExeFile)
@@ -62,27 +57,21 @@ pub struct ModuleSnapshot {
impl ModuleSnapshot { impl ModuleSnapshot {
pub fn get_modules(pid: u32) -> Result<Vec<Self>, crate::Error> { pub fn get_modules(pid: u32) -> Result<Vec<Self>, crate::Error> {
let snapshot = let snapshot =
match unsafe { CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, pid) } unsafe { CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, pid) }
{ .map_err(|why| {
Ok(snapshot) => snapshot, crate::Error::CreateSnapshotError(format!(
Err(why) => {
return Err(crate::Error::CreateSnapshotError(format!(
"failed to create module snapshot: {why}" "failed to create module snapshot: {why}"
))) ))
} })?;
};
let mut module_entry_32_w = MODULEENTRY32W { let mut module_entry_32_w = MODULEENTRY32W {
dwSize: u32::try_from(size_of::<MODULEENTRY32W>())?, dwSize: u32::try_from(size_of::<MODULEENTRY32W>())?,
..Default::default() ..Default::default()
}; };
match unsafe { Module32FirstW(snapshot, &mut module_entry_32_w) } { unsafe { Module32FirstW(snapshot, &mut module_entry_32_w) }.map_err(|why| {
Ok(()) => {} crate::Error::CreateSnapshotError(format!(
Err(why) => { "failed to get first module from snapshot: {why}"
return Err(crate::Error::CreateSnapshotError(format!( ))
"failed to get first module from snapshot: {why}" })?;
)))
}
}
let mut modules = Vec::new(); let mut modules = Vec::new();
loop { loop {
let name = String::from_utf16_lossy(&module_entry_32_w.szModule) let name = String::from_utf16_lossy(&module_entry_32_w.szModule)