Freigeben über


_URB_CONTROL_TRANSFER_EX Struktur (usb.h)

Die _URB_CONTROL_TRANSFER_EX-Struktur wird von USB-Clienttreibern verwendet, um Daten an oder von einer Kontrollpipeline zu übertragen, mit einem Timeout, das die akzeptable Übertragungszeit begrenzt.

Syntax

struct _URB_CONTROL_TRANSFER_EX {
  struct _URB_HEADER   Hdr;
  USBD_PIPE_HANDLE     PipeHandle;
  ULONG                TransferFlags;
  ULONG                TransferBufferLength;
  PVOID                TransferBuffer;
  PMDL                 TransferBufferMDL;
  ULONG                Timeout;
  ULONG                Pad;
  struct _URB_HCD_AREA hca;
  UCHAR                SetupPacket[8];
};

Angehörige

Hdr

Zeigen Sie auf eine _URB_HEADER Struktur, die die URB-Headerinformationen angibt. Hdr.Function- muss URB_FUNCTION_CONTROL_TRANSFER_EX sein, und Hdr.Length- muss sizeof(_URB_CONTROL_TRANSFER_EX)sein.

PipeHandle

Handle für das Rohr.

Wenn das Ziel der Standardsteuerelementendpunkt ist, muss PipeHandle-NULL-sein. In diesem Fall muss die TransferFlags- das USBD_DEFAULT_PIPE_TRANSFER Flag enthalten.

Wenn das Ziel ein nicht standardmäßiger Steuerelementendpunkt ist, gibt PipeHandle- einen undurchsichtigen Handle für die Steuerpipe an. Der Hostcontrollertreiber gibt dieses Handle zurück, wenn der Clienttreiber die Gerätekonfiguration mit einem URB vom Typ URB_FUNCTION_SELECT_CONFIGURATION auswählt oder wenn der Clienttreiber die Einstellungen für eine Schnittstelle mit einem URB vom Typ URB_FUNCTION_SELECT_INTERFACE ändert.

TransferFlags

Gibt null, eins oder eine Kombination der folgenden Flags an:

Wert Bedeutung
USBD_TRANSFER_DIRECTION_IN
Wird so festgelegt, dass Daten von einem Gerät angefordert werden. Um Daten an ein Gerät zu übertragen, muss dieses Kennzeichen klar sein.
USBD_TRANSFER_DIRECTION_OUT
Ist so festgelegt, dass Daten an ein Gerät übertragen werden. Das Festlegen dieses Kennzeichens entspricht dem Löschen des USBD_TRANSFER_DIRECTION_IN Flags.
USBD_SHORT_TRANSFER_OK
Ist so festgelegt, dass der Hostcontroller keinen Fehler zurückgibt, wenn es ein Paket vom Gerät empfängt, das kürzer als die maximale Paketgröße für den Endpunkt ist. Die maximale Paketgröße für den Endpunkt wird im bMaxPacketSize0 Member der USB_DEVICE_DESCRIPTOR-Struktur (Gerätedeskriptor) für den Standardsteuerungsendpunkt gemeldet. Bei einem nicht standardmäßigen Steuerelementendpunkt wird die maximale Paketgröße im wMaxPacketSize Member der USB_ENDPOINT_DESCRIPTOR-Struktur (Endpunktdeskriptor) festgelegt.

Wenn der Hostcontroller ein Paket empfängt, dessen Länge kürzer als der wMaxPacketSize Wert auf einem Steuerelementendpunkt ist, lautet das Verhalten je nach Hostcontrollertyp wie folgt:

  • Auf EHCI-Hostcontrollern fährt der Hostcontroller sofort mit der Statusphase der Steuerungsübertragung fort. Die Übertragung wird erfolgreich abgeschlossen, unabhängig davon, ob USBD_SHORT_TRANSFER_OK festgelegt ist.
  • Wenn USBD_SHORT_TRANSFER_OK festgelegt ist, fährt der Hostcontroller auf UHCI- und OHCI-Hostcontrollern mit der Statusphase fort. Wenn USBD_SHORT_TRANSFER_OK nicht festgelegt ist, gibt der Hostcontroller die Daten- und Statusphasen der Steuerungsübertragung auf und die Übertragung wird mit einem Fehler abgeschlossen.
USBD_DEFAULT_PIPE_TRANSFER
Ist so festgelegt, dass der Hostcontroller eine Steuerungsübertragung für die Standardsteuerungspipeline ausführen soll. Dadurch kann der Aufrufer Befehle an die Standardsteuerungspipeline senden, ohne explizit den Pipehandle anzugeben.

TransferBufferLength

Gibt die Länge des in TransferBuffer angegebenen Puffers in Bytes an oder wird in TransferBufferMDL-beschrieben. Der Hostcontrollertreiber gibt die Anzahl der Bytes zurück, die an die Pipe in diesem Element gesendet oder gelesen werden.

TransferBuffer

Zeiger auf einen residenten Puffer für die Übertragung oder ist NULL-, wenn eine MDL in TransferBufferMDL-bereitgestellt wird. Der Inhalt dieses Puffers hängt vom Wert TransferFlagsab. Wenn USBD_TRANSFER_DIRECTION_IN angegeben wird, enthält dieser Puffer Daten, die vom Gerät gelesen werden, wenn es vom Hostcontrollertreiber zurückgegeben wird. Andernfalls enthält dieser Puffer vom Treiber bereitgestellte Daten für die Übertragung an das Gerät.

TransferBufferMDL

Zeiger auf eine MDL, die einen residenten Puffer beschreibt oder NULL- ist, wenn ein Puffer in TransferBuffer-bereitgestellt wird. Der Inhalt des Puffers hängt vom Wert TransferFlagsab. Wenn USBD_TRANSFER_DIRECTION_IN angegeben ist, enthält der beschriebene Puffer Daten, die vom Gerät gelesen werden, wenn er vom Hostcontrollertreiber zurückgegeben wird. Andernfalls enthält der Puffer vom Treiber bereitgestellte Daten für die Übertragung an das Gerät. Diese MDL muss aus nicht seitengebundenen Pools zugewiesen werden.

Timeout

Gibt die Zeit in Millisekunden an, bevor das URB-Timeout erfolgt. Ein Wert von 0 gibt an, dass für diese URB kein Timeout vorhanden ist.

Pad

Reserviert. Nicht verwenden.

hca

Reserviert. Nicht verwenden.

SetupPacket[8]

Gibt ein USB-definiertes Anforderungssetuppaket an. Das Format eines USB-Anforderungssetuppakets befindet sich in der USB-Kernspezifikation.

Bemerkungen

Diese URB-Struktur ist mit _URB_CONTROL_TRANSFERidentisch, mit der Ausnahme, dass das Timeout Member ein Timeout für die URB erstellt.

Die reservierten Member dieser Struktur müssen als undurchsichtig behandelt werden und sind für die Systemverwendung reserviert.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows Vista und höheren Betriebssystemen.
Header- usb.h (include Usb.h)

Siehe auch

URB-

USB-Strukturen

_URB_CONTROL_TRANSFER

_URB_HEADER