Почему Gplmpgdec (фильтр декодера DirectShow GPL-1/2) переопределяет / отклоняет IsDebuggerPresent?

В 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; такого рода головную боль от обслуживания я бы предпочел избежать любой ценой. Есть ли способ отключить объезд?

0

Решение

Некоторые фильтры DirectShow фактически не работают (специально), когда присутствует отладчик.

Я не уверен, что это обходной путь для этого Gplmpgdec или он связан с другой перехваченной функцией; ChangeDisplaySettingsEx, Вы можете ясно видеть ссылки на Macrovision в коде, который они, вероятно, пытаются отключить.

Media Player Classic / MPC-HC использует тот же тип кода, и он имеет больше смысла в .exe, чем в библиотеке декодера.

0

Другие решения

Я также был удивлен, увидев этот код в проекте с открытым исходным кодом.

Я думаю, что это просто некая шутка от разработчика. Если вы посмотрите сообщение

Ой, кто-то пытался быть непослушным!

для меня это вторая степень, и, возможно, разработчик только что обнаружил IsDebuggerPresent, и ему было интересно его использовать …

Я также помню, что во время использования этого кодека некоторые видео-кодеки предотвращали отладку приложения DirectShow (с использованием filtergraph). Может быть, этот разработчик пришел из одной из этих компаний …

Чтобы справиться с этой проблемой, вам просто нужно прокомментировать этот код и перекомпилировать его.

0

По вопросам рекламы [email protected]