設備識別,驅動選擇安裝過程

當 插入一個設備到系統,插入設備的總線檢測出這個設備的“設備標識符”,並通知管理中心添加了這個設備。這個“設備標識符”是作爲一類設備的區別其他類型設 備的特徵,必須根據它去檢測是否有合適的驅動。驅動的安裝信息是由INF文件控制,在INF文件中有一個域標識出驅動適合的設備的“設備標識符”,因此搜 索過程也就是搜索符合條件的INF文件。

在哪些地方搜索呢?在(Windows Server 2003, Windows XP, and Windows 2000) 中,首先搜索的路徑有兩個:1、windows INF文件夾;2、註冊表中的DevicePath 鍵值路徑(以DevicePath 作爲關鍵詞搜索註冊表就能找到)。從這裏也能推斷出安裝驅動後,INF文件會被拷貝到這兩個路徑下。

在搜索的時候,系統會給每個符合條件的驅動進行匹配度排名,最後排名最前的驅動就被選擇。至於如何進行排名,這裏就不贅述,可以參考http://msdn.microsoft.com/en-us/library/aa477008.aspx

如果在上面的過程中搜索不到合適的安裝INF文件,系統就會彈出“找到新的硬件設備嚮導”頁面,需要用戶選擇驅動所在的位置。如果搜索到合適的INF文件,系統會選擇排名最前的驅動進行安裝,到此,整個搜索和選擇過程就完成了。

下面以插入一個未安裝驅動的設備後,系統搜索和選擇驅動的過程爲例,從程序員的角度去分析這個過程。

1、當用戶態PnP管理中心接收到新設備的驅動安裝命令後,創建一個新的進程並調用newdev.dll進行驅動安裝;

2、newdev.dll調用 SetupDiBuildDriverInfoList 創建一個設備驅動鏈,就進行驅動搜索並找到所有可能的驅動,這就是上面所說的驅動搜索過程。由於是第一次安裝,會返回一個空的驅動鏈,因此newdev.dll會彈出“找到新的設備嚮導”,要求用戶選擇驅動所在的路徑,用戶選擇完畢,再次調用 SetupDiBuildDriverInfoList 創建新的設備驅動鏈。

3、newdev.dll調用SetupDiCallClassInstaller 發送一系列的DIF請求,包括:DIF_SELECTBESTCOMPATDRV , DIF_ALLOW_INSTALL , DIF_INSTALLDEVICEFILES , DIF_REGISTER_COINSTALLERS , DIF_INSTALLINTERFACES , DIF_INSTALLDEVICE .。從命令可以看出處理DIF_SELECTBESTCOMPATDRV 請求就是選擇最匹配驅動的過程,調用SetupDiEnumDriverInfo SetupDiGetDriverInstallParams 分別例舉驅動及其參數,並調用SetupDiSetSelectedDriver 選擇驅動。

發佈了30 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章