[英]Windows Hooking and Dll Loading
我正在研究改造一個舊的CBT窗口掛鈎,並對它目前的工作方式感到有些困惑。 它的設置方式是一個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時隨時加載。 這是它通常如何工作,還是代碼庫的另一部分可能導致這種情況?
實現全局鈎子的DLL被加載到觸發鈎子的系統中的任何進程中。
(這正是全局鈎子必須實現為DLL的原因 - 因此可以將它們加載到其他進程中)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.