在前面章節 NT 式驅動與 WDM 式驅動 的基本結構介紹中, 為了驗證所學, 這裡將透過改寫 HelloDDK 與 HelloWDM 驅動程式來詳細列印出 驅動元件, 裝置元件與裝置堆疊等資訊.
改寫 HelloDDK 查看驅動結構 :
HelloDDK 驅動程式的結構比較簡單. 在垂直方向上, 它沒有掛載任何裝置, 在水平上也只有一個裝置物件. 為了增加程式賦雜性, 改寫程式碼中, 在 DriverEntry 中心建了兩個裝置物件, 其關係是水平方向上的關係. 用 CreateDevice 新建第一個裝置物件, 用 CreateDevice2 新建第二個裝置物件 :
- //新建驅動裝置物件
- status = CreateDevice(pDriverObject);
- status = CreateDevice2(pDriverObject);
經過改寫後的程式碼, 會新建出兩個裝置物件. 改寫後的驅動在被載入後, 會列出 log 資訊如下所示 (使用 DebugView) :
改寫 HelloWDM 查看驅動結構 :
在 HelloWDM 中可以觀察 FDO 和 PDO 裝置之間的關係, 它們是處於垂直關係. 由於在 AddDevice 常式之後 FDO 新建完成, 並且附加在 PDO 上. 這裡將羅列 PDO 和 FDO 的程式碼新增在 AddDevice 的後面.
羅列 PDO 和 FDO 的程式碼被封裝在函式 DumpDeviceStack 中. 另外在前面改寫的 HelloDDK 中, 查看水平方向的程式碼亦可使用, DumpDeviceStack 程式碼如下 :
修改後的 HelloWDM 重新載入後, 列印出來 log 資訊如下 :
結論 :
從前面介紹NT驅動/WDK驅動結構到現在, 從中可以看出 WDM 驅動程式是從 NT 驅動程式基礎上變化過來, 可以將 WDM 驅動程式想成是 NT 驅動程式的特例. 同時我們也知道了 驅動程式的入口函式, 卸載函式, IRP 派遣函式等. 另外還有 驅動物件, 裝置物件的主要資料結構的簡介. 其中裝置物件之間可以形成垂直結構與水平結構的架構...
沒有留言:
張貼留言