Я скачал и скомпилировал обходную библиотеку Microsoft. Внутри моего проекта я включил заголовочный файл и добавил файл .lib в качестве зависимости. Все компилируется без ошибок. Сейчас я пытаюсь обойти DrawText, но по какой-то причине эта функция не вызывается вообще. Похоже, я пытался отключить функцию Sleep, и она работала так, как задумывалось, и была вызвана функция, которую я отклонил.
Я не очень хорошо разбираюсь в бизнесе по программированию API или другим низкоуровневым действиям. Я подозреваю, что это может быть связано с тем фактом, что я пытаюсь сделать это внутри консольного приложения вместо того, чтобы сделать обход в DLL. Я просто нахожу странным, что в этом случае он сможет обойти сон.
Что-то не так с моим подходом или ошибка кроется в коде?
#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;
}