Microsoft Detours: отсутствует макрос

Мне нужна помощь для проекта, который использует Microsoft Detours.

Предпосылка: я пытаюсь использовать класс, найденный в проект в CodeProject, использующий библиотеку Detours. Я скачал последнюю версию Detuors с Github и перекомпилировал ее, но не могу найти определение макроса DETOUR_TRAMPOLINE. Я предполагаю, что в новой версии Detours он каким-то образом заменен.

В проекте, в котором используется этот отсутствующий макрос, он используется следующим образом:

DETOUR_TRAMPOLINE(BOOL WINAPI Detour_EnableScrollBar(HWND hwnd, int wSBflags, UINT wArrows), EnableScrollBar);
DETOUR_TRAMPOLINE(BOOL WINAPI Detour_GetScrollInfo  (HWND hwnd, int fnBar, LPSCROLLINFO lpsi), GetScrollInfo);
DETOUR_TRAMPOLINE(int  WINAPI Detour_GetScrollPos   (HWND hwnd, int nBar), GetScrollPos);
DETOUR_TRAMPOLINE(BOOL WINAPI Detour_GetScrollRange (HWND hwnd, int nBar, LPINT lpMinPos, LPINT lpMaxPos), GetScrollRange);
DETOUR_TRAMPOLINE(int  WINAPI Detour_SetScrollInfo  (HWND hwnd, int fnBar, LPSCROLLINFO lpsi, BOOL fRedraw), SetScrollInfo);
DETOUR_TRAMPOLINE(int  WINAPI Detour_SetScrollPos   (HWND hwnd, int nBar, int nPos, BOOL fRedraw), SetScrollPos);
DETOUR_TRAMPOLINE(int  WINAPI Detour_SetScrollRange (HWND hwnd, int nBar, int nMinPos, int nMaxPos, BOOL fRedraw), SetScrollRange);
DETOUR_TRAMPOLINE(BOOL WINAPI Detour_ShowScrollBar  (HWND hwnd, int wBar, BOOL fShow), ShowScrollBar);

Вопрос:

  • Есть ли способ в новой версии Detours добиться того же эффекта, что и старый макрос?
  • Если это не требует слишком многого, могу ли я попросить вас о том, как я могу переписать код, о котором я сообщил выше, чтобы он был совместим с новым методом?

Заранее спасибо за помощь!


person pallagommosa    schedule 28.11.2019    source источник
comment
Лол, я ввел DETOUR_TRAMPOLINE в поле поиска на странице Microsoft GitHub, и GitHub ответил: Ого! Вы запустили механизм обнаружения злоупотреблений. Пожалуйста, подождите несколько минут, прежде чем повторить попытку; в некоторых случаях это может занять до часа. :П   -  person JHBonarius    schedule 28.11.2019
comment
Я немного погуглил макрос, и кажется, что макрос был в v1.5 обходных путей... в то время как сейчас они в v4... нет никакой гарантии, что простое переписывание кода, который вы показываете, решит проблему. Вероятно, вам нужно запустить свой код с версией обхода, для которой он был разработан... или в значительной степени переписать его.   -  person JHBonarius    schedule 28.11.2019
comment
@JHBonarius Я боялся, что это так... спасибо за помощь!   -  person pallagommosa    schedule 28.11.2019


Ответы (2)


Поиск в Google для "#define DETOUR_TRAMPOLINE" выдает:

#define DETOUR_TRAMPOLINE(trampoline,target) \
static PVOID __fastcall _Detours_GetVA_##target(VOID) \
{ \
    return ⌖ \
} \
person Community    schedule 28.11.2019

Как объяснил в своем комментарии JHBonarius, многие версии Detours были выпущены после удаления рассматриваемого макроса, поэтому, вероятно, это не так. так легко сделать быстрое изменение в рассматриваемом коде.

Я хотел указать интересующимся на очень простую и содержащую библиотеку, которая, как и Detours, позволяет перенаправлять Windows API (пусть и предоставляет гораздо меньшую функциональность).

Речь идет о библиотеке MinHook, и исходный код все еще доступен здесь.

person pallagommosa    schedule 28.11.2019