Condividi tramite


funzione CM_Get_Device_Interface_ListA (cfgmgr32.h)

La funzione CM_Get_Device_Interface_List recupera un elenco di istanze dell'interfaccia del dispositivo che appartengono a una classe di interfaccia del dispositivo specificata.

Sintassi

CMAPI CONFIGRET CM_Get_Device_Interface_ListA(
  [in]           LPGUID      InterfaceClassGuid,
  [in, optional] DEVINSTID_A pDeviceID,
  [out]          PZZSTR      Buffer,
  [in]           ULONG       BufferLen,
  [in]           ULONG       ulFlags
);

Parametri

[in] InterfaceClassGuid

Fornisce un GUID che identifica una classe di interfaccia del dispositivo.

[in, optional] pDeviceID

Puntatore fornito dal chiamante a una stringa con terminazione NULL che rappresenta un ID istanza del dispositivo. Se specificato, la funzione recupera le interfacce del dispositivo supportate dal dispositivo per la classe specificata. Se questo valore è NULL o se punta a una stringa di lunghezza zero, la funzione recupera tutte le interfacce che appartengono alla classe specificata.

[out] Buffer

Puntatore fornito dal chiamante a un buffer che riceve più stringhe Unicode con terminazione NULL, ognuna delle quali rappresenta il nome del collegamento simbolico di un'istanza di interfaccia.

[in] BufferLen

Valore fornito dal chiamante che specifica la lunghezza, in caratteri, del buffer a cui punta Buffer. Chiamare CM_Get_Device_Interface_List_Size per determinare le dimensioni del buffer necessarie.

[in] ulFlags

Contiene uno dei flag forniti dal chiamante seguenti:

CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES

La funzione fornisce un elenco contenente interfacce di dispositivo associate a tutti i dispositivi che corrispondono al GUID e all'ID istanza del dispositivo specificati, se presenti.

CM_GET_DEVICE_INTERFACE_LIST_PRESENT

La funzione fornisce un elenco contenente le interfacce del dispositivo associate ai dispositivi attualmente attivi e che corrispondono al GUID e all'ID istanza del dispositivo specificati, se presenti.

Valore restituito

Se l'operazione ha esito positivo, la funzione restituisce CR_SUCCESS. In caso contrario, restituisce uno dei codici di errore con il prefisso CR_ definito in Cfgmgr32.h.

La tabella seguente include alcuni dei codici di errore più comuni che questa funzione potrebbe restituire.

Codice restituito Descrizione
CR_BUFFER_SMALL
Il buffer buffer è troppo piccolo per contenere l'elenco richiesto di interfacce del dispositivo.

Commenti

Tra la chiamata CM_Get_Device_Interface_List_Size per ottenere le dimensioni dell'elenco e la chiamata di CM_Get_Device_Interface_List per ottenere l'elenco, è possibile aggiungere una nuova interfaccia del dispositivo al sistema causando la restituzione delle dimensioni non più valida.  I chiamanti devono essere affidabili per tale condizione e riprovare a ottenere le dimensioni e l'elenco se CM_Get_Device_Interface_List restituisce CR_BUFFER_SMALL.

Esempio

Questo frammento di codice illustra la ripetizione dei tentativi di recupero delle dimensioni e dell'elenco, come descritto nella sezione Osservazioni.

    CONFIGRET cr = CR_SUCCESS;
    PWSTR DeviceInterfaceList = NULL;
    ULONG DeviceInterfaceListLength = 0;

    do {
        cr = CM_Get_Device_Interface_List_Size(&DeviceInterfaceListLength,
                                               (LPGUID)&GUID_DEVINTERFACE_VOLUME,
                                               NULL,
                                               CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);

        if (cr != CR_SUCCESS)
        {
            break;
        }

        if (DeviceInterfaceList != NULL) {
            HeapFree(GetProcessHeap(),
                     0,
                     DeviceInterfaceList);
        }

        DeviceInterfaceList = (PWSTR)HeapAlloc(GetProcessHeap(),
                                               HEAP_ZERO_MEMORY,
                                               DeviceInterfaceListLength * sizeof(WCHAR));

        if (DeviceInterfaceList == NULL)
        {
            cr = CR_OUT_OF_MEMORY;
            break;
        }

        cr = CM_Get_Device_Interface_List((LPGUID)&GUID_DEVINTERFACE_VOLUME,
                                          NULL,
                                          DeviceInterfaceList,
                                          DeviceInterfaceListLength,
                                          CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);
    } while (cr == CR_BUFFER_SMALL);

    if (cr != CR_SUCCESS)
    {
        goto Exit;
    }

Nota

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

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Microsoft Windows 2000 e versioni successive di Windows.
Piattaforma di destinazione Universale
Intestazione cfgmgr32.h (include Cfgmgr32.h)
Libreria Cfgmgr32.lib
DLL CfgMgr32.dll

Vedi anche

CM_Get_Device_Interface_List_Size