全局鉤子

全局鉤子是系統鉤子的一種,當指定的一些訊息被系統中任何應用程式所處理時,這個鉤子就被調用。

1. 概述

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

2. 鉤子的原理

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

3. Win32全局鉤子的運行機制

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

相關詞條

相關搜尋

熱門詞條

聯絡我們