日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC里面的钩子程序HOOK

發布時間:2024/8/1 c/c++ 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC里面的钩子程序HOOK 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

引言

  Windows操作系統是建立在事件驅動機制之上的,系統各部分之間的溝通也都是通過消息的相互傳遞而實現的。但在通常情況下,應用程序只能處理來自進程內部的消息或是從其他進程發過來的消息,如果需要對在進程外傳遞的消息進行攔截處理就必須采取一種被稱為HOOK(鉤子)的技術。鉤子是Windows操作系統中非常重要的一種系統接口,用它可以輕松截獲并處理在其他應用程序之間傳遞的消息,并由此可以完成一些普通應用程序難以實現的特殊功能。基于鉤子在消息攔截處理中的強大功能,本文即以VC++ 6.0為編程背景對鉤子的基本概念及其實現過程展開討論。為方便理解,在文章最后還給出了一個簡單的有關鼠標鉤子的應用示例。

鉤子的基本原理

  鉤子的本質是一段用以處理系統消息的程序,通過系統調用,將其掛入到系統。鉤子的種類有很多,每一種鉤子負責截獲并處理相應的消息。鉤子機制允許應用程序截獲并處理發往指定窗口的消息或特定事件,其監視的窗口即可以是本進程內的也可以是由其他進程所創建的。在特定的消息發出,并在到達目的窗口之前,鉤子程序先行截獲此消息并得到對其的控制權。此時在鉤子函數中就可以對截獲的消息進行各種修改處理,甚至強行終止該消息的繼續傳遞。

  任何一個鉤子都由系統來維護一個指針列表(鉤子鏈表),其指針指向鉤子的各個處理函數。最近安裝的鉤子放在鏈的開始,最早安裝的鉤子則放在最后,當鉤子監視的消息出現時,操作系統調用鏈表開始處的第一個鉤子處理函數進行處理,也就是說最后加入的鉤子優先獲得控制權。在這里提到的鉤子處理函數必須是一個回調函數(callback function),而且不能定義為類成員函數,必須定義為普通的C函數。在使用鉤子時可以根據其監視范圍的不同將其分為全局鉤子和線程鉤子兩大類,其中線程鉤子只能監視某個線程,而全局鉤子則可對在當前系統下運行的所有線程進行監視。顯然,線程鉤子可以看作是全局鉤子的一個子集,全局鉤子雖然功能強大但同時實現起來也比較煩瑣:其鉤子函數的實現必須封裝在動態鏈接庫中才可以使用。

鉤子的安裝與卸載

  由于全局鉤子具有相當的廣泛性而且在功能上完全覆蓋了線程鉤子,因此下面就主要對應用較多的全局鉤子的安裝與使用進行討論。前面已經提過,操作系統是通過調用鉤子鏈表開始處的第一個鉤子處理函數而進行消息攔截處理的。因此,為了設置鉤子,只需將回調函數放置于鏈首即可,操作系統會使其首先被調用。在具體實現時由函數SetWindowsHookEx()負責將回調函數放置于鉤子鏈表的開始位置。 SetWindowsHookEx()函數原型聲明如下:

  HHOOK SetWindowsHookEx(int idHook;

  HOOKPROC lpfn;

  HINSTANCE hMod;

  DWORD dwThreadId);

  其中:參數idHook 指定了鉤子的類型,總共有如下13種:

  WH_CALLWNDPROC 系統將消息發送到指定窗口之前的"鉤子"

  WH_CALLWNDPROCRET 消息已經在窗口中處理的"鉤子"

  WH_CBT 基于計算機培訓的"鉤子"

  WH_DEBUG 差錯"鉤子"

  WH_FOREGROUNDIDLE 前臺空閑窗口"鉤子"

  WH_GETMESSAGE 接收消息投遞的"鉤子"

  WH_JOURNALPLAYBACK 回放以前通過WH_JOURNALRECORD"鉤子"記錄的輸入消息

  WH_JOURNALRECORD 輸入消息記錄"鉤子"

  WH_KEYBOARD 鍵盤消息"鉤子"

  WH_MOUSE 鼠標消息"鉤子"

  WH_MSGFILTER 對話框、消息框、菜單或滾動條輸入消息"鉤子"

  WH_SHELL 外殼"鉤子"

  WH_SYSMSGFILTER 系統消息"鉤子"

  參數lpfn為指向鉤子處理函數的指針,即回調函數的首地址;參數hMod則標識了鉤子處理函數所處模塊的句柄;第四個參數dwThreadId 指定被監視的線程,如果明確指定了某個線程的ID就只監視該線程,此時的鉤子即為線程鉤子;如果該參數被設置為0,則表示此鉤子為監視系統所有線程的全局鉤子。此函數在執行完后將返回一個鉤子句柄。

雖然對于線程鉤子并不要求其象全局鉤子一樣必須放置于動態鏈接庫中,但是推薦其也在動態鏈接庫中實現。因為這樣的處理不僅可使鉤子可為系統內的多個進程訪問,也可以在系統中被直接調用,而且對于一個只供單進程訪問的鉤子,還可以將其鉤子處理過程放在安裝鉤子的同一個線程內,此時SetWindowsHookEx()函數的第三個參數也就是該線程的實例句柄。

  在SetWindowsHookEx()函數完成對鉤子的安裝后,如果被監視的事件發生,系統馬上會調用位于相應鉤子鏈表開始處的鉤子處理函數進行處理,每一個鉤子處理函數在進行相應的處理時都要考慮是否需要把事件傳遞給下一個鉤子處理函數。如果要傳遞,就通過函數CallNestHookEx()來解決。盡管如此,在實際使用時還是強烈推薦無論是否需要事件傳遞而都在過程的最后調用一次 CallNextHookEx( )函數,否則將會引起一些無法預知的系統行為或是系統鎖定。該函數將返回位于鉤子鏈表中的下一個鉤子處理過程的地址,至于具體的返回值類型則要視所設置的鉤子類型而定。該函數的原型聲明如下:

  LRESULT CallNextHookEx(HHOOK hhk;int nCode;WPARAM wParam;LPARAM lParam);

  其中,參數hhk為由SetWindowsHookEx()函數返回的當前鉤子句柄;參數nCode為傳給鉤子過程的事件代碼;參數wParamlParam 則為傳給鉤子處理函數的參數值,其具體含義同設置的鉤子類型有關。

  最后,由于安裝鉤子對系統的性能有一定的影響,所以在鉤子使用完畢后應及時將其卸載以釋放其所占資源。釋放鉤子的函數為UnhookWindowsHookEx(),該函數比較簡單只有一個參數用于指定此前由SetWindowsHookEx()函數所返回的鉤子句柄,原型聲明如下:

  BOOL UnhookWindowsHookEx(HHOOK hhk);

總結

以上是生活随笔為你收集整理的VC里面的钩子程序HOOK的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 韩国一区在线 | 中文字幕av在线免费 | 免费激情网站 | 成人在线视频观看 | 自拍偷拍第 | 久久久久久999 | 色乱码一区二区三区在线男奴 | 日本三级在线视频 | 伊人网在线免费观看 | 日本色悠悠 | 精品久久综合 | 亚洲色成人www永久在线观看 | 琪琪原网址 | 天天操天天射天天爽 | 91琪琪| xxxx国产| 泽村玲子av| 久久久久夜 | 国产精品久久久久久久一区二区 | 国产日韩在线免费观看 | 国产51精品| 精品乱码一区内射人妻无码 | 久久久久久免费毛片精品 | 欧美精品成人一区二区三区四区 | 在线欧美视频 | 中文字幕专区 | tube极品少妇videos | 一区二区三区视频在线免费观看 | 泰剧19禁啪啪无遮挡 | 亚洲AV无码成人国产精品色 | 日韩一区二区三区免费 | 爽爽窝窝午夜精品一区二区 | ass日本寡妇pics | 成人在线观看一区二区三区 | 国产成人午夜精品 | 中文字幕在线视频网 | 黄视频在线 | av 日韩 人妻 黑人 综合 无码 | 粉嫩av一区二区三区免费观看 | xiuxiuavnet| 亚洲一区毛片 | 精品国产aⅴ麻豆 | 琪琪色18 | 福利精品视频 | 天天色综合av | 强开小嫩苞一区二区三区网站 | 麻豆高清视频 | 久久wwww| 在线免费av网站 | 日韩区欧美区 | 国产第一网站 | 性盈盈影院中文字幕 | 国产xxx视频 | 蜜桃av噜噜一区二区三区小说 | 国产卡一卡二卡三无线乱码新区 | 俺也去在线视频 | 欧美性激情 | 视频免费观看在线 | 欧美精品在线视频 | 污污视频免费看 | 男女免费看 | 成人av福利| 日本呦呦 | 国产一级爽片 | 91在线影院| 久久久久亚洲av无码麻豆 | 日韩专区视频 | 成人做爰视频www网站小优视频 | 综合色婷婷一区二区亚洲欧美国产 | 一本大道综合伊人精品热热 | 日韩一区av在线 | 天堂在线免费观看视频 | 久久这里只有精品首页 | 亚洲欧洲精品一区 | 韩国bj大尺度vip福利网站 | 噼里啪啦免费高清看 | 禁止18在线观看 | 黄色三级三级三级三级 | 欧美黄色一级网站 | 深夜福利网站 | 粉嫩av网| 国产一在线| 国产探花一区二区三区 | 日日夜夜免费精品视频 | 成人在线影片 | 中文字幕一区二区三区在线播放 | 思思久久久 | 国产人人射 | 精品成人无码一区二区三区 | 国产精品日韩一区 | 少妇野外性xx老女人野外性xx | 麻豆成人91精品二区三区 | 久久亚洲一区 | 男男啪啪无遮挡 | 蜜桃av免费 | 国产中文字幕第一页 | 不卡在线一区二区 | 男人都懂的网站 | 国产激情在线视频 |