Kawe Mazidjatari 3831058f81 New method for IDetour
This will deprecate IDetour::Attach and IDetour::Detatch. This should reduce the chances of potential errors caused by using the wrong function in the wrong method (e.g. using DetourAttach in IDetour::Detatch).
2024-04-05 16:41:09 +02:00

40 lines
1.1 KiB
C++

#ifndef IDETOUR_H
#define IDETOUR_H
//-----------------------------------------------------------------------------
// Interface class for context hooks
//-----------------------------------------------------------------------------
class IDetour
{
public:
virtual ~IDetour() { ; }
virtual void GetAdr(void) const = 0;
virtual void GetFun(void) const = 0;
virtual void GetVar(void) const = 0;
virtual void GetCon(void) const = 0;
virtual void Attach(void) const = 0;
virtual void Detach(void) const = 0;
//virtual void Detour(const bool bAttach) const = 0;
template<
typename T,
typename std::enable_if<DetoursIsFunctionPointer<T>::value, int>::type = 0>
LONG Setup(_Inout_ T* ppPointer, _In_ T pDetour, const bool bAttach) const
{
if (bAttach)
return DetourAttach(ppPointer, pDetour);
else
return DetourDetach(ppPointer, pDetour);
}
};
extern std::vector<IDetour*> g_DetourVec;
std::size_t AddDetour(IDetour* pDetour);
#define ADDDETOUR(x,y) static std::size_t dummy_reg_##y = AddDetour( new x() );
#define XREGISTER(x,y) ADDDETOUR(x, y)
#define REGISTER(x) XREGISTER(x, __COUNTER__)
#endif // IDETOUR_H