複製鏈接
請複製以下鏈接發送給好友

全局鈎子

鎖定
全局鈎子是系統鈎子的一種,當指定的一些消息被系統中任何應用程序所處理時,這個鈎子就被調用。
中文名
全局鈎子
解    釋
用於計算機編程中

全局鈎子鈎子簡介

鈎子一詞多用於計算機編程中,英文叫hook,指利用api來提前攔截並處理windows消息的一種技術。如鍵盤鈎子,許多木馬都有這東西,監視你的鍵盤操作。
全局鈎子是系統鈎子的一種,當指定的一些消息被系統中任何應用程序所處理時,這個鈎子就被調用。

全局鈎子鈎子的原理

Windows系統是建立在事件驅動的機制上的,説穿了就是整個系統都是通過消息的傳遞來實現的。而鈎子是Windows系統中非常重要的系統接口,用它可以截獲並處理送給其他應用程序的消息,來完成普通應用程序難以實現的功能。鈎子的種類很多,每種鈎子可以截獲並處理相應的消息,如鍵盤鈎子可以截獲鍵盤消息,外殼鈎子可以截取、啓動和關閉應用程序的消息等。

全局鈎子運行機制

鈎子實際上是一個處理消息的程序段,通過系統調用,把它掛入系統。每當特定的消息發出,在沒有到達目的窗口前,鈎子程序就先捕獲該消息,亦即鈎子函數先得到控制權。這時鈎子函數即可以加工處理(改變)該消息,也可以不作處理而繼續傳遞該消息,還可以強制結束消息的傳遞。對每種類型的鈎子由系統來維護一個鈎子鏈,最近安裝的鈎子放在鏈的開始,而最先安裝的鈎子放在最後,也就是後加入的先獲得控制權。要實現Win32的系統鈎子,必須調用SDK中的API函數SetWindowsHookEx來安裝這個鈎子函數,這個函數的原型是HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId);,其中,第一個參數是鈎子的類型;第二個參數是鈎子函數的地址;第三個參數是包含鈎子函數的模塊句柄;第四個參數指定監視的線程。如果指定確定的線程,即為線程專用鈎子;如果指定為空,即為全局鈎子。其中,全局鈎子函數必須包含在DLL(動態鏈接庫)中,而線程專用鈎子還可以包含在可執行文件中。得到控制權的鈎子函數在完成對消息的處理後,如果想要該消息繼續傳遞,那麼它必須調用另外一個SDK中的API函數CallNextHookEx來傳遞它。鈎子函數也可以通過直接返回TRUE來丟棄該消息,並阻止該消息的傳遞。