次の方法で共有


SetupDiGetClassDevsW 関数 (setupapi.h)

SetupDiGetClassDevs 関数は、ローカル コンピューターの要求されたデバイス情報要素を含む デバイス情報セットへのハンドルを返します。

構文

WINSETUPAPI HDEVINFO SetupDiGetClassDevsW(
  [in, optional] const GUID *ClassGuid,
  [in, optional] PCWSTR     Enumerator,
  [in, optional] HWND       hwndParent,
  [in]           DWORD      Flags
);

パラメーター

[in, optional] ClassGuid

デバイス セットアップ クラスの GUID または デバイス インターフェイス クラスへのポインター。 このポインターは省略可能であり、NULLできます。 ClassGuid設定する方法の詳細については、次の「解説」セクションを参照してください。

[in, optional] Enumerator

次を指定する NULL で終わる文字列へのポインター。

  • プラグ アンド プレイ (PnP) 列挙子の識別子 (ID)。 この ID には、値のグローバル一意識別子 (GUID) またはシンボリック名を指定できます。 たとえば、"PCI" を使用して PCI PnP 値を指定できます。 PnP 値のシンボリック名の他の例としては、"USB"、"PCMCIA"、"SCSI" などがあります。
  • PnP デバイス インスタンス ID。 PnP デバイス インスタンス ID を指定する場合は、flags パラメーターでDIGCF_DEVICEINTERFACEを設定する必要があります。
このポインターは省略可能であり、NULLできます。 列挙 値を使用してデバイスを選択しない場合は、列挙子 NULL を に設定します。

列挙子の 値を設定する方法の詳細については、次の 解説 セクションを参照してください。

[in, optional] hwndParent

デバイス情報セットへのデバイス インスタンスのインストールに関連付けられているユーザー インターフェイスに使用する最上位ウィンドウへのハンドル。 このハンドルは省略可能であり、NULLできます。

[in] Flags

デバイス情報セットに追加されるデバイス情報要素をフィルター処理する制御オプションを指定する DWORD 型の変数。 このパラメーターには、次のフラグの 0 個以上のビットごとの OR を指定できます。 これらのフラグの組み合わせの詳細については、次の 解説 セクションを参照してください。

DIGCF_ALLCLASSES

すべてのデバイス セットアップ クラスまたはすべてのデバイス インターフェイス クラスにインストールされているデバイスの一覧を返します。

DIGCF_DEVICEINTERFACE

指定したデバイス インターフェイス クラスのデバイス インターフェイスをサポートするデバイスを返します。 このフラグは、列挙子 パラメーターがデバイス インスタンス ID を指定する場合は、Flags パラメーターで設定する必要があります。

DIGCF_DEFAULT

指定されたデバイス インターフェイス クラスに対して、システムの既定のデバイス インターフェイスに関連付けられているデバイスのみを返します (設定されている場合)。

DIGCF_PRESENT

システムに現在存在するデバイスのみを返します。

DIGCF_PROFILE

現在のハードウェア プロファイルの一部であるデバイスのみを返します。

戻り値

操作が成功した場合、SetupDiGetClassDevs は、指定されたパラメーターと一致するすべてのインストール済みデバイスを含む デバイス情報セットへのハンドルを返します。 操作が失敗した場合、関数はINVALID_HANDLE_VALUEを返します。 拡張エラー情報を取得するには、GetLastError呼び出します。

備考

SetupDiGetClassDevs の呼び出し元は、SetupDiDestroyDeviceInfoList呼び出して不要になったときに、返されたデバイス情報セットを削除する必要があります。

SetupDiGetClassDevsEx 呼び出して、リモート コンピューター上のクラスのデバイスを取得します。

デバイス セットアップ クラスコントロールオプション

次のフィルター オプションを使用して、SetupDiGetClassDevs
がすべてのデバイス セットアップ クラスのデバイスを返すか、指定したデバイス セットアップ クラスに対してのみデバイスを返すかを制御します。
  • すべてのデバイス セットアップ クラスのデバイスを返すには、DIGCF_ALLCLASSES フラグを設定し、ClassGuid パラメーターを NULL設定します。
  • 特定のデバイス セットアップ クラスに対してのみデバイスを返すには、DIGCF_ALLCLASSESを設定せず、ClassGuid を使用してデバイス セットアップ クラスの GUID を指定します。
さらに、次のフィルターオプションを組み合わせて使用して、返されるデバイスをさらに制限できます。
  • システムに存在するデバイスのみを返すには、DIGCF_PRESENT フラグを設定します。
  • 現在のハードウェア プロファイルの一部であるデバイスのみを返すには、DIGCF_PROFILE フラグを設定します。
  • 特定の PnP 列挙子に対してのみデバイスを返すには、Enumerator パラメーターを使用して、列挙子の GUID またはシンボリック名を指定します。列挙子 が NULL場合、SetupDiGetClassDevs は、すべての PnP 列挙子のデバイスを返します。

デバイス インターフェイス クラスコントロールオプション

次のフィルター オプションを使用して、SetupDiGetClassDevs
、任意のデバイス インターフェイス クラスをサポートするデバイスを返すか、指定したデバイス インターフェイス クラスをサポートするデバイスのみを返すかを制御します。
  • 任意のクラスのデバイス インターフェイスをサポートするデバイスを返すには、DIGCF_DEVICEINTERFACE フラグを設定し、DIGCF_ALLCLASSES フラグを設定し、ClassGuid NULL設定します。 この関数は、このようなデバイスを表すデバイス情報要素をデバイス情報セットに追加し、デバイスがサポートするすべてのデバイス インターフェイスを含むデバイス インターフェイス リストをデバイス情報要素に追加します。
  • 指定したクラスのデバイス インターフェイスをサポートするデバイスのみを返すには、DIGCF_DEVICEINTERFACE フラグを設定し、ClassGuid パラメーターを使用して、デバイス インターフェイス クラスのクラス GUID を指定します。 この関数は、このようなデバイスを表すデバイス情報要素をデバイス情報セットに追加し、指定されたクラスのデバイス インターフェイスを、そのデバイス情報要素のデバイス インターフェイス リストに追加します。
さらに、次のフィルターオプションを使用して、SetupDiGetClassDevs がデバイス インターフェイス クラスのシステムの既定のインターフェイスをサポートするデバイスのみを返すかどうかを制御できます。
  • システムの既定のインターフェイスをサポートするデバイスのみを返すには、設定されている場合は、指定したデバイス インターフェイス クラスに対してDIGCF_DEVICEINTERFACE フラグを設定し、DIGCF_DEFAULT フラグを設定し、ClassGuid を使用してデバイス インターフェイス クラスのクラス GUID を指定します。 この関数は、このようなデバイスを表すデバイス情報要素をデバイス情報セットに追加し、そのデバイス情報要素のデバイス インターフェイス リストにシステムの既定のインターフェイスを追加します。
  • 指定されていないデバイス インターフェイス クラスのシステムの既定のインターフェイスをサポートするデバイスを返すには、DIGCF_DEVICEINTERFACE フラグを設定し、DIGCF_ALLCLASSES フラグを設定し、DIGCF_DEFAULT フラグを設定して、ClassGuid NULLを します。 この関数は、このようなデバイスを表すデバイス情報要素をデバイス情報セットに追加し、そのデバイス情報要素のデバイス インターフェイス リストにシステムの既定のインターフェイスを追加します。
次のオプションを他のオプションと組み合わせて使用して、返されるデバイスをさらに制限することもできます。
  • システムに存在するデバイスのみを返すには、DIGCF_PRESENT フラグを設定します。
  • 現在のハードウェア プロファイルの一部であるデバイスのみを返すには、DIGCF_PROFILE フラグを設定します。
  • 特定のデバイスのみを返すには、DIGCF_DEVICEINTERFACE フラグを設定し、Enumerator パラメーターを使用して、デバイスデバイス インスタンス ID を指定します。可能なすべてのデバイスを含めるには、列挙子 NULLを に設定します。

SetupDiGetClassDevs 関数を使用する方法の例を次に示します。

例 1: 現在存在しないデバイスを含む、システム内のすべてのデバイスの一覧を作成します。

Handle = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES);

例 2: システムに存在するすべてのデバイスの一覧を作成します。

Handle = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);

例 3: ネットワーク アダプターからデバイス セットアップ クラスに存在するすべてのデバイスの一覧 構築します。

Handle = SetupDiGetClassDevs(&GUID_DEVCLASS_NET, NULL, NULL, DIGCF_PRESENT);

例 4: ストレージ ボリュームからデバイス インターフェイス クラスからインターフェイスを有効にしたシステムに存在するすべてのデバイス 一覧を作成します。

Handle = SetupDiGetClassDevs(&GUID_DEVINTERFACE_VOLUME, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);

例 5: システムに存在するが、既知の デバイス セットアップ クラス (Windows Vista 以降のバージョンの Windows) に属していないすべてのデバイスの一覧を作成します。

ClassGuid パラメーターをGUID_DEVCLASS_UNKNOWNに設定して、不明なセットアップ クラスを持つデバイスを検出することはできません。 代わりに、この例に従う必要があります。
 
DeviceInfoSet = SetupDiGetClassDevs(
                                    NULL,
                                    NULL,
                                    NULL,
                                    DIGCF_ALLCLASSES | DIGCF_PRESENT);

ZeroMemory(&DeviceInfoData, sizeof(SP_DEVINFO_DATA));
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
DeviceIndex = 0;
    
while (SetupDiEnumDeviceInfo(
                             DeviceInfoSet,
                             DeviceIndex,
                             &DeviceInfoData)) {
    DeviceIndex++;

    if (!SetupDiGetDeviceProperty(
                                  DeviceInfoSet,
                                  &DeviceInfoData,
                                  &DEVPKEY_Device_Class,
                                  &PropType,
                                  (PBYTE)&DevGuid,
                                  sizeof(GUID),
                                  &Size,
                                  0) || PropType != DEVPROP_TYPE_GUID) {

        Error = GetLastError();

        if (Error == ERROR_NOT_FOUND) {
            \\
            \\ This device has an unknown device setup class.
            \\
            }
        }                 
    }

if (DeviceInfoSet) {
    SetupDiDestroyDeviceInfoList(DeviceInfoSet);
    }

手記

setupapi.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして SetupDiGetClassDevs を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Microsoft Windows 2000 以降のバージョンの Windows で使用できます。
ターゲット プラットフォーム の DesktopFor universal, call CM_Get_Device_ID_ListFor universal, call CM_Get_Device_Interface_List
ヘッダー setupapi.h (SetupAPI.h を含む)
ライブラリ SetupAPI.lib
DLL SetupAPI.dll
API セットの ext-ms-win-setupapi-classinstallers-l1-1-0 (Windows 8 で導入)

関連項目

デバイス情報セットの

デバイス インスタンス ID

SetupDiCreateDeviceInfoList の

SetupDiDestroyDeviceInfoList の

SetupDiEnumDeviceInterfaces の

SetupDiGetClassDevsEx の