USBD_SelectConfigUrbAllocateAndBuild-Funktion (usbdlib.h)
Die USBD_SelectConfigUrbAllocateAndBuild Routine weist eine URB- Struktur zu, die zum Auswählen einer Konfiguration für ein USB-Gerät erforderlich ist.
Syntax
NTSTATUS USBD_SelectConfigUrbAllocateAndBuild(
[in] USBD_HANDLE USBDHandle,
[in] PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
[in] PUSBD_INTERFACE_LIST_ENTRY InterfaceList,
[out] PURB *Urb
);
Parameter
[in] USBDHandle
USBD-Handle, das vom Clienttreiber in einem vorherigen Aufruf der USBD_CreateHandle Routine abgerufen wird.
[in] ConfigurationDescriptor
Zeiger auf eine vom Aufrufer zugewiesene USB_CONFIGURATION_DESCRIPTOR Struktur, die den Konfigurationsdeskriptor für die ausgewählte Konfiguration enthält. In der Regel sendet der Clienttreiber eine URB des Typs URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE (siehe _URB_CONTROL_DESCRIPTOR_REQUEST), um Informationen zu Konfigurationen, Schnittstellen, Endpunkten, dem Anbieter und klassenspezifischen Deskriptoren von einem USB-Gerät abzurufen. Wenn der Clienttreiber USB_CONFIGURATION_DESCRIPTOR_TYPE als Deskriptortyp angibt, ruft die Anforderung alle Geräteinformationen in einer USB_CONFIGURATION_DESCRIPTOR Struktur ab. Der Treiber übergibt dann den empfangenen Zeiger an die USB_CONFIGURATION_DESCRIPTOR Struktur im ConfigurationDescriptor Parameter.
[in] InterfaceList
Zeigen Sie auf das erste Element eines aufrufergeteilten Arrays von USBD_INTERFACE_LIST_ENTRY Strukturen. Die Länge des Arrays hängt von der Anzahl der Schnittstellen im Konfigurationsdeskriptor ab. Weitere Informationen finden Sie in den Hinweisen.
[out] Urb
Zeiger auf eine URB- Struktur, die die von USBD_SelectConfigUrbAllocateAndBuildzugeordnete URB empfängt. Der Clienttreiber muss die URB freigeben, wenn der Treiber die Verwendung beendet hat, indem er USBD_UrbFreeaufruft.
Rückgabewert
Die USBD_SelectConfigUrbAllocateAndBuild Routine gibt einen NT-Statuscode zurück.
Mögliche Werte sind, aber nicht beschränkt auf die Statuscodes, die in der folgenden Tabelle aufgeführt sind.
Rückgabecode | Beschreibung |
---|---|
|
Die Anforderung war erfolgreich. |
|
Der Aufrufer hat einen ungültigen Parameterwert übergeben. USBDHandle- oder Urb- ist NULL. |
|
Nicht genügend Arbeitsspeicher verfügbar, um die Anforderung abzuschließen. |
Bemerkungen
Vor dem Aufrufen von USBD_SelectConfigUrbAllocateAndBuildmuss der Clienttreiber die folgenden Aufgaben ausführen:
- Rufen Sie die Anzahl der Schnittstellen in der Konfiguration ab. Diese Informationen sind in der bNumInterfaces Member der USB_CONFIGURATION_DESCRIPTOR Struktur enthalten, auf die ConfigurationDescriptorverweist.
- Erstellen Sie ein Array von USBD_INTERFACE_LIST_ENTRY Strukturen. Die Anzahl der Elemente im Array muss mindestens eine Anzahl von Schnittstellen sein. Initialisieren Sie das Array, indem Sie RtlZeroMemoryaufrufen.
- Rufen Sie einen Schnittstellendeskriptor für jede Schnittstelle (oder ihre alternative Einstellung) in der Konfiguration ab. Sie können diese Schnittstellendeskriptoren abrufen, indem Sie USBD_ParseConfigurationDescriptorExaufrufen.
- Legen Sie für jedes Element (mit Ausnahme des letzten Elements) im Array den InterfaceDescriptor Member auf die Adresse eines Schnittstellendeskriptors fest. Legen Sie für das erste Element im Array den InterfaceDescriptor Member auf die Adresse des Schnittstellendeskriptors fest, der die erste Schnittstelle in der Konfiguration darstellt. Legen Sie für das nth-Element im Array den InterfaceDescriptor Member auf die Adresse des Schnittstellendeskriptors fest, der die n-Schnittstelle in der Konfiguration darstellt.
- Der InterfaceDescriptor Element des letzten Elements muss auf NULL festgelegt werden.
- Erstellt einen URB und füllt ihn mit Informationen über die angegebene Konfiguration, seine Schnittstellen und Endpunkte und legt den Anforderungstyp auf URB_FUNCTION_SELECT_CONFIGURATION fest.
- Füllt eine USBD_INTERFACE_INFORMATION Struktur in der URB für jede Schnittstelle aus.
- Legt das Interface Member des nth-Elements des vom Aufrufer bereitgestellten USBD_INTERFACE_LIST_ENTRY Arrays auf die Adresse der entsprechenden USBD_INTERFACE_INFORMATION Struktur in der URB fest.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Erfordert WDK für Windows 8. Zielt auf Windows Vista und höhere Versionen des Windows-Betriebssystems ab. |
Zielplattform- | Desktop |
Header- | usbdlib.h |
Library | Usbdex.lib |
IRQL- | DISPATCH_LEVEL |