// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Lysann Tranvouez. All rights reserved. #pragma once #ifndef MACH_DETOURS_H #define MACH_DETOURS_H #ifdef __cplusplus extern "C" { #endif #include #include typedef void* detour_func_t; #define detour_err_in_progress (err_local | 1) #define detour_err_wrong_thread (err_local | 2) #define detour_err_too_small (err_local | 3) #define detour_err_too_large (err_local | 4) mach_error_t detour_transaction_begin(); mach_error_t detour_transaction_abort(); mach_error_t detour_transaction_commit(); mach_error_t detour_transaction_commit_ex(detour_func_t** out_failed_target); mach_error_t detour_manage_thread(thread_t thread); mach_error_t detour_attach(detour_func_t* inout_pointer, detour_func_t detour); mach_error_t detour_attach_ex(detour_func_t* inout_pointer, detour_func_t detour, detour_func_t* out_real_trampoline, detour_func_t* out_real_target, detour_func_t* out_real_detour); mach_error_t detour_detach(detour_func_t* inout_pointer, detour_func_t detour); bool detour_set_ignore_too_small(bool value); bool detour_set_retain_regions(bool value); void* detour_set_system_region_lower_bound(void* value); void* detour_set_system_region_upper_bound(void* value); #ifdef __cplusplus } #endif #endif // MACH_DETOURS_H