2014-03-03 64 views
0

我正在尋找重新工作一箇舊的CBT windows掛鉤,並且對它如何工作有些困惑。它的設置方式是一個DLL處理Windows掛鉤及其邏輯,而另一個程序在設置掛鉤時調用該DLL。它看起來像這樣:Windows掛機和dll加載

LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    return CallNextHookEx(NULL, nCode, wParam, lParam); 
} 

// this is the function the other program calls into 
void InstallHook() 
{ 
    // hdll is this dll's address 
    SetWindowsHookEx(WH_CBT, HookProc, hDLL, 0); 
} 

然後,我們有我們的DllMain功能。每當hookProc函數被調用時,該dllmain函數似乎都會被調用,並且我不理解這種行爲。我已經檢查過fdwReason,並且由於dll進程附加事件而被調用。

每次調用HookProc時如何觸發此事件?由於它是一個全局鉤子,我認爲windows會加載dll並堅持它,當需要出現時調用HookProc。但是從我所看到的情況來看,它的行爲就像在任何時候HookProc被調用時一樣。這是通常的工作方式,還是代碼庫的另一部分會導致這種情況?

+1

實現全局掛鉤的DLL會被加載到觸發掛鉤的系統中的任何進程中。 –

+0

@Jonathan Ahh,謝謝你的信息。如果您將其作爲答案發布,我會接受並贊成,因爲它完美地回答了我的問題。 – Josh

回答

2

實現全局鉤子的DLL會被加載到觸發鉤子的系統中的任何進程中。 (這正是爲什麼全局掛鉤必須將作爲DLL實現 - 因此它們可以加載到其他進程中的原因)。