デバイス情報セット
ユーザーモードでは、デバイスセットアップクラスまたはデバイスインターフェイスクラスのいずれかに属するデバイスは、デバイス情報要素とデバイス情報セットを使用して管理されます。デバイス情報セットは、デバイスセットアップクラスまたはデバイスインターフェイスクラスに属する、全デバイスのデバイス情報要素で構成されます。
各デバイス情報要素には、デバイスの devnode へのハンドルと、その要素によって記述されたデバイスに関連付けられているすべてのデバイスインターフェイスのリンクされたリストへのポインターが含まれています。 デバイス情報セットでセットアップクラスのメンバーが記述されている場合、セットアップクラスのメンバーは必ずしもインターフェイスに関連付けられていないため、要素はどのデバイスインターフェイスも指さない可能性があります。
次の図は、デバイス情報セットの内部構造を示しています。
デバイス情報セットの作成
SetupDiCreateDeviceInfoList を使用してデバイス情報セットを作成した後、SetupDiCreateDeviceInfo を使用してデバイス情報要素を一度にひとつずつ作成してリストに追加できます。 または、 SetupDiGetClassDevs を呼び出して、指定されたデバイスセットアップクラスまたはデバイスインターフェイス クラスに関連付けられているすべてのデバイスで構成されるデバイス情報セットを作成できます。
デバイス情報 の列挙
デバイス情報セットが作成されると、デバイスとセットに属するデバイスインターフェイスの両方を列挙できますが、列挙型の種類ごとに異なる操作が必要になります。 SetupDiEnumDeviceInfo は、特定の条件を満たす情報セットに属するすべてのデバイスを列挙します。 SetupDiEnumDeviceInfo を呼び出すたびに、デバイス情報要素にほぼ対応する SP_DEVINFO_DATA の構造が抽出されます。 SP_DEVINFO_DATA には、デバイスが属するクラスの GUID と 、デバイスの devnode を指すデバイス インスタンス のハンドルが含まれます。 SP_DEVINFO_DATA の構造と完全なデバイス要素の主な違いは、SP_DEVINFO_DATA にデバイスに関連付けられているインターフェイスのリンクされたリストが含まれていないということです。 そのため、 SetupDiEnumDeviceInfo を使用して、デバイス情報セット内のインターフェイスを列挙することはできません。
デバイス情報セット内のデバイスインターフェイスを列挙するには、SetupDiEnumDeviceInterfaces を呼び出します。 このルーチンは、デバイス情報セット内のすべてのデバイス情報要素をステップ実行し、各要素のインターフェイスリスト内のインターフェイスを抽出し、各呼び出しでひとつのインターフェイスを返します。 SetupDiEnumDeviceInterfaces が 2 番目のパラメーターの入力としてSP_DEVINFO_DATA 構造体を渡された場合、列挙体は、SP_DEVINFO_DATA によって示されるデバイスに関連付けられているインターフェイスのみに制限されます。
SetupDiEnumDeviceInterfaces は、SP_DEVICE_INTERFACE_DATA の構造体を返します。 SP_DEVICE_INTERFACE_DATAには、インターフェイスクラス GUID と、インターフェイスの名前を取得するために使用できるエンコードされた情報を含む予約済みフィールドなど、インターフェイスに関するその他の情報が含まれます。 インターフェイス名を取得するには、さらにひとつの手順が必要です。 SetupDiGetDeviceInterfaceDetail を呼び出す必要があります。 SetupDiGetDeviceInterfaceDetail は、インターフェイスを定義するシステムオブジェクトツリー内のパスを含む SP_DEVICE_INTERFACE_DETAIL_DATA タイプの構造を返します。