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