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