1. 程式人生 > >USB裝置驅動載入過程

USB裝置驅動載入過程

  1. 使用者插入USB裝置
  2. USB匯流排(或者是PCI匯流排,這個不太清楚,反正就是匯流排來著)識別到插入了USB裝置。
  3. 匯流排和USB裝置進行通訊,獲取USB的硬體ID、產品ID,以及bcdversion。根據這些資訊組成裝置硬體ID號:vid_xxxx&PID_xxxx&rev_xxxx。
  4. 匯流排根據USB裝置的插槽位置,生成一個例項ID,此ID只和插槽對映,同一裝置在不同插槽,會生成不同的例項ID;同一裝置在同一插槽,例項ID不會改動(不同裝置,同一插槽會怎麼樣就不知道了,知道的請告訴下)。
  5. 如下圖所示,裝置例項路徑中包含了3部分的內容,每部分用"\"分離,
    • 第一部分是匯流排型別,這裡是USB,就是USB匯流排型別
    • 第二部分是裝置ID號:vid_1BCF&PID_0501圖示中省略了rev_xxxx部分,這個部分可以在“屬性-->硬體ID"中看到
    • 第三部分是例項ID:6&10354432&0&8。

  6. 根據匯流排得到的資訊,系統在登錄檔”HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum“下尋找驅動程式。對於上面的裝置,驅動程式資訊在登錄檔路徑為:“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_1BCF&PID_0501\6&10354432&0&8”,如果找不到此路徑,就安裝驅動程式吧。路徑內容如下所示:

  7. 根據上面登錄檔的資訊,找到service鍵和class鍵的值。
    • 根據service的鍵值在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services中找到相關子鍵,子鍵中包含了USB裝置驅動程式的路徑,系統載入之。
    • 根據class的鍵值在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class中找到相關子鍵,子鍵中可能包含過濾驅動的資訊,有則載入之。

  8. 上面就是USB驅動裝置載入的基本流程了,也是PNP裝置載入的基本流程。