亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種防止底層驅(qū)動(dòng)攔截消息的方法

文檔序號(hào):6637080閱讀:365來(lái)源:國(guó)知局
一種防止底層驅(qū)動(dòng)攔截消息的方法
【專利摘要】本發(fā)明公開(kāi)了一種防止底層驅(qū)動(dòng)攔截消息的方法,涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】。所述方法包括,將查找到的系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象與創(chuàng)建的鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象鏈接并加入設(shè)備驅(qū)動(dòng)鏈中;修改硬件消息中的所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元,并設(shè)置完成函數(shù),以及將硬件消息發(fā)送給系統(tǒng)鍵盤驅(qū)動(dòng);通過(guò)上述修改,當(dāng)所述完成函數(shù)被調(diào)用時(shí),則所述鍵盤過(guò)濾驅(qū)動(dòng)對(duì)所述硬件消息中的數(shù)據(jù)進(jìn)行加密,然后將硬件消息返回給系統(tǒng)。本發(fā)明提供的方法能夠讓承載鍵盤輸入數(shù)據(jù)的硬件消息跳過(guò)底層的惡意驅(qū)動(dòng),從而達(dá)到防攔截和保證鍵盤輸入安全的目的。
【專利說(shuō)明】一種防止底層驅(qū)動(dòng)攔截消息的方法

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】,尤其涉及一種防止底層驅(qū)動(dòng)攔截消息的方法。

【背景技術(shù)】
[0002] 隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,對(duì)信息安全的要求也越來(lái)越高,而越來(lái)越多的針對(duì) 鍵盤輸入環(huán)節(jié)的攔截技術(shù)使得計(jì)算機(jī)的信息安全技術(shù)面臨嚴(yán)峻考驗(yàn)。針對(duì)鍵盤輸入的攔截 技術(shù)分為應(yīng)用層攔截和驅(qū)動(dòng)層攔截,驅(qū)動(dòng)層較應(yīng)用層更底層,也更先攔截到鍵盤輸入。
[0003] 由于Windows的驅(qū)動(dòng)架構(gòu)是分層處理的,驅(qū)動(dòng)架構(gòu)中的系統(tǒng)鍵盤驅(qū)動(dòng)為Windows 系統(tǒng)自帶,驅(qū)動(dòng)架構(gòu)中的第三方鍵盤過(guò)濾驅(qū)動(dòng)和系統(tǒng)鍵盤驅(qū)動(dòng)之間可能會(huì)存在其他惡意驅(qū) 動(dòng),這樣驅(qū)動(dòng)架構(gòu)中位于底層的其他驅(qū)動(dòng)會(huì)先于其上層的鍵盤過(guò)濾驅(qū)動(dòng)獲得硬件消息(專 業(yè)術(shù)語(yǔ)叫IRP),為了防止位于底層的惡意的其他驅(qū)動(dòng)對(duì)位于其上層的鍵盤過(guò)濾驅(qū)動(dòng)與位于 其底層的系統(tǒng)鍵盤驅(qū)動(dòng)之間傳遞的IRP進(jìn)行攔截和篡改,目前現(xiàn)有技術(shù)中廣泛使用的防攔 截方法是通過(guò)加密技術(shù)使得底層的惡意驅(qū)動(dòng)對(duì)IRP的攔截和篡改失敗。但目前這種防攔截 方法在加密信息被泄露的情況下是無(wú)法達(dá)到預(yù)期效果的。因此,發(fā)明一種讓IRP跳過(guò)底層 驅(qū)動(dòng),以達(dá)到防止底層驅(qū)動(dòng)攔截這一目的的防攔截方法是發(fā)明人亟待解決的問(wèn)題。


【發(fā)明內(nèi)容】

[0004] 為解決現(xiàn)有技術(shù)中存在的問(wèn)題,本發(fā)明提出了一種通過(guò)跳過(guò)底層驅(qū)動(dòng)實(shí)現(xiàn)的防止 底層驅(qū)動(dòng)攔截消息的方法。
[0005] 本發(fā)明采用的技術(shù)方案如下:一種防止底層驅(qū)動(dòng)攔截消息的方法,包括步驟A至 步驟C :
[0006] 步驟A :當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)被系統(tǒng)加載時(shí),所述鍵盤過(guò)濾驅(qū)動(dòng)執(zhí)行:查找到系統(tǒng)鍵盤 驅(qū)動(dòng)的設(shè)備對(duì)象,創(chuàng)建鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象,分配設(shè)備擴(kuò)展內(nèi)存來(lái)存儲(chǔ)系統(tǒng)鍵盤驅(qū)動(dòng) 的設(shè)備對(duì)象指針,將創(chuàng)建的所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象與所述系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象 進(jìn)行鏈接并加入驅(qū)動(dòng)設(shè)備鏈中;
[0007] 步驟B :當(dāng)所述驅(qū)動(dòng)設(shè)備鏈中的所述鍵盤過(guò)濾驅(qū)動(dòng)收到硬件消息時(shí),所述鍵盤過(guò) 濾驅(qū)動(dòng)執(zhí)行:根據(jù)所述硬件消息找到所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元,將找 到的堆棧單元的信息拷貝到下一層驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元中,并在所述下一層驅(qū) 動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元中設(shè)置完成函數(shù),然后根據(jù)所述設(shè)備擴(kuò)展內(nèi)存中的所述系統(tǒng) 鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象指針找到系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象,發(fā)送所述硬件消息給所述系統(tǒng)鍵 盤驅(qū)動(dòng)的設(shè)備對(duì)象;
[0008] 步驟C :當(dāng)所述完成函數(shù)被調(diào)用時(shí),所述鍵盤過(guò)濾驅(qū)動(dòng)執(zhí)行:對(duì)所述硬件消息中的 數(shù)據(jù)進(jìn)行加密,然后將硬件消息返回給系統(tǒng)。
[0009] 上述步驟A所述查找到系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象的具體過(guò)程為:
[0010] 步驟al :調(diào)用聲明函數(shù)查找鍵盤驅(qū)動(dòng)對(duì)象;
[0011] 步驟a2 :根據(jù)所述聲明函數(shù)返回的鍵盤驅(qū)動(dòng)對(duì)象指針獲取鍵盤驅(qū)動(dòng)對(duì)象,解析所 述鍵盤驅(qū)動(dòng)對(duì)象,獲取鍵盤驅(qū)動(dòng)對(duì)象的第一個(gè)設(shè)備對(duì)象指針作為當(dāng)前設(shè)備對(duì)象指針;
[0012] 步驟a3 :判斷當(dāng)前設(shè)備對(duì)象指針是否為空,是則結(jié)束,否則執(zhí)行步驟a4 ;
[0013] 步驟a4 :根據(jù)當(dāng)前設(shè)備對(duì)象指針獲取當(dāng)前設(shè)備對(duì)象;
[0014] 步驟a5 :從當(dāng)前設(shè)備對(duì)象中獲取上層設(shè)備對(duì)象指針;
[0015] 步驟a6 :判斷上層設(shè)備對(duì)象指針是否為空,是則執(zhí)行步驟a7,否則執(zhí)行步驟a8 ;
[0016] 步驟a7 :解析所述鍵盤驅(qū)動(dòng)對(duì)象,獲取鍵盤驅(qū)動(dòng)對(duì)象的下一個(gè)設(shè)備對(duì)象指針作為 當(dāng)前設(shè)備對(duì)象指針,返回執(zhí)行步驟a3,
[0017] 步驟a8 :根據(jù)上層設(shè)備對(duì)象指針獲取上層設(shè)備對(duì)象,并將上層設(shè)備對(duì)象作為當(dāng)前 設(shè)備對(duì)象,解析當(dāng)前設(shè)備對(duì)象對(duì)應(yīng)的驅(qū)動(dòng)對(duì)象,獲取驅(qū)動(dòng)名稱;
[0018] 步驟a9 :判斷獲取到的驅(qū)動(dòng)名稱是否為預(yù)設(shè)驅(qū)動(dòng)名,是則執(zhí)行步驟alO,否則返回 執(zhí)行步驟a5 ;
[0019] 步驟alO :將當(dāng)前設(shè)備對(duì)象記錄為系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象。
[0020] 所述步驟alO之后還包括:判斷所述系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象指針是否為空,是 則返回執(zhí)行步驟a7,否則執(zhí)行步驟A中所述創(chuàng)建鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象,分配設(shè)備擴(kuò)展 內(nèi)存來(lái)存儲(chǔ)系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象指針。
[0021] 上述步驟A所述將創(chuàng)建的所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象與所述系統(tǒng)鍵盤驅(qū)動(dòng)的 設(shè)備對(duì)象進(jìn)行鏈接并加入驅(qū)動(dòng)設(shè)備鏈中,具體為:調(diào)用IoAttachDeviceToDeviceStack將 創(chuàng)建好的所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象與所述系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象進(jìn)行鏈接,然后將 創(chuàng)建好的所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象加入驅(qū)動(dòng)設(shè)備鏈中。
[0022] 上述步驟B之前還包括:系統(tǒng)創(chuàng)建硬件消息,發(fā)送所述硬件消息到所述驅(qū)動(dòng)設(shè) 備鏈;所述步驟B與所述步驟C之間還包括所述系統(tǒng)鍵盤驅(qū)動(dòng)將接收到的所述硬件消息 加入隊(duì)列;當(dāng)系統(tǒng)收到用戶按鍵輸入數(shù)據(jù)時(shí),系統(tǒng)調(diào)用所述系統(tǒng)鍵盤驅(qū)動(dòng),將所述用戶 按鍵輸入數(shù)據(jù)傳給所述系統(tǒng)鍵盤驅(qū)動(dòng),所述系統(tǒng)鍵盤驅(qū)動(dòng)從所述隊(duì)列中獲取所述硬件消 息,將所述用戶按鍵輸入數(shù)據(jù)填充到所述硬件消息中,系統(tǒng)遍歷所述硬件消息對(duì)應(yīng)的堆 棧找到設(shè)置了所述完成函數(shù)的堆棧單元,并調(diào)用該堆棧單元中的所述完成函數(shù)。所述系 統(tǒng)遍歷所述硬件消息對(duì)應(yīng)的堆棧找到設(shè)置了所述完成函數(shù)的堆棧單元,具體為系統(tǒng)調(diào)用 IoCompleteRequest查找到設(shè)置了所述完成函數(shù)的堆棧單元。
[0023] 上述步驟B所述根據(jù)所述硬件消息找到所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆 棧單元,將找到的堆棧單元的信息拷貝到下一層驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元中,并在 所述下一層驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元中設(shè)置完成函數(shù),具體為:
[0024] 步驟bl :根據(jù)所述硬件消息中包含的指針參數(shù)獲取所述硬件消息對(duì)應(yīng)的堆棧和 鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元;
[0025] 步驟b2 :調(diào)用IoCopyCurrentlrpStackLocationToNext將所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè) 備對(duì)象對(duì)應(yīng)的堆棧單元的信息拷貝到下一層驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元中;
[0026] 步驟b3 :調(diào)用IoSetCompletionRoutine在所述下一層驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆 棧單元中設(shè)置完成函數(shù)。
[0027] 上述堆棧單元的信息包括用于讀取所述硬件消息的參數(shù)。
[0028] 上述步驟B所述發(fā)送所述硬件消息給所述系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象具體為:將所 述系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象指針和所述硬件消息作為傳入?yún)?shù),調(diào)用IoCallDriver將所 述硬件消息發(fā)送給所述系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象。
[0029] 本發(fā)明的有益效果是:即便Windows的驅(qū)動(dòng)架構(gòu)中在鍵盤過(guò)濾驅(qū)動(dòng)的下方有若干 惡意驅(qū)動(dòng)進(jìn)行攔截,使用本發(fā)明的技術(shù),這些惡意驅(qū)動(dòng)都將被跳過(guò),使得惡意驅(qū)動(dòng)無(wú)法參與 其中工作,從而保證鍵盤輸入的安全操作。

【專利附圖】

【附圖說(shuō)明】
[0030] 圖1是本發(fā)明實(shí)施例1提供的一種防止底層驅(qū)動(dòng)攔截消息的方法的初始化階段的 流程圖;
[0031] 圖2是本發(fā)明實(shí)施例1提供的一種防止底層驅(qū)動(dòng)攔截消息的方法的修改IRP對(duì)應(yīng) 的堆棧階段的流程圖;
[0032] 圖3是本發(fā)明實(shí)施例1提供的一種防止底層驅(qū)動(dòng)攔截消息的方法的處理IRP階段 的流程圖。

【具體實(shí)施方式】
[0033] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖和具體實(shí)施例對(duì) 本發(fā)明作進(jìn)一步地詳細(xì)描述。
[0034] 本發(fā)明提供的實(shí)施例是基于Windows的驅(qū)動(dòng)架構(gòu)實(shí)現(xiàn)的,Windows的驅(qū)動(dòng)架構(gòu)是 分層處理的,系統(tǒng)鍵盤驅(qū)動(dòng)為Windows系統(tǒng)自帶,名稱為預(yù)設(shè)驅(qū)動(dòng)名,例如預(yù)設(shè)驅(qū)動(dòng)名為 Kbdclass或i8042prt。在Windows的驅(qū)動(dòng)架構(gòu)中驅(qū)動(dòng)設(shè)備鏈從上至下分層有鍵盤過(guò)濾驅(qū) 動(dòng)、一個(gè)或多個(gè)其他底層驅(qū)動(dòng)、系統(tǒng)鍵盤驅(qū)動(dòng)。
[0035] 實(shí)施例1
[0036] 本實(shí)施例1提供的一種防止底層驅(qū)動(dòng)攔截消息的方法,主要包括三個(gè)階段,分別 為:
[0037] L初始化階段:
[0038] 系統(tǒng)加載鍵盤過(guò)濾驅(qū)動(dòng),所述鍵盤過(guò)濾驅(qū)動(dòng)執(zhí)行以下操作:查找到系統(tǒng)鍵盤驅(qū)動(dòng) 的設(shè)備對(duì)象,創(chuàng)建鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象,分配設(shè)備擴(kuò)展內(nèi)存來(lái)存儲(chǔ)系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè) 備對(duì)象指針,將創(chuàng)建的鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象與系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象進(jìn)行鏈接并加 入驅(qū)動(dòng)設(shè)備鏈中。
[0039] 本發(fā)明實(shí)施例中提及的所述系統(tǒng)是指計(jì)算機(jī)操作系統(tǒng),例如,Windows操作系統(tǒng)。
[0040] 2.修改IRP對(duì)應(yīng)的堆棧階段:
[0041] 當(dāng)系統(tǒng)收到按鍵觸發(fā)時(shí),系統(tǒng)創(chuàng)建IRP,發(fā)送IRP到驅(qū)動(dòng)設(shè)備鏈,當(dāng)驅(qū)動(dòng)設(shè)備鏈中 的鍵盤過(guò)濾驅(qū)動(dòng)接收到所述IRP時(shí),執(zhí)行以下操作:將IRP中的所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì) 象對(duì)應(yīng)的堆棧單元的信息拷貝到下一層驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元中,并在所述下一 層驅(qū)動(dòng)對(duì)應(yīng)的堆棧單元中設(shè)置完成函數(shù),然后根據(jù)擴(kuò)展內(nèi)存中的系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象 指針找到系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象,發(fā)送IRP給系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象,所述系統(tǒng)鍵盤 驅(qū)動(dòng)將接收到的IRP加入隊(duì)列。
[0042] 3.處理IRP階段:
[0043] 當(dāng)系統(tǒng)收到用戶按鍵輸入數(shù)據(jù)時(shí),系統(tǒng)調(diào)用所述系統(tǒng)鍵盤驅(qū)動(dòng)將所述用戶按鍵輸 入數(shù)據(jù)傳給所述系統(tǒng)鍵盤驅(qū)動(dòng),所述系統(tǒng)鍵盤驅(qū)動(dòng)從所述隊(duì)列中獲取所述IRP,將所述用戶 按鍵輸入數(shù)據(jù)填充到所述IRP中,然后系統(tǒng)遍歷所述IRP對(duì)應(yīng)的堆棧找到設(shè)置了所述完成 函數(shù)的當(dāng)前堆棧單元,并調(diào)用所述完成函數(shù);當(dāng)所述完成函數(shù)被調(diào)用時(shí),所述鍵盤過(guò)濾驅(qū)動(dòng) 執(zhí)行以下操作:對(duì)所述IRP中的用戶輸入數(shù)據(jù)加密后將所述IRP返回給系統(tǒng)。
[0044] 從上述過(guò)程可明顯看出,其他底層驅(qū)動(dòng)并未參與工作,從而達(dá)到跳過(guò)其他底層驅(qū) 動(dòng),將加密操作后的IRP直接返回給系統(tǒng)的目的。
[0045] 本實(shí)施例提供一種防止底層驅(qū)動(dòng)攔截消息的方法的初始化階段的具體過(guò)程,如圖 1所示,包括:
[0046] 步驟101 :當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)被系統(tǒng)加載時(shí),調(diào)用聲明函數(shù) ObReferenceObjectByName查找鍵盤驅(qū)動(dòng)對(duì)象;
[0047] 具體的,本發(fā)明提供的方法可適用于USB和PS2兩種鍵盤,若是USB鍵盤,則本步 驟查找的是Kbdhid,若是PS2鍵盤,則本步驟查找的是i8042prt。
[0048] 本實(shí)施例中以USB鍵盤為優(yōu)選實(shí)施例進(jìn)行介紹,本步驟具體為:調(diào)用 ObReferenceObjectByName 查找 Kbdhid 驅(qū)動(dòng)對(duì)象。
[0049] 步驟102 :根據(jù)所述聲明函數(shù)的返回值判斷鍵盤驅(qū)動(dòng)對(duì)象指針是否為空,是則返 回失敗,結(jié)束,否則執(zhí)行步驟103 ;
[0050] 本實(shí)施例中優(yōu)選的,判斷返回值是否為NULL,是則表示鍵盤驅(qū)動(dòng)對(duì)象指針為空,返 回失敗,結(jié)束,否則返回值為鍵盤驅(qū)動(dòng)對(duì)象指針,執(zhí)行步驟103。
[0051] 步驟103 :根據(jù)鍵盤驅(qū)動(dòng)對(duì)象指針獲取鍵盤驅(qū)動(dòng)對(duì)象,解析鍵盤驅(qū)動(dòng)對(duì)象,獲取鍵 盤驅(qū)動(dòng)對(duì)象的第一個(gè)設(shè)備對(duì)象指針作為當(dāng)前設(shè)備對(duì)象指針;
[0052] 本實(shí)施例中具體的,驅(qū)動(dòng)對(duì)象、設(shè)備對(duì)象的形態(tài)都是以結(jié)構(gòu)體的方式存儲(chǔ)在系統(tǒng) 內(nèi)存中的,例如,本步驟獲取的是Kbdhid驅(qū)動(dòng)對(duì)象,其結(jié)構(gòu)體如下:
[0053]

【權(quán)利要求】
1. 一種防止底層驅(qū)動(dòng)攔截消息的方法,其特征是: 步驟A :當(dāng)鍵盤過(guò)濾驅(qū)動(dòng)被系統(tǒng)加載時(shí),所述鍵盤過(guò)濾驅(qū)動(dòng)執(zhí)行:查找到系統(tǒng)鍵盤驅(qū)動(dòng) 的設(shè)備對(duì)象,創(chuàng)建鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象,分配設(shè)備擴(kuò)展內(nèi)存來(lái)存儲(chǔ)系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè) 備對(duì)象指針,將創(chuàng)建的所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象與所述系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象進(jìn)行 鏈接并加入驅(qū)動(dòng)設(shè)備鏈中; 步驟B :當(dāng)所述驅(qū)動(dòng)設(shè)備鏈中的所述鍵盤過(guò)濾驅(qū)動(dòng)收到硬件消息時(shí),所述鍵盤過(guò)濾驅(qū) 動(dòng)執(zhí)行:根據(jù)所述硬件消息找到所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元,將找到的 堆棧單元的信息拷貝到下一層驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元中,并在所述下一層驅(qū)動(dòng)的 設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元中設(shè)置完成函數(shù),然后根據(jù)所述設(shè)備擴(kuò)展內(nèi)存中的所述系統(tǒng)鍵盤 驅(qū)動(dòng)的設(shè)備對(duì)象指針找到系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象,發(fā)送所述硬件消息給所述系統(tǒng)鍵盤驅(qū) 動(dòng)的設(shè)備對(duì)象; 步驟C :當(dāng)所述完成函數(shù)被調(diào)用時(shí),所述鍵盤過(guò)濾驅(qū)動(dòng)執(zhí)行:對(duì)所述硬件消息中的數(shù)據(jù) 進(jìn)行加密,然后將硬件消息返回給系統(tǒng)。
2. 根據(jù)權(quán)利要求1所述的方法,其特征是:所述查找到系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象的具 體過(guò)程為: 步驟al :調(diào)用聲明函數(shù)查找鍵盤驅(qū)動(dòng)對(duì)象; 步驟a2 :根據(jù)所述聲明函數(shù)返回的鍵盤驅(qū)動(dòng)對(duì)象指針獲取鍵盤驅(qū)動(dòng)對(duì)象,解析所述鍵 盤驅(qū)動(dòng)對(duì)象,獲取鍵盤驅(qū)動(dòng)對(duì)象的第一個(gè)設(shè)備對(duì)象指針作為當(dāng)前設(shè)備對(duì)象指針; 步驟a3 :判斷當(dāng)前設(shè)備對(duì)象指針是否為空,是則結(jié)束,否則執(zhí)行步驟a4 ; 步驟a4 :根據(jù)當(dāng)前設(shè)備對(duì)象指針獲取當(dāng)前設(shè)備對(duì)象; 步驟a5 :從當(dāng)前設(shè)備對(duì)象中獲取上層設(shè)備對(duì)象指針; 步驟a6 :判斷上層設(shè)備對(duì)象指針是否為空,是則執(zhí)行步驟a7,否則執(zhí)行步驟a8 ; 步驟a7 :解析所述鍵盤驅(qū)動(dòng)對(duì)象,獲取鍵盤驅(qū)動(dòng)對(duì)象的下一個(gè)設(shè)備對(duì)象指針作為當(dāng)前 設(shè)備對(duì)象指針,返回執(zhí)行步驟a3, 步驟a8 :根據(jù)上層設(shè)備對(duì)象指針獲取上層設(shè)備對(duì)象,并將上層設(shè)備對(duì)象作為當(dāng)前設(shè)備 對(duì)象,解析當(dāng)前設(shè)備對(duì)象對(duì)應(yīng)的驅(qū)動(dòng)對(duì)象,獲取驅(qū)動(dòng)名稱; 步驟a9 :判斷獲取到的驅(qū)動(dòng)名稱是否為預(yù)設(shè)驅(qū)動(dòng)名,是則執(zhí)行步驟alO,否則返回執(zhí)行 步驟a5 ; 步驟alO :將當(dāng)前設(shè)備對(duì)象記錄為系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象。
3. 根據(jù)權(quán)利要求2所述的方法,其特征是:所述步驟alO之后還包括:判斷所述系統(tǒng)鍵 盤驅(qū)動(dòng)的設(shè)備對(duì)象指針是否為空,是則返回執(zhí)行步驟a7,否則執(zhí)行步驟A中所述創(chuàng)建鍵盤 過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象,分配設(shè)備擴(kuò)展內(nèi)存來(lái)存儲(chǔ)系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象指針。
4. 根據(jù)權(quán)利要求1所述的方法,其特征是:所述將創(chuàng)建的所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè) 備對(duì)象與所述系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象進(jìn)行鏈接并加入驅(qū)動(dòng)設(shè)備鏈中,具體為:調(diào)用 IoAttachDeviceToDeviceStack將創(chuàng)建好的所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象與所述系統(tǒng)鍵盤 驅(qū)動(dòng)的設(shè)備對(duì)象進(jìn)行鏈接,然后將創(chuàng)建好的所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象加入驅(qū)動(dòng)設(shè)備鏈 中。
5. 根據(jù)權(quán)利要求1所述的方法,其特征是:所述步驟B之前還包括:系統(tǒng)創(chuàng)建硬件消 息,發(fā)送所述硬件消息到所述驅(qū)動(dòng)設(shè)備鏈; 所述步驟B與所述步驟C之間還包括所述系統(tǒng)鍵盤驅(qū)動(dòng)將接收到的所述硬件消息加入 隊(duì)列;當(dāng)系統(tǒng)收到用戶按鍵輸入數(shù)據(jù)時(shí),系統(tǒng)調(diào)用所述系統(tǒng)鍵盤驅(qū)動(dòng),將所述用戶按鍵輸入 數(shù)據(jù)傳給所述系統(tǒng)鍵盤驅(qū)動(dòng),所述系統(tǒng)鍵盤驅(qū)動(dòng)從所述隊(duì)列中獲取所述硬件消息,將所述 用戶按鍵輸入數(shù)據(jù)填充到所述硬件消息中,系統(tǒng)遍歷所述硬件消息對(duì)應(yīng)的堆棧找到設(shè)置了 所述完成函數(shù)的堆棧單元,并調(diào)用該堆棧單元中的所述完成函數(shù)。
6. 根據(jù)權(quán)利要求1所述的方法,其特征是:所述根據(jù)所述硬件消息找到所述鍵盤過(guò)濾 驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元,將找到的堆棧單元的信息拷貝到下一層驅(qū)動(dòng)的設(shè)備對(duì)象 對(duì)應(yīng)的堆棧單元中,并在所述下一層驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元中設(shè)置完成函數(shù),具 體為: 步驟bl :根據(jù)所述硬件消息中包含的指針參數(shù)獲取所述硬件消息對(duì)應(yīng)的堆棧和鍵盤 過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元; 步驟b2 :調(diào)用IoCopyCurrentlrpStackLocationToNext將所述鍵盤過(guò)濾驅(qū)動(dòng)的設(shè)備對(duì) 象對(duì)應(yīng)的堆棧單元的信息拷貝到下一層驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單元中; 步驟b3 :調(diào)用IoSetCompletionRoutine在所述下一層驅(qū)動(dòng)的設(shè)備對(duì)象對(duì)應(yīng)的堆棧單 元中設(shè)置完成函數(shù)。
7. 根據(jù)權(quán)利要求6所述的方法,其特征是:所述堆棧單元的信息包括用于讀取所述硬 件消息的參數(shù)。
8. 根據(jù)權(quán)利要求1所述的方法,其特征是:所述發(fā)送所述硬件消息給所述系統(tǒng)鍵盤驅(qū) 動(dòng)的設(shè)備對(duì)象具體為:將所述系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象指針和所述硬件消息作為傳入?yún)?數(shù),調(diào)用IoCallDriver將所述硬件消息發(fā)送給所述系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象。
9. 根據(jù)權(quán)利要求5所述的方法,其特征是:所述系統(tǒng)遍歷所述硬件消息對(duì)應(yīng)的堆棧找 到設(shè)置了所述完成函數(shù)的堆棧單元,具體為系統(tǒng)調(diào)用IoCompleteRequest查找到設(shè)置了所 述完成函數(shù)的堆棧單元。
10. 根據(jù)權(quán)利要求5所述的方法,其特征是:所述分配設(shè)備擴(kuò)展內(nèi)存來(lái)存儲(chǔ)系統(tǒng)鍵盤驅(qū) 動(dòng)的設(shè)備對(duì)象指針之后還包括系統(tǒng)將系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象引用計(jì)數(shù)加1,所述系統(tǒng)創(chuàng) 建硬件消息之前還包括判斷系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象引用計(jì)數(shù)是否大于1,是則創(chuàng)建所述 硬件消息,否則結(jié)束。
11. 根據(jù)權(quán)利要求10所述的方法,其特征是:所述將系統(tǒng)鍵盤驅(qū)動(dòng)的設(shè)備對(duì)象引用計(jì) 數(shù)加1具體為通過(guò)調(diào)用ObReferenceObjectByPointer實(shí)現(xiàn)。
【文檔編號(hào)】G06F9/44GK104360869SQ201410725777
【公開(kāi)日】2015年2月18日 申請(qǐng)日期:2014年12月3日 優(yōu)先權(quán)日:2014年12月3日
【發(fā)明者】陸舟, 于華章 申請(qǐng)人:飛天誠(chéng)信科技股份有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1