操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    最初由 發(fā)布

    請清風(fēng)大哥詳細(xì)說說...

    子類化技術(shù)基本概念(搜集自互聯(lián)網(wǎng))

    1.1 消息驅(qū)動(dòng)機(jī)制

    1. 消息機(jī)制

    是以消息驅(qū)動(dòng)的操作系統(tǒng), 消息提供了應(yīng)用程序與應(yīng)用程序以及應(yīng)用程序與系統(tǒng)之間進(jìn)行通訊的手段。

    系統(tǒng)將會(huì)維護(hù)一個(gè)或多個(gè)消息隊(duì)列,所有產(chǎn)生的消息都會(huì)被放入或是插入隊(duì)列中。系統(tǒng)會(huì)在隊(duì)列中取出每一條消息,根據(jù)消息的接收句柄而將該消息發(fā)送給擁有該窗口的程序的消息循環(huán)。每一個(gè)運(yùn)行的程序都有自己的消息循環(huán),在循環(huán)中得到屬于自己的消息并根據(jù)接收窗口的句柄調(diào)用相應(yīng)的窗口過程。而在沒有消息時(shí)消息循環(huán)就將控制權(quán)交給系統(tǒng)所以可以同時(shí)進(jìn)行多個(gè)任務(wù)。

    在16位的系統(tǒng)中只有一個(gè)消息隊(duì)列,所以系統(tǒng)必須等待當(dāng)前任務(wù)處理消息后才可以發(fā)送下一消息到相應(yīng)程序,如果一個(gè)程序陷如死循環(huán)或是耗時(shí)操作時(shí)系統(tǒng)就會(huì)得不到控制權(quán)。這種多任務(wù)系統(tǒng)也就稱為協(xié)同式的多任務(wù)系統(tǒng)。.X就是這種系統(tǒng)。

    而32位的系統(tǒng)中每一運(yùn)行的程序都會(huì)有一個(gè)消息隊(duì)列,所以系統(tǒng)可以在多個(gè)消息隊(duì)列中轉(zhuǎn)換而不必等待當(dāng)前程序完成消息處理就可以得到控制權(quán)。這種多任務(wù)系統(tǒng)就稱為搶先式的多任務(wù)系統(tǒng)。/NT就是這種系統(tǒng)。

    鉤子程序需要消息循環(huán)嗎_卸載消息鉤子_消息機(jī)制和鉤子程序用什么軟件好?

    2. 消息循環(huán)

    32位系統(tǒng)中有一個(gè)系統(tǒng)消息隊(duì)列,對于每一個(gè)正在執(zhí)行的應(yīng)用程序,系統(tǒng)為其建立一個(gè)“消息隊(duì)列”,即應(yīng)用程序隊(duì)列,用來存放該程序可能創(chuàng)建的各種窗口的消息。應(yīng)用程序中含有一段稱作“消息循環(huán)”的代碼,用來從消息隊(duì)列中檢索這些消息并把它們分發(fā)到相應(yīng)的窗口函數(shù)中。

    消息循環(huán)代碼是應(yīng)用程序中主函數(shù) ( )中類似如下的程序段:

    while((&&msg,NULL,NULL,NULL))

    { //從消息隊(duì)列中取得消息

    (&&msg);

    //檢索并生成字符消息

    (&&msg);

    //將消息發(fā)送給相應(yīng)的窗口函數(shù)

    }

    消息機(jī)制和鉤子程序用什么軟件好?_卸載消息鉤子_鉤子程序需要消息循環(huán)嗎

    由此可見,所謂“消息循環(huán)”,實(shí)際是程序循環(huán)。 應(yīng)用程序創(chuàng)建的每個(gè)窗口都在系統(tǒng)核心注冊一個(gè)相應(yīng)的窗口函數(shù),窗口函數(shù)程序代碼形式上是一個(gè)巨大的 語句,用以處理由消息循環(huán)發(fā)送到該窗口的消息,窗口函數(shù)由 采用消息驅(qū)動(dòng)的形式直接調(diào)用,而不是由應(yīng)用程序顯示調(diào)用的,窗口函數(shù)處理完消息后又將控制權(quán)返回給。

    3. 消息

    消息分為隊(duì)列消息(進(jìn)入線程的消息隊(duì)列)和非隊(duì)列消息(不進(jìn)入線程的消息隊(duì)列)。

    對于隊(duì)列消息,最常見的是鼠標(biāo)和鍵盤觸發(fā)的消息,例如,等消息;還有例如:、和。當(dāng)鼠標(biāo)、鍵盤事件被觸發(fā)后,相應(yīng)的鼠標(biāo)或鍵盤驅(qū)動(dòng)程序就會(huì)把這些事件轉(zhuǎn)換成相應(yīng)的消息,然后輸送到系統(tǒng)消息隊(duì)列,由系統(tǒng)負(fù)責(zé)把消息加入到相應(yīng)線程的消息隊(duì)列中,于是就有了消息循環(huán)(從消息隊(duì)列中讀取并派送消息)。

    還有一種是非隊(duì)列消息,他繞過系統(tǒng)隊(duì)列和消息隊(duì)列,直接將消息發(fā)送到窗口過程。例如,當(dāng)用戶激活一個(gè)窗口系統(tǒng)發(fā)送, , and 。創(chuàng)建窗口時(shí)發(fā)送消息。

    系統(tǒng)與應(yīng)用程序可通過函數(shù)將消息直接指派到一個(gè)應(yīng)用程序的消息隊(duì)列中,也可通過函數(shù)將消息直接發(fā)送給一個(gè)應(yīng)用程序的有關(guān)窗口函數(shù)。

    一個(gè)消息由一個(gè)消息名稱(UINT),和兩個(gè)參數(shù)(,)組成。

    4.窗口函數(shù)

    系統(tǒng)通過窗口句柄來在整個(gè)系統(tǒng)中唯一標(biāo)識一個(gè)窗口,發(fā)送一個(gè)消息時(shí)必須指定一個(gè)窗口句柄表明該消息由哪個(gè)窗口接收,每個(gè)窗口都有自己的窗口函數(shù),在窗口函數(shù)()中可以對消息進(jìn)行分析,對自己感興趣的消息進(jìn)行處理,為窗口編寫了默認(rèn)的窗口函數(shù),負(fù)責(zé)處理那些你不處理消息。

    5. 窗口函數(shù)的可重入性

    鉤子程序需要消息循環(huán)嗎_消息機(jī)制和鉤子程序用什么軟件好?_卸載消息鉤子

    窗口函數(shù)(他是個(gè)回調(diào)函數(shù))的代碼什么時(shí)候都可以被系統(tǒng)(調(diào)用者一般是模塊)調(diào)用。比如在窗口過程中,向自己的窗口(***);那么執(zhí)行過程是怎樣的?

    我們知道,是要等到消息發(fā)送并被目標(biāo)窗口執(zhí)行完之后才返回的。那么窗口在處理消息,然后又等待剛才發(fā)送到本窗口的消息被處理后之后(返回)才繼續(xù)往下執(zhí)行,程序不就互相死鎖了嗎?其實(shí)是不會(huì)的。設(shè)計(jì)一套適合的算法,他判斷如果發(fā)送的消息是屬于本線程創(chuàng)建的窗口的,那么直接由模塊調(diào)用窗口函數(shù)(可能就有窗口重入),并將消息的處理結(jié)果結(jié)果返回。這樣做體現(xiàn)了窗口重入。上面的例子,我們調(diào)用(***)發(fā)送消息到本窗口,那么窗口過程再次被調(diào)用,處理完消息之后將結(jié)果返回,然后之后的程序接著執(zhí)行。對于非隊(duì)列消息,如果沒有窗口重入,不知道會(huì)是什么樣子。

    NOTE: 由于窗口的可重入性。在win32 SDK程序中應(yīng)盡量少用全局變量和靜態(tài)變量鉤子程序需要消息循環(huán)嗎,因?yàn)樵诖翱诤瘮?shù)執(zhí)行過程中可能窗口重入,如果重入后將這些變量改了,但你的程序在窗口重入返回之后繼續(xù)執(zhí)行,可能就是使用已經(jīng)改變的全局或靜態(tài)變量。在MFC中(所有窗口的窗口函數(shù)基本上都是),按照類的思想進(jìn)行了組織,一般變量都是類中的,好管理的多。

    6.可重入函數(shù)

    可重入函數(shù),簡單說,就是可以被中斷的函數(shù):你可以在這個(gè)函數(shù)執(zhí)行的任何時(shí)候中斷他的運(yùn)行,在OS的調(diào)度下去執(zhí)行另外一段代碼而不會(huì)出現(xiàn)什么錯(cuò)誤。而不可重入的函數(shù)由于使用了一些系統(tǒng)資源,比如全局變量區(qū),中斷向量表等等,所以他如果被中斷的話,可能出現(xiàn)問題,所以這類函數(shù)是不能運(yùn)行在多任務(wù)環(huán)境下的。

    1.2 子類化的概念

    是一個(gè)基于消息的系統(tǒng),消息在的對象之間進(jìn)行著傳遞。每個(gè)窗口都有默認(rèn)的窗口函數(shù)來進(jìn)行對窗口消息的處理.子類化技術(shù)就是替換窗口的窗口函數(shù)為自己定義的函數(shù)的技術(shù)。

    子類化和的鉤子機(jī)制存在于消息系統(tǒng)之中,我們可以利用這些機(jī)制來操縱、修改甚至丟棄那些在操作系統(tǒng)或是進(jìn)程中傳遞的消息,以求改變系統(tǒng)的一些行為。子類化技術(shù)用來截取窗口或控件之間的消息,當(dāng)然是消息在到達(dá)目的窗口之前完成的操作。這些被截獲的消息既可以保留也可以修改它們的狀態(tài),之后就繼續(xù)發(fā)送到目的地。

    子類化技術(shù)實(shí)現(xiàn)了一些正常情況下無法實(shí)現(xiàn)的功能,試想鼠標(biāo)右鍵單擊,系統(tǒng)默認(rèn)彈出Undo、Cut、Copy、Paste等菜單,我們就可利用子類化技術(shù)來改變這個(gè)系統(tǒng)菜單。

    簡單的說,子類化就是創(chuàng)建一個(gè)新的窗口消息處理過程,并將其插入到原先的默認(rèn)窗口消息處理過程之前。子類化分為三類:實(shí)例子類化( )―從窗口或控件的單一實(shí)例截獲消息,這種子類化技術(shù)最普遍;全局子類化( )―能夠截獲從相同的窗口類創(chuàng)建出來的多個(gè)窗口或控件的消息;超類化()―和全局子類化很類似,區(qū)別在于可以應(yīng)用在新的窗口類上面。

    卸載消息鉤子_鉤子程序需要消息循環(huán)嗎_消息機(jī)制和鉤子程序用什么軟件好?

    1.3 子類化的限制

    子類化是對已存在的某一窗口產(chǎn)生作用,所以其作用范圍只有這一窗,又由于可能不清楚該類怎樣使用額外的類和窗口字節(jié)鉤子程序需要消息循環(huán)嗎,所以不能保證正確使用這些空間存儲信息,最后,因窗口已存在,所以新的窗口過程永遠(yuǎn)不會(huì)接收到第一個(gè)WM_消息或其他以前的消息。子類化只適用于改變極少數(shù)窗口行為和屬性時(shí)使用。

    1.4 子類化的實(shí)現(xiàn)

    函數(shù)的作用是在窗口結(jié)構(gòu)中為指定的窗口設(shè)置屬性,利用它我們來改變窗口的屬性參數(shù),其函數(shù)原型如下:

    LONG (

    HWND hWnd, // of

    int , // of value to set

    LONG // new value

    );

    在默認(rèn)狀態(tài)下操作系統(tǒng)會(huì)指定一個(gè)窗口函數(shù)來接受和處理消息,而通過使用函數(shù)改變窗口函數(shù)的地址使它指向我們自己寫的一個(gè)函數(shù),這樣消息就會(huì)轉(zhuǎn)由函數(shù)接收和處理。

    鉤子程序需要消息循環(huán)嗎_消息機(jī)制和鉤子程序用什么軟件好?_卸載消息鉤子

    (

    HWND hwnd, // to

    UINT uMsg, //

    ,// first

    //

    );

    1.5 跨進(jìn)程子類化

    只要對其它進(jìn)程中的目標(biāo)窗口進(jìn)行子類化就可以實(shí)現(xiàn)對其消息的攔載監(jiān)視.但是在WIN32下,每一個(gè)進(jìn)程都有自己獨(dú)立的內(nèi)存空間,新的窗口函數(shù)必須和目標(biāo)窗口在同一個(gè)進(jìn)程內(nèi),直接使用(其它進(jìn)程中窗口的句柄, , 新窗口函數(shù))就會(huì)失敗,所以就要想辦法把我們的窗口函數(shù)代碼放到目標(biāo)進(jìn)程內(nèi)。一般有二個(gè)辦法:

    一是使用在目標(biāo)進(jìn)程內(nèi)建立線程,但這函數(shù)只在NT及以上操作系統(tǒng)實(shí)現(xiàn),而且還要涉及到API地址重定位等問題,比較麻煩。

    另一方法是使用HOOK技術(shù)。大家都知道,對其它進(jìn)程進(jìn)行HOOK時(shí),此進(jìn)程會(huì)自動(dòng)加載HOOK過程所在的DLL,如果我們把窗口函數(shù)也放在DLL中,那窗口函數(shù)就相當(dāng)于加載到了目標(biāo)進(jìn)程的地址空間中了,簡單易行。

網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權(quán)所有