簡體   English   中英

UnhookWindowsHookEx是否從掛鈎的應用程序中卸載庫以進行線程特定的掛鈎?

[英]Does UnhookWindowsHookEx unload the library from the hooked application for a thread-specific hook?

假設我有一個Windows掛鈎過程,正在使用SetWindowsHookEx安裝在特定線程上。 當我隨后調用UnhookWindowsHookEx ,我的DLL是否包含從目標應用程序卸載的掛鈎過程?

我在該主題上找到的大多數文檔似乎都暗示調用SetWindowsHookEx會導致對目標應用程序中的LoadLibrary的隱式調用。 此外,文檔還非常小心地指出,在全局 Windows鈎子上調用UnhookWindowsHookEx不會隱式地從可能已加載該庫的所有進程中釋放該庫,但在線程特定的鈎子上還遠遠不夠。 我或者沒有足夠仔細地閱讀文檔,或者我的網絡搜索能力使我失敗了。

線程特定的鈎子和全局鈎子之間沒有區別。 線程ID參數只是一個過濾器,用於確定在何處應用鈎子-不會更改鈎子規則。

因此,或者線程ID參數用於不同的進程,並且適用於全局情況的相同規則-您不能安全地將FreeLibrary調用注入另一個進程,或者線程ID是您的進程的一部分,並且沒有理由調用LoadLibary因為在調用SetWindowsHookEx之前已經加載了DLL。 (或者您為實例傳遞了NULL,在這種情況下沒有DLL)

我懷疑文檔使用“全局”表示進程外,而“線程”正在進程內,因為那是正常情況。 鈎住另一個進程的單個線程將是一種罕見的事件(但似乎受到支持。請參閱備注 )。

當然,這只是在文檔各行之間閱讀。

根據我的研究,UnhookWindowsHookEx不會卸載.dll。 收到新消息后,將由消息處理代碼將其卸載。 因此,一些幾乎從未收到任何消息的后台進程,仍可能在刪除鈎子后很長時間就鎖定了庫。 廣播WM_NULL消息通常會有所幫助。 我喜歡在摘鈎后發送幾次。

SendNotifyMessage(HWND_BROADCAST, WM_NULL, 0, 0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM