Microsoftの迂回ライブラリをダウンロードしてコンパイルしました。プロジェクト内にヘッダーファイルをインクルードし、依存関係として.libファイルを追加しました。すべてがエラーなしでコンパイルされます。今、私はDrawTextを迂回しようとしていますが、何らかの理由で迂回された関数がまったく呼び出されません。同様に、Sleep関数を迂回させてみましたが、それは意図したとおりに機能し、迂回した関数が呼び出されました。
私はAPIプログラミングのビジネスやその他の低レベルのアクティビティにあまり精通していません。DLL内で迂回を行うのではなく、コンソールアプリケーション内でこれを実行しようとしているという事実と関係があるのではないかと思います。その場合、Sleepを迂回できるのは不思議です。
私のアプローチに何か問題がありますか、それともコードに問題がありますか?
#include <windows.h>
#include <stdio.h>
#include "detours.h"
int ( WINAPI *Real_DrawText )(HDC a0, LPCSTR a1, int a2, LPRECT a3, UINT a4) = DrawTextA;
int Mine_DrawText(HDC hdc, LPCSTR text, int nCount, LPRECT lpRect, UINT uOptions)
{
printf("TEST");
return Real_DrawText(hdc, text, nCount, lpRect, uOptions);
}
int main(int argc, char **argv)
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)Real_DrawText, Mine_DrawText);
DetourTransactionCommit();
printf("Calling Sleep\n");
Sleep(1000);
printf("Second callout");
Sleep(5000);
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(PVOID&)Real_DrawText, Mine_DrawText);
DetourTransactionCommit();
return 0;
}