Share via


_URB_HEADER-Struktur (usb.h)

Die _URB_HEADER-Struktur wird von USB-Clienttreibern verwendet, um grundlegende Informationen zur Anforderung bereitzustellen, die an den Hostcontrollertreiber gesendet wird.

Syntax

struct _URB_HEADER {
  USHORT      Length;
  USHORT      Function;
  USBD_STATUS Status;
  PVOID       UsbdDeviceHandle;
  ULONG       UsbdFlags;
};

Member

Length

Gibt die Länge der URB in Bytes an. Bei URB-Anforderungen, die andere Datenstrukturen als _URB_HEADER verwenden, muss dieser Member auf die Länge der gesamten URB-Anforderungsstruktur festgelegt werden, nicht auf die _URB_HEADER Größe.

Function

Gibt einen numerischen Code an, der den angeforderten Vorgang für diese URB angibt. Einer der folgenden Werte muss festgelegt werden:

URB_FUNCTION_SELECT_CONFIGURATION

Gibt dem Hostcontrollertreiber an, dass eine Konfiguration ausgewählt werden soll. Wenn festgelegt, wird die URB mit URB_SELECT_CONFIGURATION als Datenstruktur verwendet.

URB_FUNCTION_SELECT_INTERFACE

Gibt dem Hostcontrollertreiber an, dass eine alternative Schnittstelleneinstellung für eine Schnittstelle ausgewählt wird. Wenn festgelegt, wird die URB mit _URB_SELECT_INTERFACE als Datenstruktur verwendet.

URB_FUNCTION_ABORT_PIPE

Gibt an, dass alle ausstehenden Anforderungen für eine Pipe abgebrochen werden sollen. Wenn festgelegt, wird die URB mit _URB_PIPE_REQUEST als Datenstruktur verwendet. Diese universelle Anforderung ermöglicht es einem Client, alle ausstehenden Übertragungen für die angegebene Pipe abzubrechen. Pipe- und Endpunktstatus sind nicht betroffen. Die Abbruchanforderung kann abgeschlossen sein, bevor alle ausstehenden Anforderungen abgeschlossen sind. Gehen Sie nicht davon aus, dass der Abschluss der Abbruchanforderung bedeutet, dass alle anderen ausstehenden Anforderungen abgeschlossen sind.

URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL

Diese URB-Funktion ist in Windows 2000 und höheren Betriebssystemen veraltet und wird von Microsoft nicht unterstützt. Nicht verwenden. Wenn Sie diese Funktion mit einer URB-Anforderung angeben, schlägt die Anforderung fehl, und das System meldet einen Fehler.

URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL

Diese URB-Funktion ist in Windows 2000 und höheren Betriebssystemen veraltet und wird von Microsoft nicht unterstützt. Nicht verwenden. Wenn Sie diese Funktion mit einer URB-Anforderung angeben, schlägt die Anforderung fehl, und das System meldet einen Fehler.

URB_FUNCTION_GET_FRAME_LENGTH

Diese URB-Funktion ist in Windows 2000 und höheren Betriebssystemen veraltet und wird von Microsoft nicht unterstützt. Nicht verwenden. Wenn Sie diese Funktion mit einer URB-Anforderung verwenden, tritt bei der Anforderung ein Fehler auf, und das System meldet einen Fehler.

URB_FUNCTION_SET_FRAME_LENGTH

Diese URB-Funktion ist in Windows 2000 und höheren Betriebssystemen veraltet und wird von Microsoft nicht unterstützt. Nicht verwenden. Wenn Sie sie mit einer URB-Anforderung verwenden, tritt bei der Anforderung ein Fehler auf, und das System meldet einen Fehler.

URB_FUNCTION_GET_CURRENT_FRAME_NUMBER

Fordert die aktuelle Framenummer vom Hostcontrollertreiber an. Wenn festgelegt, wird die URB mit _URB_GET_CURRENT_FRAME_NUMBER als Datenstruktur verwendet.

URB_FUNCTION_CONTROL_TRANSFER

Überträgt Daten an oder aus einer Steuerungspipeline. Wenn festgelegt, wird die URB mit _URB_CONTROL_TRANSFER als Datenstruktur verwendet.

URB_FUNCTION_CONTROL_TRANSFER_EX

Überträgt Daten an oder aus einer Steuerelementpipeline ohne ein durch einen Timeoutwert angegebenes Zeitlimit. Wenn festgelegt, wird die URB mit URB_CONTROL_TRANSFER_EX als Datenstruktur verwendet.

Verfügbar in Windows Vista und höheren Betriebssystemen.

URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER

Überträgt Daten aus einer Bulk- oder Interruptpipe oder an eine Massenpipeline. Wenn festgelegt, wird die URB mit _URB_BULK_OR_INTERRUPT_TRANSFER als Datenstruktur verwendet.

URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_USING_CHAINED_MDL

Überträgt Daten mithilfe verketteter MDLs an und aus einer Bulk-Pipe oder Interruptpipe. Wenn festgelegt, wird die URB mit _URB_BULK_OR_INTERRUPT_TRANSFER als Datenstruktur verwendet. Der Clienttreiber muss den TransferBufferMDL-Member auf die erste MDL-Struktur in der Kette festlegen, die den Übertragungspuffer enthält. Der USB-Treiberstapel ignoriert den TransferBuffer-Member bei der Verarbeitung dieser URB.

Verfügbar in Windows 8. Informationen zur Verwendung verketteter MDLs finden Sie unter Senden verketteter MDLs">How to Send Chained MDLs.

URB_FUNCTION_ISOCH_TRANSFER

Überträgt Daten an oder aus einer isochronen Pipe. Wenn festgelegt, wird die URB mit _URB_ISOCH_TRANSFER als Datenstruktur verwendet.

URB_FUNCTION_ISOCH_TRANSFER_USING_CHAINED_MDL

Überträgt Daten mithilfe verketteter MDLs an oder aus einer isochronen Pipe. Wenn festgelegt, wird die URB mit _URB_ISOCH_TRANSFER als Datenstruktur verwendet. Der Clienttreiber muss den TransferBufferMDL-Member auf die erste MDL in der Kette festlegen, die den Übertragungspuffer enthält. Der USB-Treiberstapel ignoriert den TransferBuffer-Member bei der Verarbeitung dieser URB.

Verfügbar in Windows 8. Informationen zur Verwendung verketteter MDLs finden Sie unter Senden verketteter MDLs">How to Send Chained MDLs.

URB_FUNCTION_RESET_PIPE

Siehe URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL.

URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL

Setzt die angegebene Pipe zurück. Falls festgelegt, wird diese URB mit _URB_PIPE_REQUEST verwendet.

Hinweis

Diese URB ersetzt URB_FUNCTION_RESET_PIPE.

Der Bustreiber führt als Reaktion auf diese URB drei Aufgaben aus:

Zunächst sendet diese URB für alle Rohre mit Ausnahme isochroner Rohre eine CLEAR_FEATURE Anforderung zum Löschen des ENDPOINT_HALT Features des Geräts.

Zweitens setzt der USB-Bustreiber den Datenumschalter auf der Hostseite zurück, wie es die USB-Spezifikation erfordert. Das USB-Gerät sollte den Datenumschalter auf der Geräteseite zurücksetzen, wenn der Bustreiber seine ENDPOINT_HALT-Funktion löscht. Da einige nicht kompatible Geräte dieses Feature nicht unterstützen, stellt Microsoft die beiden zusätzlichen URBs URB_FUNCTION_SYNC_CLEAR_STALL und URB_FUNCTION_SYNC_RESET_PIPE bereit. Dadurch können Clienttreiber das ENDPOINT_HALT-Feature auf dem Gerät löschen oder die Pipe auf der Hostseite zurücksetzen, ohne dass sich die Datenumschaltung auf der Hostseite auswirkt. Wenn das Gerät den Datenumschalter nicht zurücksetzt, wenn es sollte, kann der Clienttreiber diesen Fehler kompensieren, indem er die hostseitige Datenumschaltung nicht zurücksetzt. Wenn der Datenumschalter auf der Hostseite, aber nicht auf der Geräteseite zurückgesetzt wird, werden Pakete aus der Sequenz entfernt, und das Gerät kann Pakete löschen.

Drittens: Nachdem der Bustreiber die Pipe erfolgreich zurückgesetzt hat, setzt er die Übertragungen mit der nächsten URB in der Warteschlange fort.

Nach einer Pipezurücksetzung werden die Übertragungen mit der nächsten URB in der Warteschlange fortgesetzt.

Es ist nicht erforderlich, eine Stoppbedingung für eine Standardsteuerungspipe zu löschen. Die Standardsteuerungspipe muss immer Setuppakete akzeptieren. Wenn sie also angehalten wird, löscht der USB-Stapel die Angehalten-Bedingung automatisch. Der Clienttreiber muss keine besonderen Maßnahmen ergreifen, um die Angehalten-Bedingung für eine Standardpipe zu löschen.

Alle Übertragungen müssen abgebrochen oder abgebrochen werden, bevor versucht wird, die Pipe zurückzusetzen.

Diese URB muss an PASSIVE_LEVEL gesendet werden.

URB_FUNCTION_SYNC_RESET_PIPE

Löscht die Anhaltenbedingung auf der Hostseite einer Pipe. Wenn festgelegt, wird diese URB mit _URB_PIPE_REQUEST als Datenstruktur verwendet.

Diese URB ermöglicht es einem Client, den angehaltenen Zustand einer Pipe zu löschen, ohne den Datenschalter zurückzusetzen und ohne die Endpunktstoppbedingung (Feature ENDPOINT_HALT) zu löschen. Wenn Sie eine Anhaltenbedingung für die Pipe löschen möchten, setzen Sie den hostseitigen Datenumschalter zurück, und löschen Sie mit einem einzigen Vorgang einen Stillstand auf dem Gerät, und verwenden Sie URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL.

Die folgenden status Codes sind wichtig und haben die angegebene Bedeutung:

USBD_STATUS_INVALID_PIPE_HANDLE

PipeHandle ist ungültig.

USBD_STATUS_ERROR_BUSY

Für den Endpunkt stehen aktive Übertragungen aus.

Es ist nicht erforderlich, eine Stoppbedingung für eine Standardsteuerungspipe zu löschen. Die Standardsteuerungspipe muss immer Setuppakete akzeptieren. Wenn sie also angehalten wird, löscht der USB-Stapel die Angehalten-Bedingung automatisch. Der Clienttreiber muss keine besonderen Maßnahmen ergreifen, um die Angehalten-Bedingung für eine Standardpipe zu löschen.

Alle Übertragungen müssen abgebrochen oder abgebrochen werden, bevor versucht wird, die Pipe zurückzusetzen.

Diese URB muss an PASSIVE_LEVEL gesendet werden.

Verfügbar in Windows XP und höheren Betriebssystemen.

URB_FUNCTION_SYNC_CLEAR_STALL

Löscht die Verzögerungsbedingung für den Endpunkt. Für alle Rohre mit Ausnahme von isochronen Rohren sendet diese URB eine CLEAR_FEATURE Anforderung zum Löschen des ENDPOINT_HALT Features des Geräts. Im Gegensatz zur RB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL-Funktion setzt diese URB-Funktion den Datenumschalter auf der Hostseite der Pipe jedoch nicht zurück. Die USB-Spezifikation erfordert, dass Geräte den geräteseitigen Datenumschalter zurücksetzen, nachdem der Client die ENDPOINT_HALT-Funktion des Geräts gelöscht hat, aber einige nicht kompatible Geräte setzen ihre Daten nicht ordnungsgemäß zurück. Clienttreiber, die solche Geräte verwalten, können diesen Fehler kompensieren, indem sie den Zustand des Stillstands direkt mit URB_FUNCTION_SYNC_CLEAR_STALL löschen, anstatt die Pipe mit URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL zurückzusetzen. URB_FUNCTION_SYNC_CLEAR_STALL löscht eine Verzögerungsbedingung auf dem Gerät, ohne den hostseitigen Datenschalter zurückzusetzen. Dadurch wird verhindert, dass ein nicht kompatibles Gerät das nächste Paket als erneute Übertragung interpretiert und das Paket verwirft.

Wenn festgelegt, wird die URB mit _URB_PIPE_REQUEST als Datenstruktur verwendet.

Diese URB-Funktion sollte an PASSIVE_LEVEL

Verfügbar in Windows XP und höheren Betriebssystemen.

URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE

Ruft den Gerätedeskriptor von einem bestimmten USB-Gerät ab. Wenn festgelegt, wird die URB mit _URB_CONTROL_DESCRIPTOR_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT

Ruft den Deskriptor von einem Endpunkt auf einer Schnittstelle für ein USB-Gerät ab. Wenn festgelegt, wird die URB mit _URB_CONTROL_DESCRIPTOR_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE

Legt einen Gerätedeskriptor auf einem Gerät fest. Wenn festgelegt, wird die URB mit _URB_CONTROL_DESCRIPTOR_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT

Legt einen Endpunktdeskriptor für einen Endpunkt für eine Schnittstelle fest. Wenn festgelegt, wird die URB mit _URB_CONTROL_DESCRIPTOR_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_SET_FEATURE_TO_DEVICE

Legt ein über USB definiertes Feature auf einem Gerät fest. Wenn festgelegt, wird die URB mit _URB_CONTROL_FEATURE_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_SET_FEATURE_TO_INTERFACE

Legt ein USB-definiertes Feature auf einer Schnittstelle für ein Gerät fest. Wenn festgelegt, wird die URB mit _URB_CONTROL_FEATURE_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_SET_FEATURE_TO_ENDPOINT

Legt ein USB-definiertes Feature auf einem Endpunkt für eine Schnittstelle auf einem USB-Gerät fest. Wenn festgelegt, wird die URB mit _URB_CONTROL_FEATURE_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_SET_FEATURE_TO_OTHER

Legt ein USB-definiertes Feature für ein gerätedefiniertes Ziel auf einem USB-Gerät fest. Wenn festgelegt, wird die URB mit _URB_CONTROL_FEATURE_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE

Löscht ein usb-definiertes Feature auf einem Gerät. Wenn festgelegt, wird die URB mit _URB_CONTROL_FEATURE_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE

Löscht ein usb-definiertes Feature auf einer Schnittstelle für ein Gerät. Wenn festgelegt, wird die URB mit _URB_CONTROL_FEATURE_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT

Löscht ein usb-definiertes Feature auf einem Endpunkt für eine Schnittstelle auf einem USB-Gerät. Wenn festgelegt, wird die URB mit _URB_CONTROL_FEATURE_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_CLEAR_FEATURE_TO_OTHER

Löscht ein usb-definiertes Feature für ein gerätedefiniertes Ziel auf einem USB-Gerät. Wenn festgelegt, wird die URB mit _URB_CONTROL_FEATURE_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_GET_STATUS_FROM_DEVICE

Ruft status von einem USB-Gerät ab. Wenn festgelegt, wird die URB mit _URB_CONTROL_GET_STATUS_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_GET_STATUS_FROM_INTERFACE

Ruft status von einer Schnittstelle auf einem USB-Gerät ab. Wenn festgelegt, wird die URB mit _URB_CONTROL_GET_STATUS_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_GET_STATUS_FROM_ENDPOINT

Ruft status von einem Endpunkt für eine Schnittstelle auf einem USB-Gerät ab. Wenn festgelegt, wird die URB mit _URB_CONTROL_GET_STATUS_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_GET_STATUS_FROM_OTHER

Ruft status von einem gerätedefiniertem Ziel auf einem USB-Gerät ab. Wenn festgelegt, wird die URB mit _URB_CONTROL_GET_STATUS_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_VENDOR_DEVICE

Sendet einen herstellerspezifischen Befehl an ein USB-Gerät. Wenn festgelegt, wird die URB mit _URB_CONTROL_VENDOR_OR_CLASS_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_VENDOR_INTERFACE

Sendet einen herstellerspezifischen Befehl für eine Schnittstelle auf einem USB-Gerät. Wenn festgelegt, wird die URB mit _URB_CONTROL_VENDOR_OR_CLASS_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_VENDOR_ENDPOINT

Sendet einen herstellerspezifischen Befehl für einen Endpunkt auf einer Schnittstelle auf einem USB-Gerät. Wenn festgelegt, wird die URB mit _URB_CONTROL_VENDOR_OR_CLASS_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_VENDOR_OTHER

Sendet einen herstellerspezifischen Befehl an ein gerätedefiniertes Ziel auf einem USB-Gerät. Wenn festgelegt, wird die URB mit _URB_CONTROL_VENDOR_OR_CLASS_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_CLASS_DEVICE

Sendet einen usb-definierten klassenspezifischen Befehl an ein USB-Gerät. Wenn festgelegt, wird die URB mit _URB_CONTROL_VENDOR_OR_CLASS_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_CLASS_INTERFACE

Sendet einen durch USB definierten klassenspezifischen Befehl an eine Schnittstelle auf einem USB-Gerät. Wenn festgelegt, wird die URB mit _URB_CONTROL_VENDOR_OR_CLASS_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_CLASS_ENDPOINT

Sendet einen von USB definierten klassenspezifischen Befehl an einen Endpunkt auf einer Schnittstelle auf einem USB-Gerät. Wenn festgelegt, wird die URB mit _URB_CONTROL_VENDOR_OR_CLASS_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_CLASS_OTHER

Sendet einen usb-definierten klassenspezifischen Befehl an ein gerätedefiniertes Ziel auf einem USB-Gerät. Wenn festgelegt, wird die URB mit _URB_CONTROL_VENDOR_OR_CLASS_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_GET_CONFIGURATION

Ruft die aktuelle Konfiguration auf einem USB-Gerät ab. Wenn festgelegt, wird die URB mit _URB_CONTROL_GET_CONFIGURATION_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_GET_INTERFACE

Ruft die aktuellen Einstellungen für eine Schnittstelle auf einem USB-Gerät ab. Wenn festgelegt, wird die URB mit _URB_CONTROL_GET_INTERFACE_REQUEST als Datenstruktur verwendet.

Verfügbar in Windows 2000, Windows Vista und höheren Betriebssystemen. In Windows XP nicht verfügbar.

URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE

Ruft den Deskriptor von einer Schnittstelle für ein USB-Gerät ab. Wenn festgelegt, wird die URB mit _URB_CONTROL_DESCRIPTOR_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE

Legt einen Deskriptor für eine Schnittstelle auf einem USB-Gerät fest. Wenn festgelegt, wird die URB mit _URB_CONTROL_DESCRIPTOR_REQUEST als Datenstruktur verwendet.

URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR

Ruft einen Microsoft-Betriebssystemfeaturedeskriptor von einem USB-Gerät oder einer Schnittstelle auf einem USB-Gerät ab. Wenn festgelegt, wird die URB mit _URB_OS_FEATURE_DESCRIPTOR_REQUEST als Datenstruktur verwendet.

Verfügbar in Windows XP und höheren Betriebssystemen.

URB_FUNCTION_OPEN_STATIC_STREAMS

Öffnet Streams im angegebenen Massenendpunkt. Wenn festgelegt, wird die URB mit _URB_OPEN_STATIC_STREAMS als Datenstruktur verwendet.

Verfügbar in Windows 8. Informationen zum Formatieren einer URB für eine Open-Stream-Anforderung finden Sie unter Öffnen und Schließen statischer Streams in einem USB-Massenendpunkt.

URB_FUNCTION_CLOSE_STATIC_STREAMS

Schließt alle geöffneten Streams im angegebenen Massenendpunkt. Wenn festgelegt, wird die URB mit _URB_PIPE_REQUEST als Datenstruktur verwendet.

Verfügbar in Windows 8. Informationen zum Formatieren einer URB für eine Open-Stream-Anforderung finden Sie unter Öffnen und Schließen statischer Streams in einem USB-Massenendpunkt.

Status

Enthält einen USBD_STATUS_XXX-Code , der vom Hostcontrollertreiber zurückgegeben wird.

UsbdDeviceHandle

Reserviert. Darf nicht verwendet werden.

UsbdFlags

Reserviert. Darf nicht verwendet werden.

Hinweise

Die _URB_HEADER-Struktur ist ein Mitglied aller USB-Anforderungen, die Teil der URB-Struktur sind. Die _URB_HEADER-Struktur wird verwendet, um allgemeine Informationen zu jeder Anforderung an den Hostcontrollertreiber bereitzustellen.

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_BULK_OR_INTERRUPT_TRANSFER

_URB_CONTROL_DESCRIPTOR_REQUEST

_URB_CONTROL_FEATURE_REQUEST

_URB_CONTROL_GET_CONFIGURATION_REQUEST

_URB_CONTROL_GET_INTERFACE_REQUEST

_URB_CONTROL_GET_STATUS_REQUEST

_URB_CONTROL_TRANSFER

_URB_CONTROL_VENDOR_OR_CLASS_REQUEST

_URB_GET_CURRENT_FRAME_NUMBER

_URB_ISOCH_TRANSFER

_URB_OS_FEATURE_DESCRIPTOR_REQUEST

_URB_PIPE_REQUEST

_URB_SELECT_CONFIGURATION

_URB_SELECT_INTERFACE