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.

主站蜘蛛池模板: 成人无码区免费视频网站蜜臀| 欧美国产日韩在线观看| 亚洲av无码专区久久蜜芽| 日韩高清一区 | 亚洲伊人天堂| 亚洲色图综合在线| 国产美女在线观看| 国产成人h在线观看网站站| 欧美精品成人| 五月激激激综合网色播免费| 91在线一9|永久视频在线| 在线免费观看AV| 中国成人在线视频| 午夜天堂视频| 国产91成人| 日韩欧美网址| 亚洲欧美自拍视频| 国产在线精品香蕉麻豆| 欧美日韩精品一区二区视频| 国产成人艳妇AA视频在线| 亚洲三级影院| 永久免费av网站可以直接看的| 国产69囗曝护士吞精在线视频| 久久精品人人做人人爽| www.91中文字幕| 国产青榴视频| 国产精品成人免费视频99| 精品伊人久久久香线蕉 | 亚洲VA中文字幕| 伊人激情综合网| 美女无遮挡拍拍拍免费视频| 亚洲中文字幕久久精品无码一区| 国产成人三级| 伊人成人在线| 国产亚洲精品97AA片在线播放| 欧美国产综合视频| 欧美不卡在线视频| 国产高清不卡| 久久中文电影| 一级毛片在线播放免费| 手机在线免费毛片| 欧美精品亚洲精品日韩专区va| 情侣午夜国产在线一区无码| 国产白浆视频| 天天综合天天综合| 国产精品亚洲αv天堂无码| 中文字幕永久视频| 亚洲免费毛片| 香蕉视频在线观看www| V一区无码内射国产| 色欲不卡无码一区二区| 日韩第九页| 美美女高清毛片视频免费观看| 亚洲无码免费黄色网址| 午夜三级在线| 午夜丁香婷婷| 国产丝袜第一页| 亚洲AV无码久久精品色欲| 在线视频亚洲色图| 九九久久精品免费观看| 婷婷伊人五月| 欧美在线综合视频| 国模在线视频一区二区三区| 久久99国产综合精品1| 国产精品视频白浆免费视频| 毛片网站免费在线观看| 粗大猛烈进出高潮视频无码| 国产 在线视频无码| 青青热久免费精品视频6| 欧美中文一区| 91精品最新国内在线播放| 四虎AV麻豆| 五月天福利视频| 永久成人无码激情视频免费| 无码精品福利一区二区三区| 精品视频91| 高清视频一区| 2020亚洲精品无码| 久久人人爽人人爽人人片aV东京热 | 999精品免费视频| 伊人天堂网| 亚洲综合网在线观看|