Detou简单使用实例

原创 2013年12月03日 20:53:29

打开vs2008 -》新建 -》项目-》Win32项目(输入DetourHook) -》确定 -》下一步 -》Windows应用程序(其它默认)-》完成。

把下面代码完全拷贝到DetourHook.cpp中,DetourHook.cpp中原来代码完全删除。编译。通过。。有警告忽略处理。。。。。

#include "stdafx.h"
#include "DetourHook.h"
#include <detours.h>

#pragma comment(lib, "detours.lib") 
#pragma comment(lib, "detoured.lib")



static int (WINAPI* OLD_MessageBoxW)(HWND hWnd,LPCWSTR lpText,LPCWSTR lpCaption,UINT uType)=MessageBoxW;
int WINAPI NEW_MessageBoxW(HWND hWnd,LPCWSTR lpText,LPCWSTR lpCaption,UINT uType)
{
                
        //修改输入参数,调用原函数
        int ret=OLD_MessageBoxW(hWnd,L"输入参数已修改",L"[测试]",uType);
        return ret;
}

VOID Hook()
{
        DetourRestoreAfterWith();
        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());

        //这里可以连续多次调用DetourAttach,表明HOOK多个函数
        DetourAttach(&(PVOID&)OLD_MessageBoxW,NEW_MessageBoxW);

        DetourTransactionCommit();
}

VOID UnHook()
{
        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        
        //这里可以连续多次调用DetourDetach,表明撤销多个函数HOOK
        DetourDetach(&(PVOID&)OLD_MessageBoxW,NEW_MessageBoxW);

        DetourTransactionCommit();

}
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
        MessageBoxW(0,L"正常消息框",L"测试",0);
        Hook();
        MessageBoxW(0,L"正常消息框",L"测试",0);
        UnHook();
        return 0;
        
}
参考:

http://blog.csdn.net/evi10r/article/details/6659354

HttpWebRequest简单实例

static void Main(string[] args) { HttpWebRequest request = (HttpWebRequest)HttpW...
  • Momo_Da
  • Momo_Da
  • 2017年03月23日 20:51
  • 243

okhttp的简单使用例子

OKHttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,通过连接池来减小响应延迟,还有透明的GZIP压缩,请求缓存等优势。  1. GET  在OKHttp,每次...
  • sanciyuan2044123845
  • sanciyuan2044123845
  • 2017年05月11日 14:53
  • 692

ijkplayer-android的简单使用

## 依赖项目 ijkplayer-java 简单使用 布局文件
  • xiaodu1997
  • xiaodu1997
  • 2017年01月15日 20:27
  • 1757

简单 GSON 例子

GSON是一个由谷歌开发的java API,用于在java对象和json对象中进行转换。这篇文章讨论和提供了简单代码案例使用gson api,更多的api可以在这里查看。api这是关于GSON系列文章...
  • gusgao
  • gusgao
  • 2016年08月16日 10:30
  • 1272

Oracle存储过程简单使用及示例代码

简单的说存储过程是为了完成某个数据库中的特定功能而编写的语句集,该语句集包括SQL语句(对数据的增删改查)、条件语句和循环语句等。...
  • AikesLs
  • AikesLs
  • 2018年01月06日 17:33
  • 115

Retrofit2简单实例

Retrofit2简单实例
  • guchuanhang
  • guchuanhang
  • 2016年12月09日 18:52
  • 1684

简单动态代理实例(使用jdk的proxy)

在持久层DAO层中,对数据库操作有影响的增、删、改都需要开启事物,并在执行完增删改之后要提交事物。但如果每个方法都这样写的话,那么代码变显得冗余,采用动态代理的方式来实现这种需求的话,可以使代码更清晰...
  • rain097790
  • rain097790
  • 2013年11月05日 16:17
  • 1524

用eclipse写的一个简单的JPA例子

首先新建一个JPA工程:
  • zhutouhexiaona
  • zhutouhexiaona
  • 2014年05月17日 12:51
  • 2052

android viewPager的简单使用案例

1 认识一下ViewPager?      ViewPager最早出自4.0版本,那么低版本如何能使用ViewPager呢?为了兼容低版本安卓设备,谷歌官方给我们提供了一个的软件包android...
  • u011422023
  • u011422023
  • 2015年04月08日 19:13
  • 1739

OKhttp简单使用

简单说一下学习okhttp的理由 google在Android 6.0中删除了HttpClient的Api,采用的是则是okhttp高效的使用HTTP,使应用运行更快更省流量响应缓存数据避免重复...
  • huangjiamingboke
  • huangjiamingboke
  • 2017年06月12日 09:33
  • 194
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Detou简单使用实例
举报原因:
原因补充:

(最多只允许输入30个字)