前言 :
和 NT 式驅動不同, WDM 式驅動程式不是被當作服務來載入的, 因此不能簡單地依靠修改登錄表來載入驅動. WDM 式驅動的載入需要由一個以 INF 為副檔名的文字檔來描述安裝過程. WDM 式驅動比 NT 式驅動增加了對隨插即用的支援, 這需要安裝的時候提供一個 INF 檔進行配合. 例如在 PC 上新插入一個裝置, 系統會偵測到這個裝置, 並報告作業系統這個裝置的 VenderID 和 ProductID 等資訊.
WDM 的手動安裝 :
Windows 在安裝的時候會提供很多 INF 檔, 根據不同的 VenderID 和 ProductID, 會找出合適這個裝置的 INF 檔. 如果系統沒有合適的 INF 檔, 系統會向使用者詢問是否可以提供這個 INF 檔, 如果不能則會到微軟網站去尋找. 經過一系列的定位 INF 檔步驟後, 尋找到最終的 INF 檔. 系統會根據 INF 檔上的指示, 將驅動程式 (.sys 檔) 和相關檔案複製到系統指定目錄下. 並修改登錄表. 同是會通知 PNP 管理器和 I/O 管理器, 新建新裝置, 並執行驅動程式的入口程式 DriverEntry. INF 檔包含了 WDM 裝置驅動程式需要的資訊, 這包括了新建或修改登錄表資訊, 複製檔案等.
在 Windows 裡會呼叫大量的 INF 檔, 這些 INF 檔記錄了知名裝置廠商提供的驅動程式. 因此大部分硬體安裝在 Windows 的時候, 是不需要安裝驅動的. 當系統插入新裝置時, 如果沒有找到對應驅動時, 會提示使用者安裝方法, 如下圖. 經過一系列的詢問, 系統會讓使用者定位 INF 檔的位置.
簡單的 INF 檔剖析 :
INF 是一個文字檔, 由若干個節 (Section) 組成. 每個節的名稱用一個方括號指示, 緊接著方括號後面就是內容. 每一行就是一項內容, 其形式都是類似 SomeEntry=SomeValue.
每個項的順序都是可以控制的. INF 中注釋語句是用分號開頭.
下面以前面的 HelloWDM 的 INF 作範例分析. 因為這是個虛擬裝置, 所以 VenderID 和 ProductID 用 PCI\VEN_9999 和 DEV_9999 代替 :
WDM 裝置安裝在登錄表中的變化 :
WDM 式驅動程式的安裝會在三方面些改登錄表, 分別是硬體子鍵, 類別子鍵和服務子鍵. 登錄表從這三方面的子鍵描述 WDM 裝置. 在安裝好 WDM 驅動後, 會根據 INF 資訊在登錄表進行修改. 安裝 WDM 驅動後, 除了在登錄表得到呈現外, 在裝置管理員, 裝置也會同時顯示出來. 在INF描述 的各種資訊, 都可以在從裝置管理員上發現對應的設定.
- 硬體子鍵
硬體子鍵, 也稱實例子鍵. 其資訊存放在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root 位置裡, 請參考下圖. 存取此鍵需要有系統管理員的存取權限 :
HelloWDM 是個虛擬裝置, 可以根據裝置管理員找到相關資訊 :
可以知道的是 PC 中可以有多於一個的同類裝置, 序號會依順序排列下去. 觀察登錄表會有以下內容, 而這些內容與 INF 中描述一致 :
- 類別子鍵
每個裝置都會從屬於一個裝置類別. 在 HelloWDM 中, 該裝置從屬於 ZhangfanDevice 裝置類別. 類別子鍵負責記錄這個類別的資訊. 類別子鍵位於 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class 目錄下.
這裡記錄了系統裡所有的裝置類別, 請每一個裝置類別都是以一個 GUID 記錄的. GUID 是一組 128 位元的數字, 從 INF 檔可以找到 HelloWDM 所屬類別為 ZhangfanDevice, 其 GUID 為 ClassGUID= {EF2962F0-0D55-4BFF-B8AA-2221EE8A79B0}. 所以可以在登錄表中查到如下資訊 :
其中 Icon 為 -5, 這個圖示是此類別裝置在裝置管理員中的圖示. 在此鍵的下面有一個子鍵 0000, 此子鍵內容類似於硬體子鍵的 0000. 下圖是裝置管理員中顯示的裝置類別名稱 :
- 服務子鍵
服務子鍵是為了相容以前 NT 式驅動程式, 可以用同樣方法觀察 NT 式驅動程式的服務子鍵. 服務子鍵是在 HKEY_LOCAL_MACHINE\SYSTEM\Current ControlSet\Services 目錄下, 底下是登錄表圖示 :
和 NT 式驅動不同, WDM 式驅動程式不是被當作服務來載入的, 因此不能簡單地依靠修改登錄表來載入驅動. WDM 式驅動的載入需要由一個以 INF 為副檔名的文字檔來描述安裝過程. WDM 式驅動比 NT 式驅動增加了對隨插即用的支援, 這需要安裝的時候提供一個 INF 檔進行配合. 例如在 PC 上新插入一個裝置, 系統會偵測到這個裝置, 並報告作業系統這個裝置的 VenderID 和 ProductID 等資訊.
WDM 的手動安裝 :
Windows 在安裝的時候會提供很多 INF 檔, 根據不同的 VenderID 和 ProductID, 會找出合適這個裝置的 INF 檔. 如果系統沒有合適的 INF 檔, 系統會向使用者詢問是否可以提供這個 INF 檔, 如果不能則會到微軟網站去尋找. 經過一系列的定位 INF 檔步驟後, 尋找到最終的 INF 檔. 系統會根據 INF 檔上的指示, 將驅動程式 (.sys 檔) 和相關檔案複製到系統指定目錄下. 並修改登錄表. 同是會通知 PNP 管理器和 I/O 管理器, 新建新裝置, 並執行驅動程式的入口程式 DriverEntry. INF 檔包含了 WDM 裝置驅動程式需要的資訊, 這包括了新建或修改登錄表資訊, 複製檔案等.
在 Windows 裡會呼叫大量的 INF 檔, 這些 INF 檔記錄了知名裝置廠商提供的驅動程式. 因此大部分硬體安裝在 Windows 的時候, 是不需要安裝驅動的. 當系統插入新裝置時, 如果沒有找到對應驅動時, 會提示使用者安裝方法, 如下圖. 經過一系列的詢問, 系統會讓使用者定位 INF 檔的位置.
簡單的 INF 檔剖析 :
INF 是一個文字檔, 由若干個節 (Section) 組成. 每個節的名稱用一個方括號指示, 緊接著方括號後面就是內容. 每一行就是一項內容, 其形式都是類似 SomeEntry=SomeValue.
每個項的順序都是可以控制的. INF 中注釋語句是用分號開頭.
下面以前面的 HelloWDM 的 INF 作範例分析. 因為這是個虛擬裝置, 所以 VenderID 和 ProductID 用 PCI\VEN_9999 和 DEV_9999 代替 :
WDM 裝置安裝在登錄表中的變化 :
WDM 式驅動程式的安裝會在三方面些改登錄表, 分別是硬體子鍵, 類別子鍵和服務子鍵. 登錄表從這三方面的子鍵描述 WDM 裝置. 在安裝好 WDM 驅動後, 會根據 INF 資訊在登錄表進行修改. 安裝 WDM 驅動後, 除了在登錄表得到呈現外, 在裝置管理員, 裝置也會同時顯示出來. 在INF描述 的各種資訊, 都可以在從裝置管理員上發現對應的設定.
- 硬體子鍵
硬體子鍵, 也稱實例子鍵. 其資訊存放在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root 位置裡, 請參考下圖. 存取此鍵需要有系統管理員的存取權限 :
HelloWDM 是個虛擬裝置, 可以根據裝置管理員找到相關資訊 :
可以知道的是 PC 中可以有多於一個的同類裝置, 序號會依順序排列下去. 觀察登錄表會有以下內容, 而這些內容與 INF 中描述一致 :
- 類別子鍵
每個裝置都會從屬於一個裝置類別. 在 HelloWDM 中, 該裝置從屬於 ZhangfanDevice 裝置類別. 類別子鍵負責記錄這個類別的資訊. 類別子鍵位於 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class 目錄下.
這裡記錄了系統裡所有的裝置類別, 請每一個裝置類別都是以一個 GUID 記錄的. GUID 是一組 128 位元的數字, 從 INF 檔可以找到 HelloWDM 所屬類別為 ZhangfanDevice, 其 GUID 為 ClassGUID= {EF2962F0-0D55-4BFF-B8AA-2221EE8A79B0}. 所以可以在登錄表中查到如下資訊 :
其中 Icon 為 -5, 這個圖示是此類別裝置在裝置管理員中的圖示. 在此鍵的下面有一個子鍵 0000, 此子鍵內容類似於硬體子鍵的 0000. 下圖是裝置管理員中顯示的裝置類別名稱 :
- 服務子鍵
服務子鍵是為了相容以前 NT 式驅動程式, 可以用同樣方法觀察 NT 式驅動程式的服務子鍵. 服務子鍵是在 HKEY_LOCAL_MACHINE\SYSTEM\Current ControlSet\Services 目錄下, 底下是登錄表圖示 :
This message was edited 6 times. Last update was at 16/12/2010 13:46:23
沒有留言:
張貼留言