Freigeben über


_URB_BULK_OR_INTERRUPT_TRANSFER-Struktur (usb.h)

Die _URB_BULK_OR_INTERRUPT_TRANSFER-Struktur wird von USB-Clienttreibern zum Senden oder Empfangen von Daten in einer Massenpipe oder einer Interruptpipe verwendet.

Syntax

struct _URB_BULK_OR_INTERRUPT_TRANSFER {
  struct _URB_HEADER   Hdr;
  USBD_PIPE_HANDLE     PipeHandle;
  ULONG                TransferFlags;
  ULONG                TransferBufferLength;
  PVOID                TransferBuffer;
  PMDL                 TransferBufferMDL;
  struct _URB          *UrbLink;
  struct _URB_HCD_AREA hca;
};

Member

Hdr

Zeiger auf eine _URB_HEADER-Struktur , die die URB-Headerinformationen angibt. Hdr.Function muss URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER sein, und Hdr.Length muss auf sizeof(_URB_BULK_OR_INTERRUPT_TRANSFER)festgelegt sein.

PipeHandle

Gibt ein undurchsichtiges Handle für die Bulk- oder Interruptpipe an. Der Hostcontrollertreiber gibt dieses Handle zurück, wenn der Clienttreiber die Gerätekonfiguration mit einer URB vom Typ URB_FUNCTION_SELECT_CONFIGURATION oder wenn der Clienttreiber die Einstellungen für eine Schnittstelle mit einer 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
Ist so festgelegt, dass Daten von einem Gerät anzufordern. Um Daten auf ein Gerät zu übertragen, muss dieses Flag eindeutig sein.
USBD_TRANSFER_DIRECTION_OUT
Ist so festgelegt, dass Daten auf ein Gerät übertragen werden. Das Festlegen dieses Flags 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 er 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 wMaxPacketSize-Member der USB_ENDPOINT_DESCRIPTOR-Struktur (Endpunktdeskriptor) gemeldet. Wenn der Hostcontroller ein Paket empfängt, das kürzer ist als wMaxPacketSize auf einem Massen- oder Interruptendpunkt, beendet der Hostcontroller sofort die Anforderung von Daten vom Endpunkt und schließt die Übertragung ab. Wenn das flag USBD_SHORT_TRANSFER_OK nicht festgelegt ist, schließt der Hostcontroller die Übertragung mit einem Fehler ab.

Dieses Flag sollte nur festgelegt werden, wenn USBD_TRANSFER_DIRECTION_IN ebenfalls festgelegt ist. Hinweis Auf EHCI-Hostcontrollern wird USBD_SHORT_TRANSFER_OK für Massen- und Unterbrechungsendpunkte ignoriert. Die Übertragung von kurzen Paketen auf EHCI-Controllern führt nicht zu einer Fehlerbedingung.

Wenn auf UHCI- und OHCI-Hostcontrollern USBD_SHORT_TRANSFER_OK nicht für eine Massen- oder Unterbrechungsübertragung festgelegt ist, wird der Endpunkt durch eine kurze Paketübertragung angehalten, und für die Übertragung wird ein Fehlercode zurückgegeben. Der Clienttreiber muss den Endpunkt fortsetzen, indem er eine URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL-Anforderung sendet, bevor er eine Übertragungsanforderung an den Endpunkt sendet.

TransferBufferLength

Gibt die Länge des Puffers in Bytes an, der in TransferBuffer angegeben oder in TransferBufferMDL beschrieben wird. Der Hostcontrollertreiber gibt die Anzahl der Bytes zurück, die an die Pipe in diesem Element gesendet oder aus dieser 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 von TransferFlags ab. Wenn USBD_TRANSFER_DIRECTION_IN angegeben ist, enthält dieser Puffer Daten, die vom Gerät gelesen werden, wenn er 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 ist NULL , wenn ein Puffer in TransferBuffer bereitgestellt wird. Der Inhalt des Puffers hängt vom Wert von TransferFlags ab. Wenn USBD_TRANSFER_DIRECTION_IN angegeben ist, enthält der beschriebene Puffer Daten, die vom Gerät gelesen werden, wenn sie vom Hostcontrollertreiber zurückgegeben werden. Andernfalls enthält der Puffer vom Treiber bereitgestellte Daten für die Übertragung an das Gerät. Diese MDL muss aus einem nicht auslagerten Pool zugeordnet werden.

UrbLink

Reserviert. Darf nicht verwendet werden.

hca

Reserviert. Darf nicht verwendet werden.

Hinweise

Treiber können die UsbBuildInterruptOrBulkTransferRequest-Dienstroutine verwenden, um diese URB zu formatieren. Puffer, die in TransferBuffer angegeben oder in TransferBufferMDL beschrieben werden, müssen nicht auslagerungsfähig sein.

In einer URB können sowohl TransferBuffer - als auch TransferBufferMDL-Parameter gleichzeitig Werte ungleich NULL sein. In diesem Fall müssen der Übertragungspuffer und die MDL, die auf TransferBuffer und TransferBufferMDL verweist, auf denselben Puffer verweisen.

Der USB-Bustreiber verarbeitet diese URB bei DISPATCH_LEVEL.

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

Anforderungen

Anforderung Wert
Header usb.h (einschließlich Usb.h)

Weitere Informationen

URB

USB-Strukturen

_URB_HEADER