本章提供一個裝置安裝過程的高階概述。這個處理過程為當一個新的裝置連接到電腦時,由Windows以及裝置的安裝組件所執行,並由以下的步驟所組成:
Step1: 新的裝置被識別
在新裝置安裝驅動程式之前,裝置所連接的bus或是hub驅動會配置一個硬體識別碼(hardware ID)給裝置。Windows使用硬體識別碼來找尋最適合的裝置驅動包。
一個獨立硬體供應商(IHV)也可以定義一個或多個裝置相容識別碼(compatible IDs)。識別碼的格式類似硬體識別碼; 然而比起硬體識別碼更為通用,並且不需要特定的製造商或型號的訊息。如果作業系統透過硬體識別碼找不到匹配的驅動程式包,那Windows就會使用這些識別碼來選擇一個裝置驅動程式包。IHVs可以在INF檔案裡指定一個或多個compatible IDs。
Windows使用硬體識別碼以及相容識別碼來收尋裝置的驅動程式包。通過將設備的硬件ID和相容的ID與包的INF文件中指定的ID進行比較,為設備找到匹配的驅動程式包。
舉例當一個使用者將一個WLAN adapter插進電腦端的USB hub,會發生以下的事情:
- USB hub驅動程式會偵測到這個裝置。根據他從adapter查詢的信息,hub驅動程式會建立裝置的硬體識別碼。例如USB hub驅動對WLAN adapter建立USB\VID_1234&PID_5678&REV_0001 的硬體識別碼。其中VID_1234為供應商(vendor)識別碼,PID_5678為產品或是型號的識別碼,REV_001為裝置的修訂識別碼。
- USB hub驅動通知隨插即用管理員(PNP manager)已偵測到一個新的裝置。隨插即用管理員向hub驅動詢問此裝置所有的硬體識別碼。這個hub驅動可以對相同的裝置建立多個硬體識別碼。
- 隨插即用管理員通知Windows有一個新的裝置需要被安裝。作為通知的一部分,Windows得到一組硬體識別碼的列表。
- Windows開始收尋符合裝置識別碼的驅動包。如果無法透過硬體識別碼來找到匹配的驅動包,則會透過相容識別碼來找尋。
Step2: 裝置驅動被選取
當偵測以及辨識一個新的裝置以後,Windows以及他的裝置安裝組件會按照下面的步驟:
- Windows為裝置收尋適合的驅動程式包。使用硬體識別碼來收尋適合的裝置驅動包。如果硬體識別碼或是相容識別碼符合INF黨內的ID,表示為適合的裝置驅動程式包。 根據作業系統版本的不同,Windows將在各個位置搜索匹配的驅動程式包。舉例在W7插入一個WLAN adapter,會發生以下的事情:在USB hub建立了WLAN adapter的硬體識別碼列表後,Windows 首先會收尋裝置儲存區(driver store)內符合的裝置驅動程式包。裝置安裝程序會在下面其中一個位置找尋匹配的驅動程式包。如果找到了一個驅動安裝包,則會將它放入驅動儲存區。如果是Windows 8以後則會發生以下的事情:在USB hub建立了WLAN adapter的硬體識別碼列表後,Windows 首先會收尋驅動儲存區(driver store)內符合的裝置驅動程式包。如果找到了一個驅動安裝包,則會立即安裝這個驅動程式。這個改動讓裝置可以更快的啟動。另外,在另一個程序,Windows會收尋Windows Update以及DevicePath,看有沒有比安裝的驅動更適合的驅動包。如果有發現,則會將它放入驅動儲存區內,然後在稍後安裝他。
- Windows從一個或多個驅動程式包中為設備選擇最合適的驅動程式。
一旦Windows找到一個或多個匹配的裝置驅動包,Windows透過以下的步驟選擇最好的驅動包:
1) 如果只有找到一個匹配的驅動包,則安裝此包。
2) 如果找到多個匹配的驅動程式包,則Windows會對每一個驅動程式包,分配一個排名值,Windows會選擇最低排名值的驅動包來安裝。
3) 如果多個驅動包擁有相同的最低排名值,Windows會使用下面的條件來選擇最佳的驅動程式: (3.1) 驅動是否有被數位簽屬,始於Windows Vista,Windows總是會選擇簽屬的驅動來取代未簽屬的驅動程式。(3.2)在INF檔內的驅動日期以及版本。
Step3: 該設備的驅動程序已安裝
在Windows對新的裝置選取了最佳的驅動以後,他透過以下的方式保存裝置與驅動的訊息:
- 電腦可以連接擁有相同型號以及版本的多個裝置。每個設備連接表示為一個設備實體。Windows將每個設備實例表示為唯一的設備節點(devnode)。 devnode包含有關設備的信息,例如設備是否已啟動以及哪些驅動程序已在設備上註冊通知。
- Windows將每一個裝置驅動表示為一個驅動節點(driver node)。驅動節點包含所有裝置的所有軟體支援,例如任何的服務以及註冊項目。
- 根據驅動程式包的INF文件中的指令,Windows執行以下的操作:
將驅動程式的binary檔和其他關聯的文件複製到INF CopyFiles指令指定的硬碟上的位置。執行裝置實體有關的設定,例如註冊機碼的撰寫。 - Windows從驅動程式包的INF文件的Class和ClassGuid中確定設備設置類。為了優化裝置的安裝,對於同一類的裝置設定類將以相同方式設定和配置。
- 一旦驅動檔案被複製以後,Windows將控制權轉給PnP管理者。PnP管理者會讀取驅動並且啟動裝置。
- PnP管理者為了裝置加載相應的驅動以及可選的過濾式驅動。PnP管理者對尚未加載的驅動調用DriverEntry歷程。然後PnP管理者會對每一個驅動調用AddDevice歷程,始於低過濾式驅動(lower-filter),然後功能驅動(function driver),最後是高過濾式驅動(High-filter)。PnP對裝置配置資源,並且發送IRP_MN_START_DEVICE給裝置驅動程式。