摘 要 在目前流行的Windows操作系統(tǒng)中,設(shè)備驅(qū)動程序是操縱硬件的最底層軟件接口。筆者結(jié)合個人經(jīng)驗(yàn),在此分享設(shè)備驅(qū)動程序設(shè)計(jì)過程中的一些經(jīng)驗(yàn),給出設(shè)備驅(qū)動程序通知應(yīng)用程序的4種方法,具體說明每種方法的原理和實(shí)現(xiàn)過程,希望能夠給設(shè)備驅(qū)動程序的設(shè)計(jì)者提供一些幫助。
關(guān)鍵字 Windows系統(tǒng) 驅(qū)動程序 通知應(yīng)用程序 設(shè)計(jì) 方法
中圖分類號: TP316 文獻(xiàn)標(biāo)識碼:A
1 前言
操作系統(tǒng)的穩(wěn)定性及可移植性是務(wù)必要優(yōu)先確保的,為此Windows操作系統(tǒng)不支持應(yīng)用程序直接訪問系統(tǒng)的硬件資源,而是必須借助于相應(yīng)的設(shè)備驅(qū)動程序。設(shè)備驅(qū)動程序可以直接操作硬件,假如應(yīng)用程序和設(shè)備驅(qū)動程序之間實(shí)現(xiàn)了雙向通信,也就達(dá)到了應(yīng)用程序控制底層硬件設(shè)備的目的。
2 通知應(yīng)用程序設(shè)計(jì)四種方法
鑒于設(shè)備驅(qū)動程序通知應(yīng)用程序的重要性,本人結(jié)合一些經(jīng)驗(yàn),對它進(jìn)行了總結(jié),歸納出5種方法摘要:異步過程調(diào)用(APC)、事件方式(VxD)、消息方式、異步I/O方式和事件方式(WDM)。下面分別說明這幾種方式的原理。
2.1 異步過程調(diào)用(APC)
Win32應(yīng)用程序使用CreateFile()函數(shù)動態(tài)加載設(shè)備驅(qū)動程序,然后定義一個回調(diào)函數(shù)backFunc(),并且將回調(diào)函數(shù)的地址%26amp;backFunc()作為參數(shù),通過DeviceIoControl()傳送給設(shè)備驅(qū)動程序?;卣{(diào)函數(shù)的輸入?yún)?shù)是由設(shè)備驅(qū)動程序填入的,回調(diào)函數(shù)在這里主要是對消息進(jìn)行處理。
2.2 事件方式(VxD)
首先,Win32應(yīng)用程序創(chuàng)建一個事件的句柄,稱其為Ring3句柄。由于虛擬設(shè)備驅(qū)動程序使用事件的Ring0句柄,因此,需要創(chuàng)建Ring0句柄。用LoadLibrary()函數(shù)加載未公開的動態(tài)鏈接庫Kernel32.dll,獲得動態(tài)鏈接庫的句柄。然后,調(diào)用GetProcAddress(), 找到函數(shù)OpenVxDHandle()在動態(tài)鏈接庫中的位置。接著,用OpenVxDHandle()函數(shù)將Ring3事件句柄轉(zhuǎn)化為Ring0事件句柄。Win32應(yīng)用程序用CreateFile()函數(shù)加載設(shè)備驅(qū)動程序。
2.3 消息方式
Win32應(yīng)用程序調(diào)用CreateFile()函數(shù)動態(tài)加載虛擬設(shè)備驅(qū)動程序。加載成功后,通過調(diào)用DeviceIoControl()函數(shù)將窗體句柄傳送給VxD,VxD利用這個句柄向窗體發(fā)消息。當(dāng)條件滿足時,VxD調(diào)用SHELL_PostMessage()函數(shù)向Win32應(yīng)用程序發(fā)送消息。SHELL_PostMessage()函數(shù)的第一個參數(shù)為Win32窗體句柄,第二個參數(shù)為消息ID號,第三、四個參數(shù)為發(fā)送給消息處理函數(shù)的參數(shù),第五、六個參數(shù)為回調(diào)函數(shù)和傳給它的參數(shù)。Win32應(yīng)用程序收到消息后,對消息進(jìn)行處理。
2.4 事件方式(WDM)
Win32應(yīng)用程序首先創(chuàng)建一個事件,然后將該事件句柄傳給設(shè)備驅(qū)動程序,接著創(chuàng)建一個輔助線程,等待事件的有信號狀態(tài),自己則接著干其他事情。設(shè)備驅(qū)動程序獲得該事件的句柄后,將它轉(zhuǎn)換成能夠使用的事件指針,并且把它寄存起來,以便后面使用。
3 結(jié)語
在目前流行的Windows操作系統(tǒng)中,設(shè)備驅(qū)動程序是操縱硬件的最底層軟件接口。它向上提供和硬件無關(guān)的用戶接口,向下直接進(jìn)行I/O、硬件中斷、DMA和內(nèi)存訪問等操作。它將應(yīng)用程序和硬件細(xì)節(jié)屏蔽開來,使軟件不依靠于硬件并且可在多個不同的平臺之間移植。這4種方法都經(jīng)過實(shí)際測試。測試結(jié)果表明,它們都能夠達(dá)到設(shè)備驅(qū)動程序通知應(yīng)用程序的目的。
參考文獻(xiàn)
[1] 李和平. 基于DSP的ICT圖像重建系統(tǒng)探究. 北京摘要: 北京航空航天大學(xué)機(jī)械工程及自動化學(xué)院, 2002
[2] (美)Chris Cant. Windows WDM設(shè)備驅(qū)動程序開發(fā)指南. 孫義, 馬莉波, 國雪飛等譯. 北京摘要: 機(jī)械工業(yè)出版社 2000
[3] 歐青立,徐建波,李方敏,等. 虛擬設(shè)備驅(qū)動程序VxD的探究和開發(fā). 計(jì)算機(jī)工程,2003