WindowsでDeviceManagerに行く場合->デバイスを選択(aaキーボードのように)->詳細に移動->プロパティのリスト:
Device description
Hardware Ids
Compatible Ids
Device class
Device class guid
Driver key
ConfigFlags
... etc
これらの各プロパティの意味はどこで確認できますか?
MSDNのドキュメントから、デバイスインスタンスIDの説明があり、他の説明へのリンクがあります。このリンクでは、それらのいくつかについて簡単に説明しています。これらは次のようにリストされています。
デバイスID
デバイスIDはベンダー定義の識別文字列であり、セットアップがデバイスをINFファイルと照合するために使用する最も具体的なIDです。デバイスにはデバイスIDが1つだけあります。デバイスIDの形式はハードウェアIDと同じです。列挙子がデバイスのハードウェアIDのリストを報告する場合、デバイスIDはリストの最初のハードウェアIDである必要があります。
PnPマネージャーは、デバイスIDを使用して、デバイスの列挙子のレジストリキーの下にデバイスのサブキーを作成します。
デバイスIDを取得するには、IRP_MN_QUERY_ID要求を使用し、Parameters.QueryId.IdTypeフィールドをBusQueryDeviceIDに設定します。
ハードウェアID
ハードウェアIDは、セットアップがデバイスをINFファイルと照合するために使用するベンダー定義の識別文字列です。ほとんどの場合、デバイスにはハードウェアIDのリストが関連付けられています。(ただし、例外があります。1394デバイスの識別子を参照してください)。リストの最初のハードウェアIDはデバイスIDである必要があり、残りのIDは適合性の高い順にリストされている必要があります。
ハードウェアIDには、次の一般的な形式のいずれかがあります。
<enumerator>\<enumerator-specific-device-ID>
これは、単一の列挙子によってPnPマネージャーに報告される個々のPnPデバイスの最も一般的な形式です。新しい列挙子は、この形式または次の形式を使用する必要があります。*<enumerator-specific-ID>
アスタリスクは、デバイスがISAPNPやBIOSなどの複数の列挙子によってサポートされていることを示します。<device-class-specific-ID>
独自の命名規則を確立している既存のデバイスクラスは、カスタム形式を使用する場合があります。それらのハードウェアID形式については、そのようなバスのハードウェア仕様を参照してください。新しい列挙子はこの形式を使用しないでください。NULLターミネータを除くハードウェアIDの文字数は、MAX_LENGTH_LEN未満である必要があります。この制約は、ハードウェアID内のすべてのフィールドと「\」フィールド区切り文字の長さの合計に適用されます。さらに、インスタンスIDをハードウェアIDに連結してデバイスインスタンスIDを作成する場合、ハードウェアIDとインスタンスIDの長さは、デバイスインスタンスIDの可能な最大長によってさらに制限されます。デバイスのハードウェアIDのリストを取得するには、DevicePropertyパラメーターをDevicePropertyHardwareIDに設定してIoGetDevicePropertyを呼び出します。このルーチンが取得するハードウェアIDのリストは、REG_MULTI_SZ値です。各ハードウェアIDの後のNULLターミネータと最後のNULLターミネータを含むハードウェアリストの最大文字数は、REGSTR_VAL_MAX_HCID_LENです。ハードウェアIDのリストで可能なIDの最大数はMAX_HCID_COUNTです。
ハードウェアIDの例
以下では、最初の例はPnPデバイスの一般的な識別子であり、2番目の例はPCIデバイスの識別子です。
ルート*PNP0F08
PCI \ VEN_1000&DEV_0001&SUBSYS_00000000&REV_02
互換性のあるID
互換性のあるIDは、セットアップがデバイスをINFファイルと照合するために使用するベンダー定義の識別文字列です。デバイスには、互換性のあるIDのリストを関連付けることができます。互換性のあるIDは、適合性の高い順にリストする必要があります。セットアップがデバイスのハードウェアIDの1つと一致するINFファイルを見つけることができない場合、セットアップは互換性のあるIDを使用してINFファイルを見つけます。互換性のあるIDは、ハードウェアIDと同じ形式です。ただし、互換性のあるIDは通常、ハードウェアIDよりも一般的です。
ベンダーがドライバーノードの互換性のあるIDを指定するINFファイルを出荷する場合、ベンダーは、INFファイルが互換性のあるIDに一致するすべてのハードウェアをサポートできることを確認する必要があります。互換性のあるIDとの一致は、ハードウェアIDとの一致ほど強力ではないため、PnPマネージャーは、INFファイルを処理する前にユーザーに確認を求めます。
デバイスの互換性のあるIDのリストを取得するには、DevicePropertyパラメーターをDevicePropertyCompatibleIDに設定してIoGetDevicePropertyを呼び出します。このルーチンが取得する互換性のあるIDのリストは、REG_MULTI_SZ値です。互換性のあるIDリスト内の最大文字数(各互換性IDの後のNULLターミネータと最後のNULLターミネータを含む)は、REGSTR_VAL_MAX_HCID_LENです。互換性のあるIDのリストで可能なIDの最大数はMAX_HCID_COUNTです。
インスタンスID
インスタンスIDは、マシン上の同じタイプの他のデバイスからデバイスを区別するデバイス識別文字列です。インスタンスIDには、基になるバスでサポートされている場合はシリアル番号情報、またはある種の位置情報が含まれます。文字列に「\」文字を含めることはできません。それ以外の場合、文字列の一般的な形式はバス固有です。
NULLターミネータを除くインスタンスIDの文字数は、MAX_LENGTH_LEN未満である必要があります。さらに、インスタンスIDをデバイスIDに連結してデバイスインスタンスIDを作成する場合、デバイスIDとインスタンスIDの長さは、デバイスインスタンスIDの可能な最大長によってさらに制限されます。
デバイスのDEVICE_CAPABILITIES構造体のUniqueIDメンバーは、次のように、バスが提供するインスタンスIDがシステム全体で一意であるかどうかを示します。
UniqueIDがFALSEの場合、デバイスのバス提供インスタンスIDは、デバイスのバスに対してのみ一意です。PnP Managerは、バスが提供するインスタンスIDを変更し、それを対応するデバイスIDと組み合わせて、システム内で一意のデバイスインスタンスIDを作成します。UniqueIDがTRUEの場合、バスが提供するデバイスIDとインスタンスIDから形成されるデバイスインスタンスIDは、システム内のデバイスを一意に識別します。インスタンスIDは、システムの起動後も永続的です。
デバイスのバス提供のインスタンスIDを取得するには、IRP_MN_QUERY_ID要求を使用して、Parameters.QueryId.IdTypeメンバーをBusQueryInstanceIDに設定します。
デバイスインスタンスID
デバイスインスタンスIDは、システム内のデバイスを一意に識別する、システムが提供するデバイス識別文字列です。PnP Managerは、システムのデバイスツリー内の各デバイスノードにデバイスインスタンスIDを割り当てます。
この文字列の形式は、次のように、デバイスIDに連結されたインスタンスIDで構成されます。
\ NULLターミネータを除くデバイスインスタンスIDの文字数は、MAX_LENGTH_LEN未満である必要があります。この制約は、すべてのフィールドの長さの合計と、デバイスIDフィールドとインスタンス固有のIDフィールドの間の「\」フィールドセパレーターに適用されます。デバイスインスタンスIDは、システムの起動後も永続的です。
次に、PCIデバイスのデバイスIDに連結されたインスタンスID( "1&08")の例を示します。
PCI \ VEN_1000&DEV_0001&SUBSYS_00000000&REV_02 \ 1&08
そのほとんどは、「セットアップ API」を介して公開されます。一部のデータはドライバー固有のものである可能性があり、その場合はドライバーの作成者に問い合わせる必要があります。リストしたものはすべて標準の Microsoft プロパティです。たとえば、「デバイスクラス」は、それがどのタイプのデバイスであるかを説明します。マウス/キーボード/ストレージ/ビデオカード/オーディオ/...