explicit PatchDetour(Process const& process, TargetFuncRawT target, DetourFuncT const& detour, ContextT context = ContextT()) : process_{&process}, target_{detail::AliasCast<void*>(target)}, detour_{detour}, context_(std::move(context)), stub_{std::make_unique<StubT>(this)} { }
explicit PatchFuncPtr(Process const& process, TargetFuncRawT* target, DetourFuncT const& detour, ContextT context = ContextT()) : process_{&process}, target_{target}, detour_{detour}, context_(std::move(context)), stub_{std::make_unique<StubT>(this)} { }
explicit PatchFuncRva(Process const& process, void* base, DWORD* target, DetourFuncT const& detour, ContextT context = ContextT()) : process_{&process}, base_{base}, target_{target}, detour_{detour}, context_(std::move(context)), stub_{std::make_unique<StubT>(this)} { }
PatchIat(Process const& process, std::wstring const& module, std::string const& function, DetourFuncT const& detour, ContextT context = ContextT()) : process_{&process}, module_(detail::ToUpperOrdinal(module)), function_(function), detour_{detour}, context_(std::move(context)) { hadesmem::ModuleList const modules{process}; for (auto const& m : modules) { HookModule(m); } }
explicit PatchFuncRva(Process&& process, void* base, DWORD* target, DetourFuncT const& detour, ContextT context = ContextT()) = delete;
explicit PatchIat(Process&& process, std::wstring const& module, std::string const& function, DetourFuncT const& detour, ContextT context = ContextT()) = delete;
explicit PatchDetour(Process&& process, TargetFuncRawT target, DetourFuncT const& detour, ContextT context = ContextT()) = delete;