detours 2.1 VC 6においてコンパイル方法及びソースコード及び使用例及びコンパイルされたBIN


detours 2.1 VC 6においてコンパイル方法及びソースコード及び使用例及びコンパイルされたBIN
ダウンロードhttp://download.csdn.net/detail/chinafe/4424305
http://download.csdn.net/detail/chinafe/4424305
1.純VC 6環境において、win 32 static libraryプロジェクト名をdetoursとする.
2.detours 2.1 scrディレクトリのソースファイルをすべてプロジェクトに追加します.
3.Project->Seting->C/C+->Processor definitionsにDETOURS_を追加します.X 86
4.プロジェクトの中でdetoured.cppを開いて、中のDllMain関数名をLengFengに変更します.(そうでないと使用時にDllMain衝突が発生します.)error LNK 2005:_DllMain@12already defined in*.obj
5.直接コンパイルすればdetours.libが生成できます.
6.必要な項目にdetours.libとdetours.hを使えばいいです.
7.添付ファイルにコンパイルされたdetours.libとシステムソースコードが提供されています.
注意:SDKがインストールされていない環境でコンパイルが必要です.SDKがインストールされている場合は、SDKの順番を最後まで調整してください.
detour_2.1
ソースのために
detours_ビン
BINのために
chooksend
例として
2012-7-12冷たい風QQ 121212606
サンプルコード
ダウンロード
http://download.csdn.net/detail/chinafe/4424305
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include "detours.h"


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

static LONG dwSlept = 0;

// Target pointer for the uninstrumented Sleep API.
//
static VOID (WINAPI * TrueSleep)(DWORD dwMilliseconds) = Sleep;

// Detour function that replaces the Sleep API.
//
VOID WINAPI TimedSleep(DWORD dwMilliseconds)
{
    // Save the before and after times around calling the Sleep API.
    DWORD dwBeg = GetTickCount();
    TrueSleep(dwMilliseconds);
    DWORD dwEnd = GetTickCount();
	
    InterlockedExchangeAdd(&dwSlept, dwEnd - dwBeg);
}

// DllMain function attaches and detaches the TimedSleep detour to the
// Sleep target function.  The Sleep target function is referred to
// through the TrueSleep target pointer.
//
BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved)
{
    if (dwReason == DLL_PROCESS_ATTACH) {
        DetourRestoreAfterWith();
		
        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourAttach(&(PVOID&)TrueSleep, TimedSleep);
        DetourTransactionCommit();
    }
    else if (dwReason == DLL_PROCESS_DETACH) {
        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourDetach(&(PVOID&)TrueSleep, TimedSleep);
        DetourTransactionCommit();
    }
    return TRUE;
}