天天看點

33、WDM驅動程式架構

    在WDM程式中,建立裝置等功能都被轉移到AddDevice例程中。AddDevice是WDM驅動與老式NT式驅動的重要差別。<?xml:namespace prefix = o />

當有裝置插入電腦後,系統總線驅動(根總線)會枚舉到有新裝置被插入;這時會通知PNP管理器尋找需要加載的裝置驅動。根據此種裝置的總線,PNP管理器會加載相應的總線驅動裝置,并得到這種實體裝置對象(PDO);PNP管理器會根據ProductID,VendorID等資訊加載這種裝置的驅動,并将剛才建立好的PDO作為參數,傳遞給AddDevice例程,而AddDevice例程會将自己的裝置對象挂載在PDO之上。至此裝置棧建立完畢。

1、功能裝置對象

是DEVICE_OBJECT資料結構,一般由AddDevice例程建立,然後加載在實體裝置對象上。功能裝置對象的驅動也會在DriverEntry裡設定各個派遣函數的入口。

2、實體裝置對象

可以用Device Object Viewer來觀察一下。

當系統啟動時,根總線驅動被加載,然後尋找挂載于根總線上的驅動裝置。如果發現有PCI裝置,就會加載PCI裝置的PDO,然後尋找适合的FDO進行加載。如USB擴充卡等會被當做是PCI裝置,被加載PDO,FDO。

33、WDM驅動程式架構

實體裝置對象一般都是由總線驅動所建立的裝置。WDM使人們都更多的精力放在FDO上。在PDO與FDO之間可以加入一個或多個過濾驅動,過濾驅動可以從中截取并修改即插即用相關的IRP。

WDM是基于分層驅動的概念發展而來的。WDM驅動一般分為總線驅動程式和功能驅動程式。功能驅動程式挂載于總線上,功能驅動程式處理一部分IRP,大部分的即插即用IRP和電源處理IRP被轉發到總線驅動上處理。