Почему Gplmpgdec (GPL MPEG-1/2 DirectShow Decoder Filter) переопределяет / отклоняет IsDebuggerPresent? - PullRequest
0 голосов
/ 05 июня 2018

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

Ответы [ 2 ]

0 голосов
/ 18 августа 2018

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

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

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

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

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

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

0 голосов
/ 05 июня 2018

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

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

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

...