2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、直接訪問(wèn)鍵盤(pán)控制芯片獲取鍵盤(pán)記錄鍵盤(pán)是用戶(hù)和機(jī)器之間主要的硬件接口,看看鍵盤(pán)上的那些鍵就可知道它有多么的復(fù)雜了。鍵盤(pán)是我們隱私的源泉,我們各種信息的傳遞都要通過(guò)它。作為用戶(hù)表現(xiàn)信息的媒介,很多懷有惡意目的的人都想截取我們的鍵盤(pán)輸入。目前有很多方法可以做到,比如全局鉤子、GetKeyboardStatus()、驅(qū)動(dòng)過(guò)濾鉤子等,但是如果要截取像QQ這種Hook鍵盤(pán)中斷處理程序的保護(hù)技術(shù),這些方法都顯得無(wú)能為力。為此,我將為大家介紹一種直接訪

2、問(wèn)鍵盤(pán)控制芯片的方法,來(lái)實(shí)現(xiàn)對(duì)鍵盤(pán)輸入數(shù)據(jù)的最底層的讀取。如果我們知道了硬件的輸入輸出地址,就可以直接對(duì)它們進(jìn)行訪問(wèn)了。鍵盤(pán)上有一個(gè)稱(chēng)為鍵盤(pán)編碼器的處理器(Intel8048或兼容芯片)專(zhuān)門(mén)用來(lái)掃描收集所有按鍵按下和松開(kāi)的狀態(tài)數(shù)據(jù)(即掃描碼)。當(dāng)一個(gè)鍵被按下時(shí),鍵盤(pán)發(fā)送的掃描碼稱(chēng)為接通掃描碼(Makecode),或簡(jiǎn)稱(chēng)為接通碼;當(dāng)一個(gè)被按下的鍵放開(kāi)時(shí)發(fā)送的掃描碼被稱(chēng)為斷開(kāi)掃描碼(Breakcode),或簡(jiǎn)稱(chēng)為斷開(kāi)碼。主機(jī)鍵盤(pán)控制器專(zhuān)門(mén)用

3、來(lái)對(duì)接收到的鍵盤(pán)掃描碼進(jìn)行解碼。因?yàn)槊總€(gè)按鍵的接通和斷開(kāi)碼都是不同的,所以鍵盤(pán)控制器根據(jù)掃描碼就可以確定用戶(hù)在操作哪個(gè)鍵了。整個(gè)鍵盤(pán)上所有按鍵的接通和斷開(kāi)碼就組成了鍵盤(pán)的一個(gè)掃描碼集(ScanCodeSet)。根據(jù)電腦的發(fā)展,目前已有三套掃描碼集可供使用,它們分別是第一套掃描碼集,原始XT鍵盤(pán)掃描碼集,目前的鍵盤(pán)已經(jīng)很少發(fā)送這類(lèi)掃描碼;第二套掃描碼集,現(xiàn)代鍵盤(pán)預(yù)設(shè)使用的掃描碼集,通常稱(chēng)為AT鍵盤(pán)掃描碼集;第三套掃描碼集,PS2鍵盤(pán)掃描碼

4、集,原IBM推出PS2微處理機(jī)時(shí)使用的掃描碼集,已很少使用。AT鍵盤(pán)預(yù)設(shè)發(fā)送的是第二套掃描碼集。雖然如此,主機(jī)鍵盤(pán)控制器為了與PCXT機(jī)的軟體兼容起見(jiàn),仍然會(huì)把所有接收到的第二套鍵盤(pán)掃描碼轉(zhuǎn)換成第一套掃描碼,因此,我們從鍵盤(pán)控制器獲取的通常為第一套掃描碼集。當(dāng)一個(gè)鍵被按下時(shí),我們可以從鍵盤(pán)控制器接收到一個(gè)XT鍵盤(pán)接通碼。這個(gè)掃描碼僅表示鍵盤(pán)上某個(gè)位置處的鍵被按下,但還沒(méi)有對(duì)應(yīng)到某個(gè)字符代碼上,接通碼通常都是一個(gè)位組寬度。例如,按下鍵“A

5、”的接通碼是30(0x1E)。當(dāng)一個(gè)按下的鍵被松開(kāi)時(shí),從鍵盤(pán)控制器端口收到的就是一個(gè)斷開(kāi)碼。對(duì)于XT鍵盤(pán)(即鍵盤(pán)控制器程序設(shè)計(jì)端口收到的掃描碼),斷開(kāi)碼是其接通碼加上0x80。例如,上述“A”鍵的斷開(kāi)碼就是“0x800x1E=0x9E”。表1列出了ScanCodeSet1中的所有掃描碼,我們寫(xiě)程序時(shí)需要用到!圖1通常情況下,我們從0x60讀取的數(shù)據(jù)就是鍵盤(pán)的掃描碼,而從0x64讀取的數(shù)據(jù)為鍵盤(pán)的狀態(tài)字。狀態(tài)字的各位含義如下:Bit7:從

6、鍵盤(pán)獲得的數(shù)據(jù)奇偶校驗(yàn)錯(cuò)誤;Bit6:接收超時(shí),置1;Bit5:發(fā)送超時(shí),置1;Bit4:為1,鍵盤(pán)沒(méi)有被禁止。為0,鍵盤(pán)被禁止;Bit3:為1,輸入緩沖器中的內(nèi)容為命令,為0,輸入緩沖器中的內(nèi)容為數(shù)據(jù);Bit2:系統(tǒng)標(biāo)志,加電啟動(dòng)置0,自檢通過(guò)后置1;Bit1:輸入緩沖器滿(mǎn)置1,i8042取走后置0;Bit0:輸出緩沖器滿(mǎn)置1,CPU讀取后置0。接下來(lái)我們?cè)僬f(shuō)一下端口的操作方法。WindowsNT系統(tǒng)是不允許直接操作端口的,只有通過(guò)驅(qū)

7、動(dòng)程序才能實(shí)現(xiàn),可供選擇的驅(qū)動(dòng)程序有免費(fèi)開(kāi)源的winio、windriver等。由于我的畢業(yè)設(shè)計(jì)涉及到視頻采集卡驅(qū)動(dòng)程序的設(shè)計(jì),所以就以windirver為例來(lái)說(shuō)明端口操作方法了。安裝好windriver之后,在“samplesbasic_io”目錄下有一個(gè)basic_io.c,我們可以直接使用它提供的端口操作函數(shù)讀寫(xiě)端口。注意修改IO_init()函數(shù)添加如下語(yǔ)句:(責(zé)任編輯:admin)WD_LICENSElicstrcpy(lic

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論