В Mpeg2DecFilter.cpp
присутствует следующий код:
#include "detours.h"
DETOUR_TRAMPOLINE(BOOL WINAPI Real_IsDebuggerPresent(), IsDebuggerPresent);
BOOL WINAPI Mine_IsDebuggerPresent()
{
TRACE(_T("Oops, somebody was trying to be naughty! (called IsDebuggerPresent)\n"));
return FALSE;
}
...snip...
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
if(!fDetourInited)
{
DetourFunctionWithTrampoline((PBYTE)Real_IsDebuggerPresent, (PBYTE)Mine_IsDebuggerPresent);
...snip...
fDetourInited = true;
}
return DllEntryPoint((HINSTANCE)hModule, ul_reason_for_call, 0); // "DllMain" of the dshow baseclasses;
}
Я не могу понять, почему Gplmpgdec переопределяет IsDebuggerPresent
всегда возвращаться FALSE
, Какое возможное использование это может служить?
Дело в том, что для меня это вызывает проблемы из-за того, что сообщения отладчика не отображаются и (иногда) происходит сбой приложения, если сообщение трассировки записывается при выгрузке библиотеки DLL Gplmpgdec.
Чтобы решить, как решить эту проблему, я думаю, мне действительно нужно знать, почему Gplmpgdec делает это. Любые предложения относительно решения также приветствуются. Я бы предпочел не поддерживать свою собственную библиотеку Gplmpgdec; такого рода головную боль от обслуживания я бы предпочел избежать любой ценой. Есть ли способ отключить объезд?
Некоторые фильтры DirectShow фактически не работают (специально), когда присутствует отладчик.
Я не уверен, что это обходной путь для этого Gplmpgdec или он связан с другой перехваченной функцией; ChangeDisplaySettingsEx
, Вы можете ясно видеть ссылки на Macrovision в коде, который они, вероятно, пытаются отключить.
Media Player Classic / MPC-HC использует тот же тип кода, и он имеет больше смысла в .exe, чем в библиотеке декодера.
Я также был удивлен, увидев этот код в проекте с открытым исходным кодом.
Я думаю, что это просто некая шутка от разработчика. Если вы посмотрите сообщение
Ой, кто-то пытался быть непослушным!
для меня это вторая степень, и, возможно, разработчик только что обнаружил IsDebuggerPresent, и ему было интересно его использовать …
Я также помню, что во время использования этого кодека некоторые видео-кодеки предотвращали отладку приложения DirectShow (с использованием filtergraph). Может быть, этот разработчик пришел из одной из этих компаний …
Чтобы справиться с этой проблемой, вам просто нужно прокомментировать этот код и перекомпилировать его.