Funzione SetupDiGetClassDevsW (setupapi.h)

La funzione SetupDiGetClassDevs restituisce un handle a un set di informazioni sul dispositivo che contiene elementi di informazioni sul dispositivo richiesti per un computer locale.

Sintassi

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

Parametri

[in, optional] ClassGuid

Puntatore al GUID per una classe di configurazione del dispositivo o a una classe di interfaccia del dispositivo. Questo puntatore è facoltativo e può essere NULL. Per altre informazioni su come impostare ClassGuid, vedere la sezione Osservazioni seguenti.

[in, optional] Enumerator

Puntatore a una stringa con terminazione NULL che specifica:

  • Identificatore (ID) di un enumeratore Plug and Play (PnP). Questo ID può essere l'identificatore univoco globale (GUID) del valore o il nome simbolico. Ad esempio, "PCI" può essere usato per specificare il valore PCI PnP. Altri esempi di nomi simbolici per i valori PnP includono "USB", "PCMCIA" e "SCSI".
  • ID istanza del dispositivo PnP. Quando si specifica un ID istanza del dispositivo PnP, DIGCF_DEVICEINTERFACE deve essere impostato nel parametro Flags.
Questo puntatore è facoltativo e può essere NULL. Se non viene usato un valore di enumerazione per selezionare i dispositivi, impostare Enumerator su NULL

Per altre informazioni su come impostare il valore dell'enumeratore , vedere la sezione Osservazioni seguenti.

[in, optional] hwndParent

Handle alla finestra di primo livello da usare per un'interfaccia utente associata all'installazione di un'istanza del dispositivo nel set di informazioni sul dispositivo. Questo handle è facoltativo e può essere NULL.

[in] Flags

Variabile di tipo DWORD che specifica le opzioni di controllo che filtrano gli elementi delle informazioni del dispositivo aggiunti al set di informazioni del dispositivo. Questo parametro può essere un OR bit per bit pari a zero o più dei flag seguenti. Per altre informazioni sulla combinazione di questi flag, vedere la sezione Osservazioni seguenti.

DIGCF_ALLCLASSES

Restituisce un elenco di dispositivi installati per tutte le classi di configurazione del dispositivo o per tutte le classi di interfaccia del dispositivo.

DIGCF_DEVICEINTERFACE

Restituisce i dispositivi che supportano le interfacce dispositivo per le classi di interfaccia del dispositivo specificate. Questo flag deve essere impostato nel parametro Flags se il parametro Enumeratore specifica un ID istanza del dispositivo.

DIGCF_DEFAULT

Restituisce solo il dispositivo associato all'interfaccia del dispositivo predefinita del sistema, se impostata, per le classi di interfaccia dispositivo specificate.

DIGCF_PRESENT

Restituisce solo i dispositivi attualmente presenti in un sistema.

DIGCF_PROFILE

Restituisce solo i dispositivi che fanno parte del profilo hardware corrente.

Valore restituito

Se l'operazione ha esito positivo, SetupDiGetClassDevs restituisce un handle a un set di informazioni sul dispositivo che contiene tutti i dispositivi installati corrispondenti ai parametri forniti. Se l'operazione ha esito negativo, la funzione restituisce INVALID_HANDLE_VALUE. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Il chiamante di SetupDiGetClassDevs deve eliminare le informazioni sul dispositivo restituite quando non è più necessario chiamando SetupDiDestroyDeviceInfoList.

Chiamare SetupDiGetClassDevsEx per recuperare i dispositivi per una classe in un computer remoto.

Opzioni di controllo della classe di installazione del dispositivo

Usare le opzioni di filtro seguenti per controllare se SetupDiGetClassDevs restituisce i dispositivi per tutte le classi di installazione del dispositivo o solo per una classe di configurazione del dispositivo specificata:
  • Per restituire i dispositivi per tutte le classi di installazione del dispositivo, impostare il flag di DIGCF_ALLCLASSES e impostare il parametro ClassGuid su NULL.
  • Per restituire i dispositivi solo per una classe di configurazione del dispositivo specifica, non impostare DIGCF_ALLCLASSES e usare ClassGuid per specificare il GUID della classe di configurazione del dispositivo.
È inoltre possibile usare le opzioni di filtro seguenti in combinazione tra loro per limitare ulteriormente i dispositivi restituiti:
  • Per restituire solo i dispositivi presenti nel sistema, impostare il flag di DIGCF_PRESENT.
  • Per restituire solo i dispositivi che fanno parte del profilo hardware corrente, impostare il flag di DIGCF_PROFILE.
  • Per restituire i dispositivi solo per un enumeratore PnP specifico, usare il parametro Enumeratore per specificare il GUID o il nome simbolico dell'enumeratore. Se Enumeratore è NULL, SetupDiGetClassDevs restituisce i dispositivi per tutti gli enumeratori PnP.

Opzioni di controllo della classe dell'interfaccia del dispositivo

Usare le opzioni di filtro seguenti per controllare se SetupDiGetClassDevs restituisce i dispositivi che supportano qualsiasi classe di interfaccia del dispositivo o solo i dispositivi che supportano una classe di interfaccia del dispositivo specificata:
  • Per restituire i dispositivi che supportano un'interfaccia dispositivo di qualsiasi classe, impostare il flag di DIGCF_DEVICEINTERFACE, impostare il flag di DIGCF_ALLCLASSES e impostare ClassGuid su NULL. La funzione aggiunge alle informazioni sul dispositivo impostare un elemento informazioni dispositivo che rappresenta tale dispositivo e quindi aggiunge all'elemento informazioni del dispositivo un elenco di interfacce dispositivo che contiene tutte le interfacce del dispositivo supportate dal dispositivo.
  • Per restituire solo i dispositivi che supportano un'interfaccia del dispositivo di una classe specificata, impostare il flag DIGCF_DEVICEINTERFACE e usare il parametro ClassGuid per specificare il GUID della classe dell'interfaccia del dispositivo. La funzione aggiunge alle informazioni sul dispositivo un elemento informazioni dispositivo che rappresenta tale dispositivo e quindi aggiunge un'interfaccia del dispositivo della classe specificata all'elenco delle interfacce del dispositivo per tale elemento informativo del dispositivo.
È inoltre possibile usare le opzioni di filtro seguenti per controllare se SetupDiGetClassDevs restituisce solo i dispositivi che supportano l'interfaccia predefinita di sistema per le classi di interfaccia del dispositivo:
  • Per restituire solo il dispositivo che supporta l'interfaccia predefinita del sistema, se impostata, per una classe di interfaccia dispositivo specificata, impostare il flag di DIGCF_DEVICEINTERFACE, impostare il flag di DIGCF_DEFAULT e usare ClassGuid per specificare il GUID della classe dell'interfaccia del dispositivo. La funzione aggiunge alle informazioni sul dispositivo impostare un elemento informazioni dispositivo che rappresenta tale dispositivo e quindi aggiunge l'interfaccia predefinita di sistema all'elenco di interfacce del dispositivo per tale elemento informativo del dispositivo.
  • Per restituire un dispositivo che supporta un'interfaccia predefinita del sistema per una classe di interfaccia del dispositivo non specificata, impostare il flag di DIGCF_DEVICEINTERFACE, impostare il flag di DIGCF_ALLCLASSES, impostare il flag di DIGCF_DEFAULT e impostare ClassGuid su NULL. La funzione aggiunge alle informazioni sul dispositivo impostare un elemento informazioni dispositivo che rappresenta tale dispositivo e quindi aggiunge l'interfaccia predefinita di sistema all'elenco di interfacce del dispositivo per tale elemento informativo del dispositivo.
È anche possibile usare le opzioni seguenti in combinazione con le altre opzioni per limitare ulteriormente i dispositivi restituiti:
  • Per restituire solo i dispositivi presenti nel sistema, impostare il flag di DIGCF_PRESENT.
  • Per restituire solo i dispositivi che fanno parte del profilo hardware corrente, impostare il flag di DIGCF_PROFILE.
  • Per restituire solo un dispositivo specifico, impostare il flag di DIGCF_DEVICEINTERFACE e usare il parametro Enumeratore per specificare l'ID istanza del dispositivo del dispositivo. Per includere tutti i dispositivi possibili, impostare Enumerator su NULL.

Esempio

Di seguito sono riportati alcuni esempi di come usare la funzione SetupDiGetClassDevs .

Esempio 1: Compilare un elenco di tutti i dispositivi nel sistema, inclusi i dispositivi che non sono attualmente presenti.

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

Esempio 2: Compilare un elenco di tutti i dispositivi presenti nel sistema.

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

Esempio 3: Compilare un elenco di tutti i dispositivi presenti nel sistema che provengono dalla classe di configurazione del dispositivo scheda di rete.

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

Esempio 4: Compilare un elenco di tutti i dispositivi presenti nel sistema che hanno abilitato un'interfaccia dalla classe di interfaccia del volume di archiviazione.

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

Esempio 5: Compilare un elenco di tutti i dispositivi presenti nel sistema, ma non appartengono a nessuna classe di configurazione del dispositivo nota (Windows Vista e versioni successive di Windows).

Nota Non è possibile impostare il parametro ClassGuid su GUID_DEVCLASS_UNKNOWN per rilevare i dispositivi con una classe di installazione sconosciuta. È invece necessario seguire questo esempio.
 
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);
    }

Nota

L'intestazione setupapi.h definisce SetupDiGetClassDevs come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante preprocessore UNICODE. La combinazione dell'utilizzo dell'alias di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.

Requisiti

   
Client minimo supportato Disponibile in Microsoft Windows 2000 e versioni successive di Windows.
Piattaforma di destinazione DesktopFor universal, chiamare CM_Get_Device_ID_ListFor universale, chiamare CM_Get_Device_Interface_List
Intestazione setupapi.h (includere SetupAPI.h)
Libreria SetupAPI.lib
DLL SetupAPI.dll
Set di API ext-ms-win-setupapi-classinstallers-l1-1-0 (introdotto in Windows 8)

Vedi anche

Set di informazioni sul dispositivo

ID istanza del dispositivo

SetupDiCreateDeviceInfoList

SetupDiDestroyDeviceInfoList

SetupDiEnumDeviceInterfaces

SetupDiGetClassDevsEx