web-dev-qa-db-ja.com

Windowsが.infファイルを使用して正しいドライバーをロードする方法

Windowsがそのデバイスのドライバーをロードしているときにハードウェアデバイスが2つ以上のinfファイルと一致するとどうなりますか?

たとえば、私のPCのディスクドライブには、cdrom.sysとiaStorF.sysの2つのドライバがロードされています。 cdrom.sysはcdrom.infファイルからロードされ、iaStorF.sysはIntelからインストールしたoem2.infファイルからロードされました。

Windowsはすべてのinfファイルを検索し、一致するものをロードしますか?

もしそうなら、これは「プライマリINFファイル」です。ディスクドライブをクリックして[詳細]タブに移動し、inf名を確認したときにデバイスマネージャでこれが意味することです。 、oem2.infとも一致していても、cdrom.infファイルが表示されます。

次にモニターを見ると、2つのinfファイルoem22.infとmonitor.infからロードされた2つのドライバーもあります。 「詳細」とinf名の下に、oem22.infが表示されます。

なぜmonitor.infではなくoem22.infを選択したのですか?

5
RJSmith92

その実際には1つの主要なドライバー。もう1つは、フィルタードライバー(iaStorF.sys)です。ここで、Fはフィルターを意味します。

フィルタドライバは、周辺機器の機能を拡張または変更したり、パーソナルコンピュータの専用機器をサポートしたりするMicrosoftWindowsドライバです。特定の機能を実行するために既存のドライバースタックに挿入されるのは、ドライバー、プログラム、またはモジュールです。( wikipedia

これが私のシステムのスクリーンショットです。ディスクドライブ用です。

HKLM\System\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}

enter image description here

メインドライバーはdisk.sysで、他の3つはすべてフィルタードライバーです。EhStoreClass.sysとpartmgr.sysはWindows 8のデフォルトのMSドライバーであり、edevmon.sysはesetのものです。

モニターの場合、追加のinfはオプションであり、カラープロファイル(.icm)やEDID情報など、容量を拡張するために使用されます。これらのinfはモニターの動作に必要ではなく、monitor.sysのみが必要です。 ( [〜#〜] msdn [〜#〜]


フィルタドライバに関する詳細については、後で参照できるようにここで再現します。( [〜#〜] msdn [〜#〜]

フィルタドライバは、デバイスに値を追加したり、デバイスの動作を変更したりするオプションのドライバです。フィルタドライバは、1つ以上のデバイスにサービスを提供できます。バスフィルタードライバー

バスフィルタードライバーは通常、バスに付加価値を与え、MicrosoftまたはシステムOEMによって提供されます(可能なドライバーレイヤーの図を参照)。バスフィルタードライバーはオプションです。バスには、バスフィルタードライバーをいくつでも使用できます。

バスフィルタードライバーは、たとえば、標準のバスハードウェアに独自の拡張機能を実装できます。

ACPI BIOSによって記述されたデバイスの場合、電源マネージャーは、Microsoftが提供するACPIフィルター(バスフィルタードライバー)を、そのような各デバイスのバスドライバーの上に挿入します。 ACPIフィルターは、デバイスの電源ポリシーを実行し、デバイスの電源をオンまたはオフにします。 ACPIフィルターは他のドライバーに対して透過的であり、非ACPIマシンには存在しません。下位レベルのフィルタードライバー

下位レベルのフィルタードライバーは通常、デバイスハードウェアの動作を変更します(可能なドライバーレイヤーの図を参照)。これらは通常、IHVによって提供され、オプションです。デバイスには、低レベルのフィルタードライバーをいくつでも使用できます。

下位レベルのデバイスフィルタードライバーは、特定のデバイスへのI/O要求を監視および/または変更します。通常、このようなフィルターは、ハードウェアの動作を再定義して、予想される仕様に一致させます。

下位レベルのクラスフィルタードライバーは、デバイスのクラスに対するI/O要求を監視および/または変更します。たとえば、マウスデバイス用の低レベルクラスのフィルタードライバーは、加速を提供し、マウスの動きデータの非線形変換を実行できます。上位レベルのフィルタードライバー

上位レベルのフィルタードライバーは通常、デバイスに付加価値機能を提供します(可能なドライバーレイヤーの図を参照)。このようなドライバーは通常IHVによって提供され、オプションです。デバイスには、上位レベルのフィルタードライバーをいくつでも使用できます。

上位レベルのデバイスフィルタードライバーは、特定のデバイスに価値を付加します。たとえば、キーボードの上位レベルのデバイスフィルタードライバーは、追加のセキュリティチェックを実施できます。

上位レベルのクラスフィルタードライバーは、特定のクラスのすべてのデバイスに値を追加します。

2
Chris.C

いくつかの情報は、この古いMicrosoftの記事(XP時間)にあります。
Windowsがセットアップ中にインストールするのに最適なデバイスドライバーを決定する方法

Windowsセットアップを実行すると、特定のデバイスで動作するデバイスドライバーまたは.infファイルのセットが複数ある場合があります。 SetupとPlugand Playはどちらも、インストールされているデバイスに最も適したデバイスドライバーを選択することにより、これらの競合を解決しようとします。

プラグアンドプレイでは、すべての.infファイルを検索して、特定のデバイスにインストールするのに最適なデバイスドライバーを探すことができます。プラグアンドプレイは、プラグアンドプレイが最初に一致したものの検索を停止しません。プラグアンドプレイは、次のレジストリエントリで定義されているように、プラグアンドプレイの検索パスにリストされているすべての.infファイルを引き続き検索します。

HKEY-LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion

DevicePath:Reg_Expand_SZ:%Systemroot%\ Inf

セットアップは、.infファイルに一致するものを含む互換性のあるデバイスドライバーのリストを作成し、見つかった各ドライバーに「ランク」を割り当てます。ランクの範囲は「0」から「0xFFFF」で、0が最も適切な一致で、0xFFFFが最悪の一致です。ランクが最も低いデバイスドライバーが最も適切な一致と見なされ、インストールされているデバイスドライバーです。

ただし、2つのデバイスドライバーのランクが同じである場合、セットアップは最新の日付のデバイスドライバーを使用します。一方のデバイスドライバーが署名され、もう一方のデバイスドライバーが署名されていない場合、署名されていないデバイスドライバーの日付に値0xFFFFFFFFが割り当てられ、署名されたデバイスドライバーが選択されてインストールされます。

デフォルトでは、64ビットのWindowsバージョンは署名されていないドライバーを候補として受け入れないことに注意してください。これは、32ビットWindowsでのみ可能です。

次の記事には最新のアルゴリズムが含まれています: Windowsがドライバーをランク付けする方法

Windowsは、デバイスに一致するドライバーにランクを割り当てます。ランクは、ドライバーがデバイスとどの程度一致しているかを示します。ドライバーランクは、ゼロ以上の整数で表されます。ランクが低いほど、ドライバーとデバイスの一致度が高くなります。

ドライバーのランクは、ドライバーの署名方法、ドライバーでサポートされている機能、およびデバイスによって報告される デバイス識別文字列 間の一致のタイプに依存する複合値です。ドライバーINFファイルの INFモデルセクション のエントリで指定されているデバイス識別文字列。

ランクは、タイプDWORDの値で表されます。ランクは、署名スコア、機能スコア、および識別子スコアの合計です。ランクは0xSSGGTHHHとしてフォーマットされます。ここで、S、G、T、およびHは4ビットフィールドであり、SS、GG、およびTHHHフィールドは次のように3つのランキングスコアを表します。

  • 署名スコア は、ドライバーの署名方法に従ってドライバーをランク付けします。シグニチャスコアは、SSフィールドの値のみに依存します。不特定の署名スコアは0xSS0000000として表されます。

Windows Vista以降のバージョンのWindowsがドライバーの署名を使用してドライバーのインストール方法を決定する方法の概要については、 署名のカテゴリとドライバーのインストール を参照してください。

基本的に、Windows署名機関によるデジタル署名のスコアが最も高くなります。

  • 機能スコア は、ドライバーがサポートする機能に基づいてドライバーをランク付けします。特徴スコアは、GGフィールドの値にのみ依存します。指定されていない特徴スコアは0x00GG0000として表されます。

この情報は.infファイル内で指定されるため、製造元は独自のドライバーを注文できます。

  • 識別子スコア は、デバイスによって報告される デバイス識別文字列 と、のエントリにリストされているデバイス識別文字列との間の一致のタイプに基づいてドライバーをランク付けします。 INFドライバーのモデルセクションINFファイル。識別子スコアはTHHHフィールドの値にのみ依存します。指定されていない識別子スコアは0x0000THHHとして表されます。

このテキストは非常に混乱していて混乱しています。識別子スコアのより良い説明については、リンクを参照してください。

3
harrymc