国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

通知應(yīng)用程序在設(shè)備驅(qū)動(dòng)程序中的方法應(yīng)用

2014-11-17 05:23:33姜靈利
科技創(chuàng)新與應(yīng)用 2014年33期
關(guān)鍵詞:應(yīng)用程序

姜靈利

摘 要:當(dāng)前的電腦操作系統(tǒng)中Windows的應(yīng)用最為廣泛,作為操作硬件最基礎(chǔ)的軟件接口,設(shè)備驅(qū)動(dòng)程序具有重要的作用。文章主要針對(duì)當(dāng)前所使用的設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)經(jīng)驗(yàn)進(jìn)行了討論,給出了五種通知應(yīng)用程序方案,并針對(duì)其原理進(jìn)行了分析,希望能夠同廣大設(shè)計(jì)者進(jìn)行交流共同促進(jìn)程序的完善和進(jìn)步。

關(guān)鍵詞:設(shè)備驅(qū)動(dòng)程序;應(yīng)用程序;方法C

在操作系統(tǒng)的應(yīng)用中,穩(wěn)定性是系統(tǒng)的基礎(chǔ)性要求,另外要求系統(tǒng)應(yīng)用程序具有可移植特性,但是在Windows系統(tǒng)中,應(yīng)用程序無法直接進(jìn)行硬件資源的訪問,而是需要通過設(shè)備驅(qū)動(dòng)程序。而硬件設(shè)備由驅(qū)動(dòng)程序進(jìn)行直接操作,應(yīng)用程序想要控制硬件設(shè)備便需要同驅(qū)動(dòng)程序之間形成雙向通訊。該雙向通訊主要包含兩方面內(nèi)容。首先是應(yīng)用程序需要向驅(qū)動(dòng)程序進(jìn)行數(shù)據(jù)的傳輸;其次,則是驅(qū)動(dòng)程序向應(yīng)用程序進(jìn)行消息的傳遞。二者相比較,應(yīng)用程序向驅(qū)動(dòng)程序進(jìn)行數(shù)據(jù)傳輸?shù)妮^容易實(shí)現(xiàn),只需要CreateFile函數(shù)將驅(qū)動(dòng)程序句柄獲得后,就可以使用。而后期,驅(qū)動(dòng)程序在完成對(duì)設(shè)備的控制后,需要進(jìn)行數(shù)據(jù)的采集,繼而通知應(yīng)用程序,將數(shù)據(jù)傳遞走。

驅(qū)動(dòng)程序在完成數(shù)據(jù)的收集后,對(duì)應(yīng)用程序的通知具有重要的作用,因而結(jié)合實(shí)際系統(tǒng)運(yùn)行情況以及應(yīng)用狀況,文章對(duì)該環(huán)節(jié)進(jìn)行了總結(jié),提出了五種方法,在以下內(nèi)容中予以說明。主要針對(duì)APC、VxD、消息方式以及異步I/O和WDM五種方式的原理展開了探討。

1 APC

APC即通??s成的異步過程調(diào)用方式,在應(yīng)用過程中通過CreateFile函數(shù),Win32系統(tǒng)對(duì)驅(qū)動(dòng)程序進(jìn)行動(dòng)態(tài)加載,繼而采用backFunc函數(shù)進(jìn)行定義,同時(shí)將該函數(shù)地址通過DeviceIoControl作為參數(shù)傳遞至驅(qū)動(dòng)程序。獲取地址后,驅(qū)動(dòng)程序會(huì)將該參數(shù)保存在全局變量中,并對(duì)應(yīng)用程序線程句柄進(jìn)行獲取,通過對(duì)Get_Cur_Thread_

Handle函數(shù)的調(diào)用,得到句柄后,將其保存在全局變量中,當(dāng)滿足應(yīng)用個(gè)條件后,調(diào)用VWIN32_QueueUserApc函數(shù),進(jìn)行消息的發(fā)送,完成同應(yīng)用程序的通訊。需要注意的是該函數(shù)所具有的參數(shù)摘要數(shù)量為三,其中兩個(gè)為已經(jīng)注冊(cè)的參數(shù)。當(dāng)消息為應(yīng)用程序鎖接收后,應(yīng)用程序會(huì)自動(dòng)對(duì)回調(diào)函數(shù)進(jìn)行調(diào)用?;卣{(diào)函數(shù)的主要作用為處理消息,由驅(qū)動(dòng)程序?qū)ζ鋮?shù)進(jìn)行輸入。

2 VxD

所謂的VxD方式即事件方式,該種方式的應(yīng)用需要應(yīng)用程序首先進(jìn)行時(shí)間句柄的創(chuàng)建,通過Win32程序創(chuàng)建的句柄被稱作Ring3句柄。虛擬驅(qū)動(dòng)往往會(huì)使用Ring0句柄,因此需要該句柄的創(chuàng)建。其中,動(dòng)態(tài)鏈接庫Kernel32.dll為非公開動(dòng)態(tài)鏈接庫,由LoadLibrary函數(shù)進(jìn)行加載,從而得到其句柄。并在動(dòng)態(tài)鏈接庫中確定OpenVxDHandle函數(shù),通過調(diào)用GetProcAddress予以實(shí)現(xiàn)。繼而進(jìn)行Ring3句柄和Ring0句柄之間的轉(zhuǎn)換,由OpenVxDHandle函數(shù)實(shí)現(xiàn)。通過CreateFile函數(shù)應(yīng)用程序即可完成對(duì)驅(qū)動(dòng)程序的加載。完成上述步驟后,將RING0時(shí)間句柄通過相關(guān)函數(shù)向事件方式進(jìn)行傳遞;并進(jìn)行輔助線程的創(chuàng)建,待信號(hào)接通。一旦滿足條件,那么VxD中Ring0事件會(huì)觸發(fā)Ring3事件信號(hào)。那么該種情況下,應(yīng)用程序就可以對(duì)該消息進(jìn)行接受處理,從而完成應(yīng)用程序同驅(qū)動(dòng)程序之間的數(shù)據(jù)、信息交流,達(dá)到對(duì)基層硬件的控制目的。

3 消息方式

通過CreateFile函數(shù)的調(diào)用,應(yīng)用程序可以對(duì)驅(qū)動(dòng)程序予以動(dòng)態(tài)加載。完成加載后,通過相關(guān)函數(shù)調(diào)用將句柄傳至VxD,繼而通過該句柄對(duì)窗體進(jìn)行消息發(fā)送。完成上述內(nèi)容后,通過對(duì)SHELL_Pos

tMessage函數(shù)的調(diào)用,VxD可以完成同應(yīng)用程序之間的消息傳送。并通過對(duì)消息的自定義保證函數(shù)的成功應(yīng)用,并且其定義同樣需要在應(yīng)用程序中進(jìn)行;另外對(duì)于定義的消息處理函數(shù)需要在循環(huán)中予以定義,從而快速對(duì)其進(jìn)行處理。應(yīng)用程序窗體句柄為SHELL_PostMessage函數(shù)的第一個(gè)參數(shù),而第二個(gè)參數(shù)則作為Win32的消息ID號(hào),剩余參數(shù)用作處理發(fā)送消息的函數(shù)參數(shù)以及回調(diào)函數(shù)參數(shù)。應(yīng)用程序完成消息的接收后對(duì)其進(jìn)行處理。

4 異步I/O方式

Win32應(yīng)用程序首先調(diào)用CreateFile函數(shù)加載設(shè)備驅(qū)動(dòng)程序。在調(diào)用該函數(shù)時(shí),將倒數(shù)第2個(gè)參數(shù)設(shè)置為FILE_ATTRIBUTE_NO

RMAL|FILE_FLAG_OVERLAPPED,表示以后可以對(duì)文件進(jìn)行重疊I/O操作。當(dāng)設(shè)備驅(qū)動(dòng)程序文件創(chuàng)建成功后,創(chuàng)建一個(gè)初始態(tài)為無信號(hào)、需要手動(dòng)復(fù)位的事件,并且將這個(gè)事件傳給類型為OVERLAPPED的數(shù)據(jù)結(jié)構(gòu)。然后,將Overlapped作為一個(gè)參數(shù),傳給DeviceIoControl函數(shù)。設(shè)備驅(qū)動(dòng)程序把這個(gè)I/O請(qǐng)求包(IRP)設(shè)置為掛起狀態(tài),并且設(shè)置一個(gè)取消例程。假如當(dāng)前IRP隊(duì)列為空,則將這個(gè)IRP傳送給StartIo例程;否則,將它放到IRP隊(duì)列中。設(shè)備驅(qū)動(dòng)程序做完這些工作后,結(jié)束這個(gè)DeviceIoControl的處理,于是Win32應(yīng)用程序可能不等待IRP處理完,就從DeviceIoControl的調(diào)用中返回。通過判定返回值,得到IRP的處理情況。假如當(dāng)前IRP處于掛起狀態(tài),則主程序先做一些其他的工作,然后調(diào)用WaitForSingleObject或WaitForMultipleObject函數(shù)等待Overlapped中的事件成為有信號(hào)狀態(tài)。設(shè)備驅(qū)動(dòng)程序在適當(dāng)?shù)臅r(shí)候處理排隊(duì)的IRP,處理完成后,調(diào)用IoCompleteRequest函數(shù)。完成上述步驟后,該函數(shù)會(huì)對(duì)Overlapped信號(hào)狀態(tài)進(jìn)行調(diào)整,使得其時(shí)間信號(hào)轉(zhuǎn)變?yōu)橛行盘?hào)狀態(tài)。而應(yīng)用程序根據(jù)信號(hào)狀態(tài)的轉(zhuǎn)變會(huì)立刻進(jìn)行相應(yīng),不再進(jìn)行等待,同時(shí)將事件信號(hào)狀態(tài)進(jìn)行復(fù)位,使之恢復(fù)為無信號(hào),繼而對(duì)GetOverlappedResult進(jìn)行調(diào)用。

5 WDM

該方式即事件方式,由應(yīng)用程序首先進(jìn)行事件的創(chuàng)建,繼而將句柄傳至驅(qū)動(dòng)程序,完成事件句柄的傳送后,創(chuàng)建輔助線程。待事件信號(hào)狀態(tài)轉(zhuǎn)變。驅(qū)動(dòng)程序獲得由應(yīng)用程序傳輸?shù)木浔?,將其轉(zhuǎn)換為事件指針并寄存,方便其對(duì)硬件設(shè)備的控制使用。當(dāng)具有操作條件后,驅(qū)動(dòng)程序會(huì)改變事件信號(hào)狀態(tài),則應(yīng)用程序會(huì)接受到該消息,并進(jìn)行處理,由輔助線程進(jìn)行傳輸。此外需要注意,若該程序事件不能再被使用,那么應(yīng)當(dāng)將指針解除。

6 結(jié)束語

當(dāng)前的操作系統(tǒng)中,作為硬件的操作接口,驅(qū)動(dòng)程序起到了關(guān)鍵作用。通過驅(qū)動(dòng)程序能夠進(jìn)行I/Ohuozhe DMA、甚至是終端硬件以及內(nèi)存訪問,而向上則可以提供用戶接口。通過驅(qū)動(dòng)程序?qū)⒂布瑧?yīng)用程序分開,從而使得軟件具有可移植性,而不依賴于硬件。文章通過對(duì)五種驅(qū)動(dòng)程序同應(yīng)用程序支架的通知方法進(jìn)行了分析。前三種方式應(yīng)用基礎(chǔ)主要為VxD,而后兩種則是WDM。通過實(shí)際的應(yīng)用可以表明,這五種通知方式都能夠保證驅(qū)動(dòng)程序?qū)?yīng)用程序進(jìn)行信息的通知傳遞。

參考文獻(xiàn)

[1]孫磊.Windows系列操作系統(tǒng)下的底層驅(qū)動(dòng)技術(shù)在實(shí)時(shí)控制系統(tǒng)中的應(yīng)用[D].中國科學(xué)院研究生院(西安光學(xué)精密機(jī)械研究所),2007.

[2]劉仁峰.基于PCI總線的嵌入式設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)與研究[D].華中科技大學(xué),2004.

猜你喜歡
應(yīng)用程序
刪除Win10中自帶的應(yīng)用程序
谷歌禁止加密貨幣應(yīng)用程序
Windows環(huán)境下基于棧和堆的應(yīng)用程序行為解析方法研究
用好被忽視的Office應(yīng)用程序
電腦迷(2014年12期)2014-04-29 00:44:03
保護(hù)移動(dòng)設(shè)備的安全
關(guān)閉應(yīng)用程序更新提醒
電腦迷(2012年15期)2012-04-29 17:09:47
為軟件付費(fèi)你準(zhǔn)備好了嗎?
三星電子將開設(shè)應(yīng)用程序下載商店
微軟軟件商店開始接受應(yīng)用程序
啟動(dòng)后提示MOM.EXE錯(cuò)誤
清丰县| 扎赉特旗| 绥江县| 沾益县| 伊宁县| 淄博市| 建湖县| 木兰县| 夏河县| 竹山县| 铜山县| 厦门市| 柞水县| 阿合奇县| 宝山区| 常山县| 建德市| 广丰县| 泾源县| 彰化县| 刚察县| 桂林市| 绵竹市| 南部县| 庆元县| 金寨县| 唐山市| 民勤县| 贵港市| 辽源市| 江川县| 繁峙县| 东兰县| 中西区| 鄄城县| 清水县| 漾濞| 昌江| 伊吾县| 霍城县| 墨脱县|