[Windows] デバイスドライバがインストールされるときの流れ

msdnの中にドキュメントがあったのでメモ。
How Windows Installs Devices

Step 1: 新デバイスを識別

bus driver、hub driverがデバイスにhardware IDを割り当てる。

典型的なhardware IDは、先頭にバス固有文字列 (\USBなど)、続けてベンダーが付ける文字列(モデル名、バージョンなど)。ベンダーによっては、INF file内にもっと汎用的なcompatible IDを複数個持たせることもできる。Windowsがharadware IDでdriver packageを検索できない(マッチしない)ときはcompatible IDで検索する。USBデバイスの場合のIDでプリンタなど特殊なもの以外については
Standard USB Identifiersで説明。

USBデバイスが装着されたときの例。

  1. deviceをUSB hub driverが検知。デバイスへの問い合わせした情報を使ってharadware IDを生成。
  2. USB hub driverはPlug and Play Managerにデバイス検知を通知。PnP managerはhub driverからhardware IDを受け取る。
  3. PnP managerはWindowsにデバイスドライバのインストールが必要と通知。Windowsはhardware IDをPnP managerから受け取る。
  4. Windowsはdriver package探索を開始。見つからなければcompatible IDを使って探索。

Step 2: デバイスドライバを選択

Windowsはdriver packageの候補を複数見つけ、その中から最適なものを選択する。

検索の順番

Windowsのバージョンによって検索する場所が異なる。
Vistaはdriver store だけを検索。Windows 7以降は、Windows Update, driver store, DevicePath(HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersionのDevicePathの値で定義)を探索。

候補が一個ならばそれをインストールする。
複数個あるときはランキングを決め、ランキング数の低い(良いマッチング)ものをインストール。同じランクで複数あった場合は、

署名があるもの
INF内の日付とバージョン

を基準に選択。

詳細:How Windows Ranks Driversにある。

Step 3: インストール

同一モデル、同一バージョンのデバイスが複数装着され得る。それぞれの接続に対してdevice instance (devnode)が生成される。driverごとにdriver nodeインスタンスが生成される。この2つが生成されるとインストールが始まる。

driver packageのINFファイルの情報に基づいて実行が進む。

  1. INF CopyFilesディレクティブで指定されたところにファイルをコピー
  2. DDInstall.CoInstallers セクションにあるco-installerを登録
  3. ClassとClassGuidからdevice setup classを決める。
  4. driverがコピーされ、co-installerが登録されるとWindowsから PnP managerに制御が移る。
  5. Pnp Managerはドライバをロードしデバイスを始動
  6. PnP Managerはfunction driverやオプショナルなfilter driverをロード
  7. co-installerがあればWindowsからdevice installation function(DIF)コードをco-installerに発行
広告

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。