ハードウェアID
ハードウェア ID は、Windows がデバイスを ドライバー パッケージに照合するために使用するベンダー定義の識別文字列です。 ハードウェア ID は、デバイスを識別し、それを宣言するすべてのドライバー パッケージが、ある程度の機能のためにその ID を持つデバイスで動作できることを示します。 ほとんどの場合、デバイスには複数のハードウェア ID が関連付けられています。 通常、ハードウェア ID の一覧は、デバイスに最も適した順に並べ替えられます。 たとえば、デバイスの概念的なハードウェア ID の一覧は次のようになります。
<Product X made by company Y with firmware revision Z>
<Product X made by company Y that is a device of type W>
実際のハードウェア ID は、ハードウェア ID の形式要件に従う文字列を使用してこれらの概念を表します。
デバイスのハードウェア ID の作成
ハードウェア ID は、デバイスの 列挙子 (バス ドライバー) によってプラグ アンド プレイ マネージャー (PnP) に報告されます。 通常、バス ドライバーの作成者が PnP に報告するデバイスの新しいハードウェア ID を作成する必要がある場合は、次のいずれかの汎用形式を使用します。
<enumerator>\<enumerator-specific-device-ID>
この形式は、単一の列挙子によってプラグ アンド プレイ (PnP) マネージャーに報告される個々の PnP デバイスで最も一般的です。
\*<generic-device-ID>
アスタリスクは、ISAPNP や BIOS など、複数の列挙子がデバイスをサポートしていることを示します。
<device-class-specific-ID>
詳細については、「汎用識別子の
独自の名前付け規則が確立された既存のデバイス クラスでは、カスタム形式が使用される場合があります。 ハードウェア ID 形式の詳細については、このようなバスのハードウェア仕様を参照してください。
NULL ターミネータを除くハードウェア ID の文字数は、MAX_DEVICE_ID_LEN
未満にする必要があります。 この制約は、すべてのフィールドの長さと、ハードウェア ID の \\
フィールド区切り記号の合計に適用されます。 詳細については、「IRP_MN_QUERY_IDの 操作」セクションを参照してください。
ルート列挙デバイスのハードウェア ID
ルート列挙デバイスは、ハードウェア ID を指定できる API を使用して作成できる点で特別です。 ROOT\SYSTEM
などの一般的な名前空間を共有するハードウェア ID を持つルート列挙デバイスが競合し、Windows の更新時に Device Manager で黄色のエラー アイコンが表示される可能性があります。
ルート列挙デバイスを持つドライバーごとに一意の名前空間を使用することで、このエラーを回避できます。 USB またはシステム デバイスの場合は、ROOT\USB
または ROOT\SYSTEM"
を使用する代わりに、ROOT\[COMPANYNAME]\[DEVICENAME]
を使用します。 次に、インストールする前に、devnode が既に存在するかどうかを確認します。
デバイスのハードウェア ID の一覧を取得する
特定のデバイスのハードウェア ID の一覧を見つけるには、次の手順に従います。
- デバイス マネージャーを開きます。
- ツリーでデバイスを見つけます。
- デバイスを右クリックし、[プロパティ]
選択します。 - [詳細] タブを選択します。
- [プロパティ] ドロップダウンで、[ハードウェア ID] または [互換性のある ID] を選択します。
ハードウェア ID の一覧は、デバイスの DEVPKEY_Device_HardwareIds プロパティを取得することで、プログラムによって取得することもできます。 たとえば、そのプロパティは、IoGetDevicePropertyData、SetupDiGetDeviceProperty、CM_Get_DevNode_Propertyなどの API を使用して取得できます。
このルーチンが取得するハードウェア ID の一覧は、REG_MULTI_SZ 値です。 ハードウェア一覧の最大文字数は、各ハードウェア ID の後の NULL 終端文字と最後の NULL 終端文字を含め、REGSTR_VAL_MAX_HCID_LEN
です。 ハードウェア ID の一覧に含まれる ID の最大数は 64 です。
ハードウェア ID の例
PnP デバイスの 汎用識別子 の例を次に示します。
root\*PNP0F08
PCI デバイスの
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02