Detours提供了简单易用的函数接口来拦截WIN32 API调用。官方的下载地址为http://research.microsoft.com/en-us/projects/detours/,下载Detours Express 2.1安装之后还不能直接使用,编译流程如下:
1 将Detours安装目录中的src拷贝至VS安装目录/Microsoft Visual Studio 9.0/VC/bin
2 打开CMD控制台
3 将/Microsoft Visual Studio 9.0/VC/bin/vcvars32.bat拖入控制台运行
4 控制台进入到/Microsoft Visual Studio 9.0/VC/bin目录下,输入运行nmake
成功之后就会增加Detours的lib、include、bin目录,下面是个简单的例子:
static VOID (WINAPI * TrueSleep)(DWORD dwMilliseconds) = Sleep; // 原函数
// 替代的函数
VOID WINAPI TimedSleep(DWORD dwMilliseconds)
{
TrueSleep(dwMilliseconds);
}
BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
// 注册
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)TrueSleep, TimedSleep);
DetourTransactionCommit();
}
else if (dwReason == DLL_PROCESS_DETACH)
{
// 卸载
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(PVOID&)TrueSleep, TimedSleep);
DetourTransactionCommit();
}
return TRUE;
}