2010-10-24 54 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值這就是爲什麼我的代碼不點火的一個犯了錯......

回它...