USBD_CreateConfigurationRequestEx-Funktion (usbdlib.h)

Die USBD_CreateConfigurationRequestEx Routine ordnet eine URB zu und formatiert diese, um eine Konfiguration für ein USB-Gerät auszuwählen.

USBD_CreateConfigurationRequestEx ersetzt USBD_CreateConfigurationRequest.

Syntax

PURB USBD_CreateConfigurationRequestEx(
  [in] PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
  [in] PUSBD_INTERFACE_LIST_ENTRY    InterfaceList
);

Parameter

[in] ConfigurationDescriptor

Zeiger auf eine vom Aufrufer zugewiesene USB_CONFIGURATION_DESCRIPTOR Struktur, die den Konfigurationsdeskriptor für die auszuwählende Konfiguration enthält. In der Regel übermittelt 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

Zeiger auf das erste Element eines aufruferseitig zugewiesenen Arrays von USBD_INTERFACE_LIST_ENTRY Strukturen. Die Länge des Arrays hängt von der Anzahl der Schnittstellen im Konfigurationsdeskriptor ab. Die Anzahl der Elemente im Array muss eins mehr als die Anzahl der Schnittstellen in der Konfiguration sein. Initialisieren Sie das Array, indem Sie RtlZeroMemory aufrufen. Das InterfaceDescriptor-Element des letzten Elements im Array muss auf NULL festgelegt werden.

Rückgabewert

USBD_CreateConfigurationRequestEx ordnet eine URB-Struktur zu, formatiert sie für die URB_FUNCTION_SELECT_CONFIGURATION-Anforderung (Select-Configuration Request) und gibt einen Zeiger auf die URB zurück. Der Clienttreiber kann dann die zurückgegebene URB verwenden, um die Select-Configuration-Anforderung an den Hostcontrollertreiber zu senden, um die Konfiguration festzulegen. Sie müssen die URB freigeben, wenn Sie sie verwendet haben.

Hinweise

Informationen zum Erstellen einer Select-Configuration-Anforderung und eines Codebeispiels finden Sie unter Auswählen einer Konfiguration für ein USB-Gerät.

Der zurückgegebene Wert ist ein Zeiger auf die URB-Struktur , mit der Sie eine Select-Configuration-Anforderung an den Hostcontrollertreiber übermitteln können, um die angegebene Konfiguration festzulegen.

Nachdem der USB-Treiberstapel die Select-Configuration-Anforderung abgeschlossen hat, können Sie die USBD_INTERFACE_INFORMATION Strukturen überprüfen. Das Pipes-Elementvon USBD_INTERFACE_INFORMATION verweist auf ein Array von USBD_PIPE_INFORMATION Strukturen. Der USB-Bustreiber füllt das Array der USBD_PIPE_INFORMATION-Strukturen mit Informationen zu den Pipes, die den Endpunkten der Schnittstelle zugeordnet sind. Der Clienttreiber kann Pipehandles von der Pipes[i].PipeHandle abrufen und diese verwenden, um E/A-Anforderungen an bestimmte Pipes zu senden.

Nachdem Sie alle Vorgänge mit der zurückgegebenen URB abgeschlossen haben, müssen Sie die URB freigeben, indem Sie ExFreePool aufrufen.

Sie können den Konfigurationsdeskriptor und das Array aus einem nicht ausgelagerten oder ausgelagerten Pool zuordnen. Aufrufer dieser Routine können bei IRQL <= DISPATCH_LEVEL ausgeführt werden, wenn der Arbeitsspeicher, auf den von ConfigurationDescriptor und InterfaceList verwiesen wird, aus einem nicht ausgestellten Pool zugewiesen wird. Andernfalls müssen Aufrufer unter IRQL < DISPATCH_LEVEL ausgeführt werden.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header usbdlib.h (include Usbdlib.h)
Bibliothek Usbd.lib
IRQL DISPATCH_LEVEL (siehe Hinweise)

Weitere Informationen

Auswählen einer Konfiguration für ein USB-Gerät

Referenz zur USB-Gerätetreiberprogrammierung

USBD_INTERFACE_INFORMATION

_URB_SELECT_CONFIGURATION