《《WDM驅動程序簡介》PPT課件.ppt》由會員分享,可在線閱讀,更多相關《《WDM驅動程序簡介》PPT課件.ppt(13頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、設備驅動程序設計,WDM驅動程序簡介,第二講,Windows XP 驅動程序分類,內核模式驅動程序的屬性,可移植性:源代碼級可移植 可配置性:避免對硬件特征和系統(tǒng)設置作絕對假設;避免在代碼中直接引用硬件 可搶先性和可中斷性 多處理器安全 基于對象 數(shù)據(jù)包驅動 異步,Windows XP 系統(tǒng)結構,WDM驅動程序模型,WDM模型主要包含以下內容: 1、描述了設備驅動程序的標準結構和應該完成的主要功能。 2、描述了操作系統(tǒng)為設備驅動提供的各種服務,以及操作系統(tǒng)與設備驅動程序之間詳細的交互過程 3、為常見類型的設備提供一系列的總線驅動程序和類驅動程序。,WDM驅動程序的分類,功能驅動:每個WDM驅動
2、都包含功能驅動;它了解使硬件工作的所有細節(jié),負責具體I/O過程,負責處理中斷事件,為用戶提供一種設備適合的控制方式。 總線驅動:查找并發(fā)現(xiàn)硬件設備,確定設備的資源使用情況,管理硬件與計算機的實際連接,負責物理的I/O過程 過濾器驅動:對功能驅動程序執(zhí)行I/O操作時進行過濾和監(jiān)視,修改現(xiàn)有功能驅動程序的行為,為用戶提供額外服務 類驅動:實現(xiàn)某種設備類型的共通功能,管理整個設備類的基本特征,規(guī)范該類設備與操作系統(tǒng)中其它軟件環(huán)境的接口。采用類驅動有利于分層和功能重用。 迷你驅動:包含在類驅動中,用于管理設備實例的廠商專有特征例程。類驅動和迷你驅動合在一起才構成一個完整的功能驅動程序。,WDM驅動的層
3、次結構,驅動程序如何工作,驅動程序是一個收集讓操作系統(tǒng)調用的用來執(zhí)行各種涉及到硬件操作的子程序的容器。 一些例程,如DriverEntry和AddDevice例程和一些特定的I/O 請求包(IRP)的處理函數(shù)會出現(xiàn)在每個這樣的容器中 。 需要排隊請求的驅動程序可能還有一個StartIo例程。而執(zhí)行直接存儲器存取(DMA)操作的驅動程序會有一個AdapterControl例程。產生硬件中斷的驅動程序也會有一個中斷服務例程(ISR)和一個延遲過程調用(DPC)例程,sys和exe,像EXE程序一樣,驅動程序也是可執(zhí)行文件。其擴展名為.SYS 在結構上嚴格地說驅動程序和任何32位的Windows或者
4、控制臺的應用程序沒什么區(qū)別。和EXE程序一樣,一個驅動程序也需要許多輔助程序,許多也都是動態(tài)鏈接自操作系統(tǒng)內核或來自一組驅動或者其他的支持庫。 但是驅動程序沒有主程序。取而代之的是其包含了一批系統(tǒng)可以在適當?shù)臅r候調用的子程序集。驅動程序除了其自己的硬件外不關心任何別的事情:系統(tǒng)管理了其他的任何事務,包括決定在何時運行你的驅動程序代碼。,操作系統(tǒng)與驅動的交互過程,系統(tǒng)運行時設備插入或者系統(tǒng)重新啟動發(fā)現(xiàn)了某個設備,系統(tǒng)就會裝載可執(zhí)行的驅動程序到內存中,并且調用其DriverEntry例程。DriveEntry做了一些初始化操作之后返回。 即插即用管理器(PnP Manager)調用AddDevic
5、e例程,讓其做一些與設備實例相關的初始化操作之后返回。 即插即用管理器發(fā)送給驅動程序一些IRP,相應的IRP處理函數(shù)處理完該IRP之后返回。 一個應用程序打開了設備,因此系統(tǒng)發(fā)送給驅動另一個IRP,處理函數(shù)進行了少量的操作之后返回,操作系統(tǒng)與驅動的交互過程,應用程序嘗試讀取或者寫入一些數(shù)據(jù),因此系統(tǒng)發(fā)送一個IRP,處理例程將IRP放入一個隊列之后返回。 某些I/O操作引發(fā)設備中斷,中斷服務例程做一些很少的操作,然后請求一個DPC,之后返回。 DPC例程運行了,它可能要讀回數(shù)據(jù),或者繼續(xù)下一次的寫操作等,然后開始下一個排在隊列中的IRP,之后DPC例程返回系統(tǒng)。 隨著時間變化,在這期間系統(tǒng)會發(fā)送各種IRP給驅動程序,驅動程序進行相應的處理。 最后,用戶拔出設備或者關閉系統(tǒng),這時,系統(tǒng)發(fā)送一些IRP,分發(fā)例程做好相應的處理,然后返回,系統(tǒng)把驅動程序代碼移出內存。,應用程序與驅動的交互,應用程序里面要做的工作首先就是要調用CreatFile 打開設備,具體操作就像打開一個文件一樣。 應用程序準備好相應的數(shù)據(jù)或者緩沖區(qū)等,調用相應的WIN32 API如WriteFile,ReadFile,DeviceIoControl等,對設備進行讀寫等各種操作。 最后應用程序關閉設備,具體操作就像關閉一個文件一樣 。,