USBD_SelectInterfaceUrbAllocateAndBuild-Funktion (usbdlib.h)

Die USBD_SelectInterfaceUrbAllocateAndBuild Routine ordnet eine URB-Struktur zu und formatiert sie, die für eine Anforderung zum Auswählen einer Schnittstelle oder zum Ändern der alternativen Einstellung erforderlich ist.

Syntax

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

Parameter

[in] USBDHandle

USBD-Handle, das vom Clienttreiber in einem vorherigen Aufruf der USBD_CreateHandle Routine abgerufen wird.

[in] ConfigurationHandle

Handle, der vom USB-Treiberstapel im UrbSelectConfiguration.ConfigurationHandle-Member der URB-Struktur zurückgegeben wird, nachdem der Treiberstapel eine Select-Configuration-Anforderung abgeschlossen hat.

InterfaceListEntry

Zeiger auf eine aufruferseitig zugeordnete USBD_INTERFACE_LIST_ENTRY-Struktur . Weitere Informationen finden Sie in den Hinweisen.

[out] Urb

Zeiger auf eine URB-Struktur , die die von USBD_SelectInterfaceUrbAllocateAndBuild zugeordnete URB empfängt. Der Clienttreiber muss die URB freigeben, wenn der Treiber die Verwendung abgeschlossen hat, indem er USBD_UrbFree aufruft.

Rückgabewert

Die Routine gibt einen NTSTATUS-Code zurück. Mögliche Werte sind u. a. die status Codes, die in der folgenden Tabelle aufgeführt sind.

Rückgabecode Beschreibung
STATUS_SUCCESS
Der Routineaufruf war erfolgreich.
STATUS_INVALID_PARAMETER
Der Aufrufer hat NULL in einem der Parameter übergeben.
STATUS_INSUFFICIENT_RESOURCES
Unzureichender Arbeitsspeicher, um den Anruf abzuschließen.

Hinweise

Der Clienttreiber muss die USBD_SelectInterfaceUrbAllocateAndBuild-Routine aufrufen, nachdem er eine Konfiguration auf dem Gerät ausgewählt hat. Nach Abschluss einer Select-Configuration-Anforderung empfängt der Clienttreiber ein Konfigurationshandle im UrbSelectConfiguration.ConfigurationHandle-Member der URB. Dieses Handle muss im ConfigurationHandle-Parameter von USBD_SelectInterfaceUrbAllocateAndBuild angegeben werden.

Ein Clienttreiber ruft USBD_SelectInterfaceUrbAllocateAndBuild auf, um eine URB für eine Select-Interface-Anforderung zuzuweisen und zu erstellen, um die alternative Einstellung einer Schnittstelle in der ausgewählten Konfiguration zu ändern. Beim Aufruf von USBD_SelectInterfaceUrbAllocateAndBuild muss der Clienttreiber einen Zeiger auf eine USBD_INTERFACE_LIST_ENTRY Struktur zuordnen und bereitstellen. Der Clienttreiber muss die Strukturmber wie folgt festlegen:

  • Das InterfaceDescriptor-Element muss auf eine USB_INTERFACE_DESCRIPTOR-Struktur verweisen, die den Schnittstellendeskriptor mit der alternativen Einstellung enthält, die ausgewählt werden soll. Der Schnittstellendeskriptor wurde in einer vorherigen Anforderung abgerufen, um einen Konfigurationsdeskriptor und die zugeordneten Schnittstellen- und Endpunktdeskriptoren abzurufen.
  • Das Interface-Element muss NULL sein.
USBD_SelectInterfaceUrbAllocateAndBuild ordnet eine URB-Struktur zu und füllt sie mit Informationen über die angegebene Schnittstelleneinstellung und endpunkte. Die Routine weist auch eine USBD_INTERFACE_INFORMATION-Struktur zu. Die Strukturmember (mit Ausnahme der Pipeinformationen) werden basierend auf dem angegebenen Schnittstellendeskriptor gefüllt. USBD_SelectInterfaceUrbAllocateAndBuild legt den Interface-Member von USBD_INTERFACE_LIST_ENTRY auf die Adresse von USBD_INTERFACE_INFORMATION in der URB fest. Der Clienttreiber kann diese URB an den USB-Treiberstapel senden, um eine alternative Einstellung in der Schnittstelle auszuwählen.

Ein Clienttreiber kann keine alternativen Einstellungen in mehreren Schnittstellen in einer einzelnen Select-Interface-Anforderung ändern. Jede Anforderung zielt nur auf eine Schnittstelle ab.

Nachdem die Anforderung für die Auswahlschnittstelle abgeschlossen ist, füllt der USB-Treiberstapel USBD_INTERFACE_INFORMATION mit Informationen zu Pipes auf, die für Endpunkte geöffnet werden, die in der ausgewählten alternativen Einstellung definiert sind. Der Clienttreiber kann diese Pipehandles abrufen, indem er das Array überprüft, auf das der Pipes-Member von USBD_INTERFACE_INFORMATION verweist, und die Handles für zukünftige Datenübertragungsanforderungen speichern.

Der Clienttreiber kann eine URB wiederverwenden, die von USBD_SelectInterfaceUrbAllocateAndBuild nur für eine andere Select-Interface-Anforderung für dieselbe alternative Einstellung zugewiesen wurde. Der Clienttreiber darf die URB nicht für einen anderen Anforderungstyp oder für eine andere Select-Interface-Anforderung für eine andere alternative Einstellung wiederverwenden. Anstatt eine neue URB zuzuweisen, ist die Wiederverwendung einer vorhandenen URB in bestimmten Szenarien der bevorzugte Ansatz. Betrachten Sie ein USB-Audiogerät mit einer Schnittstelle mit zwei alternativen Einstellungen, die für zwei Bandbreitenanforderungen definiert sind. Die Einstellung 0 ist für null Bandbreite definiert. Die Einstellung 1 ist definiert, um eine bestimmte Bandbreite zu verwenden. Der Clienttreiber möchte häufig zwischen den beiden Einstellungen wechseln, je nachdem, ob das Gerät verwendet wird. Um dieses Szenario zu implementieren, kann der Clienttreiber zwei URBs für Select-Interface-Anforderungen zuordnen, eine pro Einstellung. Der Clienttreiber kann eine URB für eine Select-Interface-Anforderung verwenden (und wiederverwenden), um Einstellung 1 auszuwählen, wenn Sounds an das Gerät gesendet werden sollen. Um Bandbreite zu sparen, wenn keine Sounds vorhanden sind, kann der Clienttreiber die andere URB verwenden (und wiederverwenden), um zu Einstellung 0 zu wechseln. Diese Implementierung verhindert, dass der Clienttreiber URBs für jede dieser Select-Interface-Anforderungen zuweisen kann, jedes Mal, wenn der Treiber die Einstellung ändern muss.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Erfordert WDK für Windows 8. Zielt auf Windows Vista und höhere Versionen des Windows-Betriebssystems ab.
Zielplattform Desktop
Kopfzeile usbdlib.h
Bibliothek Usbdex.lib
IRQL DISPATCH_LEVEL

Weitere Informationen

USBD_CreateHandle

USBD_SelectConfigUrbAllocateAndBuild