Condividi tramite


funzione USBD_SelectInterfaceUrbAllocateAndBuild (usbdlib.h)

La routine USBD_SelectInterfaceUrbAllocateAndBuild alloca e formatta una struttura CSV necessaria per una richiesta per selezionare un'interfaccia o modificarne l'impostazione alternativa.

Sintassi

NTSTATUS USBD_SelectInterfaceUrbAllocateAndBuild(
  [in]  USBD_HANDLE                USBDHandle,
  [in]  USBD_CONFIGURATION_HANDLE  ConfigurationHandle,
        PUSBD_INTERFACE_LIST_ENTRY InterfaceListEntry,
  [out] PURB                       *Urb
);

Parametri

[in] USBDHandle

Handle USBD recuperato dal driver client in una chiamata precedente alla routine USBD_CreateHandle .

[in] ConfigurationHandle

Handle restituito dallo stack di driver USB nelmembrooTo.ConfigurationSelectConfiguration.ConfigurationHandle della struttura DELL'OGGETTO, dopo che lo stack di driver ha completato una richiesta di configurazione selezionata.

InterfaceListEntry

Puntatore a una struttura di USBD_INTERFACE_LIST_ENTRY allocata dal chiamante. Per altre informazioni, vedere la sezione Osservazioni.

[out] Urb

Puntatore a unastrutturaae che che riceve l'oggetto RESTITUITO allocato da USBD_SelectInterfaceUrbAllocateAndBuild. Il driver client deve liberare l'OGGETTO QUANDO il driver ha terminato di usarlo chiamando USBD_UrbFree.

Valore restituito

La routine restituisce un codice NTSTATUS. I valori possibili includono, ad esempio, i codici di stato elencati nella tabella seguente.

Codice restituito Descrizione
STATUS_SUCCESS
Chiamata di routine riuscita.
STATUS_INVALID_PARAMETER
Il chiamante ha passato NULL in uno dei parametri.
STATUS_INSUFFICIENT_RESOURCES
Memoria insufficiente disponibile per completare la chiamata.

Commenti

Il driver client deve chiamare la routine USBD_SelectInterfaceUrbAllocateAndBuild dopo aver selezionato una configurazione nel dispositivo. Al termine di una richiesta di configurazione select-configuration, il driver client riceve un handle di configurazione nel membro GestisciSelectConfiguration.ConfigurationHandle dell'OGGETTO. Tale handle deve essere specificato nel parametro ConfigurationHandle di USBD_SelectInterfaceUrbAllocateAndBuild.

Un driver client chiama USBD_SelectInterfaceUrbAllocateAndBuild per allocare e compilare un OGGETTO ODBC per una richiesta di interfaccia select per modificare l'impostazione alternativa di un'interfaccia, nella configurazione selezionata. Nella chiamata a USBD_SelectInterfaceUrbAllocateAndBuild, il driver client deve allocare e fornire un puntatore a una struttura USBD_INTERFACE_LIST_ENTRY . Il driver client deve impostare i membri della struttura come indicato di seguito:

  • Il membro InterfaceDescriptor deve puntare a una struttura USB_INTERFACE_DESCRIPTOR che contiene il descrittore di interfaccia con l'impostazione alternativa da selezionare. Il descrittore di interfaccia è stato ottenuto in una richiesta precedente per ottenere un descrittore di configurazione e i descrittori di interfaccia e endpoint associati.
  • Il membro Interface deve essere NULL.
USBD_SelectInterfaceUrbAllocateAndBuild alloca una struttura DELL'OGGETTO e la riempie di informazioni sull'impostazione dell'interfaccia specificata e sugli endpoint. La routine alloca anche una struttura USBD_INTERFACE_INFORMATION . I membri della struttura (ad eccezione delle informazioni sulla pipe) vengono compilati in base al descrittore di interfaccia specificato. USBD_SelectInterfaceUrbAllocateAndBuild imposta il membro Interface di USBD_INTERFACE_LIST_ENTRY sull'indirizzo di USBD_INTERFACE_INFORMATION nel RIQUADRO. Il driver client può inviare questo messaggio allo stack di driver USB per selezionare un'impostazione alternativa nell'interfaccia.

Un driver client non può modificare le impostazioni alternative in più interfacce in una singola richiesta di interfaccia select. Ogni richiesta è destinata a una sola interfaccia.

Al termine della richiesta di interfaccia di selezione, lo stack di driver USB popola USBD_INTERFACE_INFORMATION con informazioni sulle pipe aperte per gli endpoint definiti nell'impostazione alternativa selezionata. Il driver client può ottenere tali handle di pipe controllando la matrice a cui punta il membro Pipe di USBD_INTERFACE_INFORMATION e archivia gli handle per le richieste di trasferimento dei dati future.

Il driver client può riutilizzare un'istanza di CRITERI allocata da USBD_SelectInterfaceUrbAllocateAndBuild solo per un'altra richiesta di interfaccia select per la stessa impostazione alternativa. Il driver client non deve riutilizzare l'OGGETTO CRITERI per qualsiasi altro tipo di richiesta o per un'altra richiesta di interfaccia select per un'impostazione alternativa diversa. Invece di allocare un nuovo OGGETTO, il riutilizzo di un'istanza esistente DI È l'approccio preferito in determinati scenari. Si consideri un dispositivo audio USB con un'interfaccia con due impostazioni alternative, definite per due requisiti di larghezza di banda. L'impostazione 0 è definita per la larghezza di banda zero; L'impostazione 1 è definita per usare una determinata quantità di larghezza di banda. Il driver client vuole passare di frequente tra le due impostazioni a seconda che il dispositivo sia in uso. Per implementare questo scenario, il driver client può allocare due URL per le richieste di interfaccia select, una per impostazione. Il driver client può usare (e riutilizzare) un'istanza DI WINDOWS per una richiesta di interfaccia select per selezionare l'impostazione 1 quando sono presenti suoni da inviare al dispositivo. Per risparmiare la larghezza di banda quando non sono presenti suoni, il driver client può usare (e riutilizzare) l'altro STRUMENTO per passare all'impostazione 0. Questa implementazione impedisce al driver client di allocare GLI URL per ognuna di queste richieste di interfaccia di selezione, ogni volta che il driver deve modificare l'impostazione.

Requisiti

Requisito Valore
Client minimo supportato Richiede WDK per Windows 8. È destinato a Windows Vista e versioni successive del sistema operativo Windows.
Piattaforma di destinazione Desktop
Intestazione usbdlib.h
Libreria Usbdex.lib
IRQL DISPATCH_LEVEL

Vedi anche

USBD_CreateHandle

USBD_SelectConfigUrbAllocateAndBuild