DllMain не вызывается - PullRequest
       5

DllMain не вызывается

0 голосов
/ 24 октября 2010

У меня DllMain определен так:

BOOL APIENTRY DllMain( HMODULE hModule,
                   DWORD  ul_reason_for_call,
                   LPVOID lpReserved
                 )
{ 

int i=0, DoHijack=0;

switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
    hMod = hModule;
    hProcessCenter = ::FindWindow(NULL, _T("Form1"));

    ExtractPaths(hModule, ExePath, &kNTIExeName, kNTIDllPath, &kNTIDllName);

    //Only hook target processses
    for(i=0; i < NB_TARGETS; i++)
    {
        if(strstr(kNTIExeName, Targets[i]))
            DoHijack=1;
    }

    if(DoHijack)
    {
            DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourAttach(&(PVOID&)Real_DrawText, Mine_DrawText); // <- magic
        DetourAttach(&(PVOID&)Real_ExtTextOut, Mine_ExtTextOut); 
        DetourTransactionCommit();
    break;   
    }      

case DLL_THREAD_ATTACH:
        break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
        DetourTransactionBegin(); 
        DetourUpdateThread(GetCurrentThread());
        DetourDetach(&(PVOID&)Real_DrawText, Mine_DrawText);
        DetourDetach(&(PVOID&)Real_ExtTextOut, Mine_ExtTextOut); // <- magic
        DetourTransactionCommit();
    break;
}
return TRUE;
 }

Это проект, который я купил дома с работы, и после того, как я скомпилировал и запустил его, dllmain никогда не вызывается, поэтому моя проблема, связанная с переключателем process_attach, никогда не срабатывает. Что может быть причиной этого? Что-то в компиляторе, один из вариантов компоновки?

DLL работает отлично на работе ...

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 октября 2010

Сегодня утром посмотрел на него свежим взглядом и понял, что вызывается dllmain, но на самом деле я допустил ошибку в одном из значений проверки NBTargets, поэтому мой код не запускался ...

назад к этому ...

0 голосов
/ 24 октября 2010

Вы не можете "запустить" DLL. Возможно, вы создали его как исполняемый проект, для которого DllMain не имеет особого значения.

...