Я играю с Microsoft Detours , чтобы перехватить API, например, я могу изменить то, что происходит, когда MessageBoxA
называется так:
int (WINAPI* pMessageBoxA)(HWND, LPCTSTR, LPCTSTR, UINT) = MessageBoxA;
int WINAPI MyMessageBoxA(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
printf("A function is called here!\n");
return pMessageBoxA(hWnd, lpText, lpCaption, uType); // call the regular MessageBoxA
}
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pMessageBoxA, MyMessageBoxA);
Поэтому, когда вы звоните MessageBoxA
, вы на самом деле звоните MyMessageBoxA
.
Теперь я хочу написать функцию Hook()
, которая будет делать то, что вышеупомянутые коды делают во время выполнения. Например, если я передам указатель функции MessageBoxA
в функцию, она будет делать то же, что и код выше.
Конечно, я тоже могу передать указатель на другую функцию.
Тогда возникает вопрос: когда я получаю указатель на функцию в Hook
, как я могу определить функцию с тем же возвращаемым значением и параметром, что и для данной функции (в данном случае, от MessageBoxA
до int WINAPI MyMessageBoxA(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
), а затем заполнить тело функции функции?