2010-10-24 57 views
0

我有一个的DllMain定义为这样:的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功能在工作中完美...

谢谢。

+0

你是如何“运行”的DLL? – wj32 2010-10-24 05:14:27

+1

您为那些隐藏DLL的产品工作的是什么样的公司?这是恶意的,投票结束。 – 2010-10-24 07:18:04

+0

你在'DllMain'里面做了什么?你可以发布一些代码吗? – nakiya 2010-10-24 04:43:28

回答

0

你不能“运行”一个DLL。也许你已经将它构建为一个可执行项目,其中DllMain没有特殊意义。

+0

对不起,只是差的选择的话,它编译为一个DLL。正如我所说,这一切工作正常,当我编译它在我的工作电脑,但在家里,我认为其中一个编译设置是不同的,我想知道如果有人知道哪一个... – flavour404 2010-10-24 04:59:10

0

今天早上看了一下新鲜的眼睛和意识到的DllMain被调用,但其实我在检查NBTargets值这就是为什么我的代码不点火的一个犯了错......

回它...