use crate::*;
use abistr::*;
use winapi::um::libloaderapi::*;
use std::ptr::*;
pub fn get_module_handle_entry_exe() -> Result<HModule<'static>, Error> {
fn_context!(get_module_handle_entry_exe => GetModuleHandleW);
let hmodule = unsafe { GetModuleHandleW(null_mut()) };
fn_succeeded!(!hmodule.is_null())?;
unsafe { Ok(HModule::from_unchecked(hmodule)) }
}
pub fn get_module_handle_ex_a_pin(module_name: impl TryIntoAsCStr) -> Result<HModule<'static>, Error> {
fn_context!(get_module_handle_ex_a_pin => GetModuleHandleA);
let module_name = module_name.try_into().map_err(|_| fn_param_error!(module_name, ERROR::INVALID_PARAMETER))?;
let mut hmodule = null_mut();
fn_succeeded!(unsafe { GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_PIN, module_name.as_opt_cstr(), &mut hmodule) })?;
fn_succeeded!(!hmodule.is_null())?;
unsafe { Ok(HModule::from_unchecked(hmodule)) }
}
pub fn get_module_handle_ex_w_pin(module_name: impl TryIntoAsCStr<u16>) -> Result<HModule<'static>, Error> {
fn_context!(get_module_handle_ex_w_pin => GetModuleHandleW);
let module_name = module_name.try_into().map_err(|_| fn_param_error!(module_name, ERROR::INVALID_PARAMETER))?;
let mut hmodule = null_mut();
fn_succeeded!(unsafe { GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_PIN, module_name.as_opt_cstr(), &mut hmodule) })?;
fn_succeeded!(!hmodule.is_null())?;
unsafe { Ok(HModule::from_unchecked(hmodule)) }
}