Condividi tramite


funzione CM_Get_Device_Interface_ListW (cfgmgr32.h)

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

Sintassi

CMAPI CONFIGRET CM_Get_Device_Interface_ListW(
  [in]           LPGUID      InterfaceClassGuid,
  [in, optional] DEVINSTID_W pDeviceID,
  [out]          PZZWSTR     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 che rappresenta il nome di 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 seguente:

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 specificato e all'ID istanza del dispositivo, se presente.

CM_GET_DEVICE_INTERFACE_LIST_PRESENT

La funzione fornisce un elenco contenente interfacce di dispositivo associate ai dispositivi attualmente attivi e che corrispondono all'ID istanza del GUID e del dispositivo specificato, se presente.

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 CM_Get_Device_Interface_List per ottenere l'elenco, è possibile aggiungere una nuova interfaccia del dispositivo al sistema causando la restituzione delle dimensioni a 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 il tentativo di ottenere le dimensioni e l'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 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

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