Expand description
MinHook is a Windows API hooking library that allows you to intercept calls to functions in programs.
This crate is a wrapper around the MinHook library. Most of the API is unsafe because it is not possible to guarantee safety of the hooks.
§Example
This example shows how to create a hook for a function, and also call the original function.
use minhook::{MinHook, MH_STATUS};
fn main() -> Result<(), MH_STATUS> {
// Create a hook for the return_0 function, detouring it to return_1
let return_0_address = unsafe { MinHook::create_hook(return_0 as _, return_1 as _)? };
// Enable the hook
unsafe { MinHook::enable_all_hooks()? };
// Call the detoured return_0 function, it should return 1
assert_eq!(return_0(), 1);
// Transmute the original return_0 function address to a function pointer
let return_0_original = unsafe { std::mem::transmute::<_, fn() -> i32>(return_0_address) };
// Call the original return_0 function
assert_eq!(return_0_original(), 0);
Ok(())
}
fn return_0() -> i32 {
0
}
fn return_1() -> i32 {
1
}
Structs§
- MinHook
- A struct to access the MinHook API.
Enums§
- MH_
STATUS - MinHook status codes.