C++第三十八篇 -- 研究一下Windows驅動開發(二)--WDM式驅動的加載

基於Windows驅動開發技術詳解這本書工具

1、簡單的INF文件剖析blog

INF文件是一個文本文件,由若干個節(Section)組成。每一個節的名稱用一個方括號指示,緊接着方括號後面的就是節內容。每一行就是一項內容,其形式都是相似SomeEntry=SomwValue。每一個項的順序是能夠顛倒的,但系統分析INF文件的時候,是順序解析的。INF中註釋語句是用分號開頭的。開發

2、WDM設備安裝在註冊表中的變化io

WDM式驅動程序的安裝會在三個方面修改註冊表,分別是硬件子鍵(Hardware)、類子鍵(Class)、服務子鍵(Service)。註冊表從這三個方面的子鍵描述WDM設備。在安裝好WDM驅動後,會根據INF的信息,在註冊表中有所體現。硬件

安裝完WDM式驅動後,除了在註冊表中獲得體現外,在設備管理器中,設備會同時顯示出來。在INF描述的各類信息,均可以從設備管理器中獲得體現。權限

一、硬件子鍵程序

硬件子鍵,也稱實例子鍵。其信息存儲在註冊表的Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum位置裏。訪問此子鍵必須擁有系統管理員的訪問權限,所以訪問這個子鍵只能運行在內核的程序或者擁有系統訪問權限的應用程序。方法

咱們本身寫的設備是一個模擬設備,當安裝了之後能夠在設備管理器中看見,也能夠在註冊表中查看Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\KMDFDriver1\0000.這個能夠根據設備管理器中的詳細信息查到,能夠想到,若是PC中有多於一個的同類設備,序號會順序排列下去0000、000一、0002。。。觀察註冊表,會有以下內容,且這些內容會和INF中描述的一致。im

》ClassGUID:指明此設備所屬的類的GUID。技術

》Class:指明此設備所屬於的設備類

》HardwareID:root\驅動名

》Driver:指明驅動的位置。

》Mfg:指明設備製造商的名稱

》Service:指明此設備在服務子鍵的位置。

》DeviceDesc:顯示的是此設備在設備管理器中顯示的名字。

 

二、類子鍵

每一個設備都會從屬於一個設備類。類子鍵負責記錄這個類的信息。類子鍵位Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class目錄下。這裏記錄了系統裏全部的設備類,且每一個設備類都是以一個GUID記錄的。GUID是一組128位的數字,形如{25DBCE51-6C8F-4A72-8A6D-B54C2B4FC835}。用戶可使用GUIDGEN.exe工具產生一組新的GUID,且保證這個GUID號碼不會與舊的GUID重複(是小几率意義上保證的)。GUIDGEN.exe是VC提供的一個附加工具,路徑在:安裝目錄\Microsoft Visual Studio\2017\Enterprise\Common7\Tools下面

經過硬件組件的ClassGUID在類子鍵裏面找到類的信息。這些內容,能夠對照INF的片斷更改,且同時做用於設備管理器中所顯示出來的驅動供應商,驅動版本日期,數字簽名等信息。

 

三、服務子鍵

服務子鍵是爲了兼容之前的NT式驅動程序,能夠用一樣的方法觀察NT式驅動程序的服務子鍵。服務子鍵的位置在Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services目錄下

》ImagePath:記錄驅動程序的執行文件路徑。

》Type爲1:指示該表描述一個內核模式的驅動。

》Start爲3:指示系統應動態裝入這個驅動程序。此值會與SERVICE_DEMOND_START常量對應

》ErrorContro爲1:指出若是裝入驅動程序失敗,系統應彈出一個錯誤提示對話框

相關文章
相關標籤/搜索