3

このコードをフックに使用しており、MS Detours を使用しています。Detours.cpp、Detours.h、Detours.lib を detours ディレクトリに配置しました。このディレクトリは、VS (Visual Studio) コードがあるフック フォルダーに一時的に作成しました。VSの設定で、配置した迂回ディレクトリを「追加インクルードディレクトリ」「追加ライブラリディレクトリ」のディレクトリとしてインクルードしました。プログラムはこちら

#include <Windows.h>
#include "detours.h"
#pragma comment(lib, "detours.lib")

typedef BOOL (__stdcall* tGetFileVersionInfoExW)(DWORD dwFlags, LPCWSTR lpwstrFilename, DWORD dwHandle, DWORD dwLen, LPVOID lpData);
tGetFileVersionInfoExW pGetFileVersionInfoExW;

BOOL WINAPI MyGetFileVersionInfoExW(DWORD dwFlags, LPCWSTR lpwstrFilename, DWORD dwHandle, DWORD dwLen, LPVOID lpData)
{
    //Messagebox
    MessageBox(NULL, "myGetFileVersionInfoExW Just Got Called","InsertDateTime", MB_OK);
    return pGetFileVersionInfoExW(dwFlags, lpwstrFilename, dwHandle, dwLen, lpData); //Return the origional function
}


BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call) //Decide what to do
    {
    case DLL_PROCESS_ATTACH: //On dll attach
        {
            pGetFileVersionInfoExW = (tGetFileVersionInfoExW)DetourFunction((PBYTE)0x0100A036, (PBYTE)MyGetFileVersionInfoExW);
        }
        break;

    case DLL_THREAD_ATTACH: //On thread attach
        break;
    case DLL_THREAD_DETACH: //On thread detach
        break;
    case DLL_PROCESS_DETACH: //on process detach
        {
            DetourRemove((PBYTE)pGetFileVersionInfoExW, (PBYTE)MyGetFileVersionInfoExW);
        }
        break;
    }
    return true;
}

それでもこのエラーが発生します-

IntelliSense: identifier "DetourRemove" is undefined    
IntelliSense: identifier "DetourFunction" is undefined  

MS Detours のデフォルトのインストール ディレクトリを使用している場合でも、プログラムはコンパイルされません。どこが間違っていますか?

4

1 に答える 1

0

旧バージョンはDetourFunctionandDetourRemoveで、現在は and に名前が変更されDetourAttachていDetourDetachます (Detours ver. 2.0 以降)。

于 2016-07-31T10:20:46.570 に答える