999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

通知應用程序在設備驅動程序中的方法應用

2014-11-17 05:23:33姜靈利
科技創新與應用 2014年33期

姜靈利

摘 要:當前的電腦操作系統中Windows的應用最為廣泛,作為操作硬件最基礎的軟件接口,設備驅動程序具有重要的作用。文章主要針對當前所使用的設備驅動程序的設計經驗進行了討論,給出了五種通知應用程序方案,并針對其原理進行了分析,希望能夠同廣大設計者進行交流共同促進程序的完善和進步。

關鍵詞:設備驅動程序;應用程序;方法C

在操作系統的應用中,穩定性是系統的基礎性要求,另外要求系統應用程序具有可移植特性,但是在Windows系統中,應用程序無法直接進行硬件資源的訪問,而是需要通過設備驅動程序。而硬件設備由驅動程序進行直接操作,應用程序想要控制硬件設備便需要同驅動程序之間形成雙向通訊。該雙向通訊主要包含兩方面內容。首先是應用程序需要向驅動程序進行數據的傳輸;其次,則是驅動程序向應用程序進行消息的傳遞。二者相比較,應用程序向驅動程序進行數據傳輸的較容易實現,只需要CreateFile函數將驅動程序句柄獲得后,就可以使用。而后期,驅動程序在完成對設備的控制后,需要進行數據的采集,繼而通知應用程序,將數據傳遞走。

驅動程序在完成數據的收集后,對應用程序的通知具有重要的作用,因而結合實際系統運行情況以及應用狀況,文章對該環節進行了總結,提出了五種方法,在以下內容中予以說明。主要針對APC、VxD、消息方式以及異步I/O和WDM五種方式的原理展開了探討。

1 APC

APC即通常縮成的異步過程調用方式,在應用過程中通過CreateFile函數,Win32系統對驅動程序進行動態加載,繼而采用backFunc函數進行定義,同時將該函數地址通過DeviceIoControl作為參數傳遞至驅動程序。獲取地址后,驅動程序會將該參數保存在全局變量中,并對應用程序線程句柄進行獲取,通過對Get_Cur_Thread_

Handle函數的調用,得到句柄后,將其保存在全局變量中,當滿足應用個條件后,調用VWIN32_QueueUserApc函數,進行消息的發送,完成同應用程序的通訊。需要注意的是該函數所具有的參數摘要數量為三,其中兩個為已經注冊的參數。當消息為應用程序鎖接收后,應用程序會自動對回調函數進行調用。回調函數的主要作用為處理消息,由驅動程序對其參數進行輸入。

2 VxD

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

3 消息方式

通過CreateFile函數的調用,應用程序可以對驅動程序予以動態加載。完成加載后,通過相關函數調用將句柄傳至VxD,繼而通過該句柄對窗體進行消息發送。完成上述內容后,通過對SHELL_Pos

tMessage函數的調用,VxD可以完成同應用程序之間的消息傳送。并通過對消息的自定義保證函數的成功應用,并且其定義同樣需要在應用程序中進行;另外對于定義的消息處理函數需要在循環中予以定義,從而快速對其進行處理。應用程序窗體句柄為SHELL_PostMessage函數的第一個參數,而第二個參數則作為Win32的消息ID號,剩余參數用作處理發送消息的函數參數以及回調函數參數。應用程序完成消息的接收后對其進行處理。

4 異步I/O方式

Win32應用程序首先調用CreateFile函數加載設備驅動程序。在調用該函數時,將倒數第2個參數設置為FILE_ATTRIBUTE_NO

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

5 WDM

該方式即事件方式,由應用程序首先進行事件的創建,繼而將句柄傳至驅動程序,完成事件句柄的傳送后,創建輔助線程。待事件信號狀態轉變。驅動程序獲得由應用程序傳輸的句柄后,將其轉換為事件指針并寄存,方便其對硬件設備的控制使用。當具有操作條件后,驅動程序會改變事件信號狀態,則應用程序會接受到該消息,并進行處理,由輔助線程進行傳輸。此外需要注意,若該程序事件不能再被使用,那么應當將指針解除。

6 結束語

當前的操作系統中,作為硬件的操作接口,驅動程序起到了關鍵作用。通過驅動程序能夠進行I/Ohuozhe DMA、甚至是終端硬件以及內存訪問,而向上則可以提供用戶接口。通過驅動程序將硬件同應用程序分開,從而使得軟件具有可移植性,而不依賴于硬件。文章通過對五種驅動程序同應用程序支架的通知方法進行了分析。前三種方式應用基礎主要為VxD,而后兩種則是WDM。通過實際的應用可以表明,這五種通知方式都能夠保證驅動程序對應用程序進行信息的通知傳遞。

參考文獻

[1]孫磊.Windows系列操作系統下的底層驅動技術在實時控制系統中的應用[D].中國科學院研究生院(西安光學精密機械研究所),2007.

[2]劉仁峰.基于PCI總線的嵌入式設備驅動程序設計與研究[D].華中科技大學,2004.

主站蜘蛛池模板: 成人va亚洲va欧美天堂| 国产H片无码不卡在线视频| 免费毛片视频| 91精品免费高清在线| 亚洲女同欧美在线| 中国精品久久| 自慰网址在线观看| 久热中文字幕在线| 国产精鲁鲁网在线视频| 亚洲国产中文精品va在线播放| 91久久大香线蕉| 亚洲侵犯无码网址在线观看| 免费AV在线播放观看18禁强制| 亚洲人成电影在线播放| 免费无码网站| 精品国产91爱| 精品国产污污免费网站| 99热这里只有精品免费| 亚洲精品色AV无码看| 手机在线国产精品| 国产h视频免费观看| 欧美人与牲动交a欧美精品| 毛片网站在线播放| 国产乱子伦无码精品小说| 亚洲高清资源| 日本一区中文字幕最新在线| 美女国产在线| 久久国产av麻豆| 亚洲Va中文字幕久久一区| 在线免费亚洲无码视频| 在线网站18禁| 国产不卡网| 国产凹凸一区在线观看视频| 91免费观看视频| 99热这里只有精品2| 国产欧美日韩视频怡春院| 国产好痛疼轻点好爽的视频| 久久无码高潮喷水| 国产真实乱了在线播放| 青青操视频在线| 亚洲网综合| 99久久精品免费看国产免费软件 | 亚洲中文精品人人永久免费| 制服丝袜一区| 国产精品露脸视频| 亚洲av成人无码网站在线观看| 国内精品久久久久久久久久影视| 亚洲国内精品自在自线官| 久久99精品久久久久纯品| 久久人妻系列无码一区| 国产免费福利网站| 91久久国产成人免费观看| 青草娱乐极品免费视频| 国产最新无码专区在线| 精品久久高清| 国产高清自拍视频| 91久草视频| 青青操视频免费观看| 婷婷色婷婷| 欧美啪啪网| 无码专区在线观看| 视频一区视频二区中文精品| 在线亚洲精品福利网址导航| 国产一二三区视频| 四虎影院国产| 精品国产美女福到在线不卡f| 久久久久亚洲av成人网人人软件| 男人天堂伊人网| 久久美女精品| 日韩精品一区二区三区视频免费看| 中文字幕欧美日韩高清| 日本人真淫视频一区二区三区| 永久免费精品视频| 色屁屁一区二区三区视频国产| 欧美影院久久| 日韩人妻无码制服丝袜视频| 秋霞午夜国产精品成人片| 91无码国产视频| 91久久青青草原精品国产| 国产麻豆另类AV| 就去色综合| 亚洲欧美成人综合|