Partager via


SetupDiGetClassDevsA, fonction (setupapi.h)

La fonction SetupDiGetClassDevs retourne un handle à un jeu d’informations d’appareil qui contient les éléments d’informations d’appareil demandés pour un ordinateur local.

Syntaxe

WINSETUPAPI HDEVINFO SetupDiGetClassDevsA(
  const GUID *ClassGuid,
  PCSTR      Enumerator,
  HWND       hwndParent,
  DWORD      Flags
);

Paramètres

ClassGuid

Pointeur vers le GUID d’une classe de configuration d’appareil ou d’une classe d’interface d’appareil . Ce pointeur est facultatif et peut être NULL. Pour plus d’informations sur la définition ClassGuid, consultez la section remarques suivante.

Enumerator

Pointeur vers une chaîne terminée par NULL qui spécifie :

  • Identificateur (ID) d’un énumérateur Plug-and-Play (PnP) . Cet ID peut être l’identificateur global unique (GUID) ou le nom symbolique de la valeur. Par exemple, « PCI » peut être utilisé pour spécifier la valeur PCI PnP. D’autres exemples de noms symboliques pour les valeurs PnP incluent « USB », « PCMCIA » et « SCSI ».
  • UN ID d’instance d’appareil pnP . Lorsque vous spécifiez un ID d’instance d’appareil PnP, DIGCF_DEVICEINTERFACE doit être défini dans le paramètre Indicateurs.
Ce pointeur est facultatif et peut être NULL. Si une valeur de d’énumération n’est pas utilisée pour sélectionner des appareils, définissez énumérateur sur NULL

Pour plus d’informations sur la définition de la valeur d’énumérateur , consultez la section remarques suivante.

hwndParent

Handle vers la fenêtre de niveau supérieur à utiliser pour une interface utilisateur associée à l’installation d’une instance d’appareil dans le jeu d’informations sur l’appareil. Ce handle est facultatif et peut être NULL.

Flags

Variable de type DWORD qui spécifie les options de contrôle qui filtrent les éléments d’informations d’appareil ajoutés au jeu d’informations de l’appareil. Ce paramètre peut être une OR au niveau du bit de zéro ou plusieurs des indicateurs suivants. Pour plus d’informations sur la combinaison de ces indicateurs, consultez la section suivante Remarques.

DIGCF_ALLCLASSES

Retournez la liste des appareils installés pour toutes les classes d’installation d’appareil ou toutes les classes d’interface d’appareil.

DIGCF_DEVICEINTERFACE

Retourne des appareils qui prennent en charge les interfaces d’appareil pour les classes d’interface d’appareil spécifiées. Cet indicateur doit être défini dans le paramètre indicateurs de si le paramètre énumérateur spécifie un ID d’instance d’appareil .

DIGCF_DEFAULT

Retourne uniquement l’appareil associé à l’interface d’appareil par défaut du système, s’il est défini, pour les classes d’interface d’appareil spécifiées.

DIGCF_PRESENT

Retournez uniquement les appareils actuellement présents dans un système.

DIGCF_PROFILE

Retournez uniquement les appareils qui font partie du profil matériel actuel.

Valeur de retour

Si l’opération réussit, SetupDiGetClassDevs retourne un handle à un jeu d’informations d’appareil qui contient tous les appareils installés qui correspondent aux paramètres fournis. Si l’opération échoue, la fonction retourne INVALID_HANDLE_VALUE. Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Remarques

L’appelant de SetupDiGetClassDevs doit supprimer le jeu d’informations de l’appareil retourné lorsqu’il n’est plus nécessaire en appelant SetupDiDestroyDeviceInfoList.

Appelez SetupDiGetClassDevsEx pour récupérer les appareils d’une classe sur un ordinateur distant.

options de contrôle de classe d’installation de l’appareil

Utilisez les options de filtrage suivantes pour contrôler si SetupDiGetClassDevs retourne des appareils pour toutes les classes d’installation d’appareil ou uniquement pour une classe de configuration d’appareil spécifiée :
  • Pour retourner des appareils pour toutes les classes de configuration d’appareil, définissez l’indicateur de DIGCF_ALLCLASSES et définissez le paramètre ClassGuid sur NULL.
  • Pour renvoyer des appareils uniquement pour une classe de configuration d’appareil spécifique, ne définissez pas DIGCF_ALLCLASSES et utilisez ClassGuid pour fournir le GUID de la classe de configuration d’appareil.
En outre, vous pouvez utiliser les options de filtrage suivantes en combinaison avec les autres pour restreindre davantage les appareils retournés :
  • Pour renvoyer uniquement les appareils présents dans le système, définissez l’indicateur de DIGCF_PRESENT.
  • Pour renvoyer uniquement les appareils qui font partie du profil matériel actuel, définissez l’indicateur DIGCF_PROFILE.
  • Pour retourner des appareils uniquement pour un énumérateur PnP spécifique , utilisez le paramètre Énumérateur pour fournir le GUID ou le nom symbolique de l’énumérateur. Si énumérateur est NULL, SetupDiGetClassDevs retourne des appareils pour tous les énumérateurs PnP.

options de contrôle de classe d’interface d’appareil

Utilisez les options de filtrage suivantes pour contrôler si SetupDiGetClassDevs retourne des appareils qui prennent en charge n’importe quelle classe d’interface d’appareil ou uniquement les appareils qui prennent en charge une classe d’interface d’appareil spécifiée :
  • Pour retourner des appareils qui prennent en charge une interface d’appareil de n’importe quelle classe, définissez l’indicateur de DIGCF_DEVICEINTERFACE, définissez l’indicateur de DIGCF_ALLCLASSES et définissez classGuid sur NULL. La fonction ajoute aux informations de l’appareil un élément d’informations d’appareil qui représente un tel appareil, puis ajoute à l’élément d’informations de l’appareil une liste d’interfaces d’appareil qui contient toutes les interfaces d’appareil prises en charge par l’appareil.
  • Pour renvoyer uniquement les appareils qui prennent en charge une interface d’appareil d’une classe spécifiée, définissez l’indicateur DIGCF_DEVICEINTERFACE et utilisez le paramètre ClassGuid pour fournir le GUID de classe de la classe d’interface d’appareil. La fonction ajoute aux informations de l’appareil un élément d’informations sur l’appareil qui représente un tel appareil, puis ajoute une interface d’appareil de la classe spécifiée à la liste d’interface de l’appareil pour cet élément d’informations sur l’appareil.
En outre, vous pouvez utiliser les options de filtrage suivantes pour contrôler si SetupDiGetClassDevs retourne uniquement les appareils qui prennent en charge l’interface système par défaut pour les classes d’interface d’appareil :
  • Pour renvoyer uniquement l’appareil qui prend en charge l’interface système par défaut, s’il est défini, pour une classe d’interface d’appareil spécifiée, définissez l’indicateur DIGCF_DEVICEINTERFACE, définissez l’indicateur DIGCF_DEFAULT et utilisez ClassGuid pour fournir le GUID de classe de la classe d’interface d’appareil. La fonction ajoute aux informations de l’appareil un élément d’informations d’appareil qui représente un tel appareil, puis ajoute l’interface système par défaut à la liste d’interface de l’appareil pour cet élément d’informations d’appareil.
  • Pour retourner un appareil qui prend en charge une interface système par défaut pour une classe d’interface d’appareil non spécifiée, définissez l’indicateur DIGCF_DEVICEINTERFACE, définissez l’indicateur de DIGCF_ALLCLASSES, définissez l’indicateur DIGCF_DEFAULT et définissez ClassGuid sur NULL. La fonction ajoute aux informations de l’appareil un élément d’informations d’appareil qui représente un tel appareil, puis ajoute l’interface système par défaut à la liste d’interface de l’appareil pour cet élément d’informations d’appareil.
Vous pouvez également utiliser les options suivantes en combinaison avec les autres options pour restreindre davantage les appareils retournés :
  • Pour renvoyer uniquement les appareils présents dans le système, définissez l’indicateur de DIGCF_PRESENT.
  • Pour renvoyer uniquement les appareils qui font partie du profil matériel actuel, définissez l’indicateur DIGCF_PROFILE.
  • Pour retourner uniquement un appareil spécifique, définissez l’indicateur de DIGCF_DEVICEINTERFACE et utilisez le paramètre Énumérateur pour fournir l’ID d’instance d’appareil de l’appareil. Pour inclure tous les appareils possibles, définissez énumérateur sur NULL.

Exemples

Voici quelques exemples d’utilisation de la fonction SetupDiGetClassDevs.

Exemple 1 : Créer une liste de tous les appareils du système, y compris les appareils qui ne sont pas présents actuellement.

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

Exemple 2 : Créer une liste de tous les appareils présents dans le système.

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

Exemple 3 : Créer une liste de tous les appareils présents dans le système provenant de la carte réseau classe de configuration d’appareil.

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

Exemple 4 : Créer une liste de tous les appareils présents dans le système qui ont activé une interface à partir du volume de stockage classe d’interface d’appareil.

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

Exemple 5 : Créer une liste de tous les appareils présents dans le système, mais qui n’appartiennent à aucune classe de configuration d’appareil connue (Windows Vista et versions ultérieures de Windows).

Remarque Vous ne pouvez pas définir le paramètre ClassGuid sur GUID_DEVCLASS_UNKNOWN pour détecter les appareils avec une classe d’installation inconnue. Au lieu de cela, vous devez suivre cet exemple.
 
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);
    }

Note

L’en-tête setupapi.h définit SetupDiGetClassDevs comme alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. Le mélange de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Exigences

Exigence Valeur
client minimum pris en charge Disponible dans Microsoft Windows 2000 et versions ultérieures de Windows.
plateforme cible DesktopFor universal, appel CM_Get_Device_ID_ListFor universel, appel CM_Get_Device_Interface_List
d’en-tête setupapi.h (include SetupAPI.h)
bibliothèque SetupAPI.lib
DLL SetupAPI.dll
ensemble d’API ext-ms-win-setupapi-classinstallers-l1-1-2 (introduit dans Windows 10, version 10.0.14393)

Voir aussi

ensemble d’informations sur l’appareil

ID d’instance d’appareil

SetupDiCreateDeviceInfoList

SetupDiDestroyDeviceInfoList

SetupDiEnumDeviceInterfaces

SetupDiGetClassDevsEx