次の方法で共有


デバイス情報セット

ユーザー モードでは、 デバイス セットアップ クラス または デバイス インターフェイス クラスのいずれかに属するデバイスは、 デバイス情報要素デバイス情報セット を使用して管理されます。デバイス情報セットは、デバイス セットアップ クラスまたはデバイス インターフェイス クラスに属するすべてのデバイスのデバイス情報要素で構成されます。

各デバイス情報要素には、デバイスの devnode へのハンドルと、その要素によって記述されたデバイスに関連付けられているすべてのデバイス インターフェイスのリンクされたリストへのポインターが含まれています。 デバイス情報セットでセットアップ クラスのメンバーが記述されている場合、セットアップ クラスのメンバーは必ずしもインターフェイスに関連付けられていないため、要素はどのデバイス インターフェイスも指さない可能性があります。

次の図は、デバイス情報セットの内部構造を示しています。

デバイス情報セットを示す図。

デバイス情報セットの作成

SetupDiCreateDeviceInfoList を使用してデバイス情報セットを作成した後、SetupDiCreateDeviceInfo を使用してデバイス情報要素を一度に 1 つずつ作成してリストに追加できます。 または、 SetupDiGetClassDevs を呼び出して、指定されたデバイス セットアップ クラスまたはデバイス インターフェイス クラスに関連付けられているすべてのデバイスで構成されるデバイス情報セットを作成できます。

デバイス情報の列挙

デバイス情報セットが作成されると、デバイスとセットに属するデバイス インターフェイスの両方を列挙できますが、列挙型の種類ごとに異なる操作が必要になります。 SetupDiEnumDeviceInfo は、特定の条件を満たす情報セットに属するすべてのデバイスを列挙します。 SetupDiEnumDeviceInfo を呼び出すたびに、デバイス情報要素にほぼ対応するSP_DEVINFO_DATA構造が抽出されます。 SP_DEVINFO_DATAには、デバイスが属するクラスの GUID と、デバイスの devnode を指す デバイス インスタンス ハンドルが含まれます。 SP_DEVINFO_DATA構造体と完全なデバイス要素の主な違いは、SP_DEVINFO_DATAにデバイスに関連付けられているインターフェイスのリンクされたリストが含 まれていない 点です。 そのため、 SetupDiEnumDeviceInfo を使用して、デバイス情報セット内のインターフェイスを列挙することはできません。

デバイス情報セット内のデバイス インターフェイスを列挙するには、 SetupDiEnumDeviceInterfaces を呼び出します。 このルーチンは、デバイス情報セット内のすべてのデバイス情報要素をステップ実行し、各要素のインターフェイス リスト内のインターフェイスを抽出し、各呼び出しで 1 つのインターフェイスを返します。 SetupDiEnumDeviceInterfaces が 2 番目のパラメーターの入力としてSP_DEVINFO_DATA構造体を渡された場合、列挙体は、SP_DEVINFO_DATAによって示されるデバイスに関連付けられているインターフェイスのみに制限されます。

SetupDiEnumDeviceInterfaces、SP_DEVICE_INTERFACE_DATA 構造体を返します。 SP_DEVICE_INTERFACE_DATAには、インターフェイス クラス GUID と、インターフェイスの名前を取得するために使用できるエンコードされた情報を含む予約済みフィールドなど、インターフェイスに関するその他の情報が含まれます。 インターフェイス名を取得するには、さらに 1 つの手順が必要です。 SetupDiGetDeviceInterfaceDetail を呼び出す必要があります。 SetupDiGetDeviceInterfaceDetail は、インターフェイスを定義するシステム オブジェクト ツリー内のパスを含む SP_DEVICE_INTERFACE_DETAIL_DATA 型の構造体を返します。