_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;
};
Angehörige
Length
Gibt die Länge der URB in Bytes an. Für URB-Anforderungen, die andere Datenstrukturen als _URB_HEADERverwenden, muss dieses Element auf die Länge der gesamten URB-Anforderungsstruktur und nicht auf die _URB_HEADER Größe festgelegt werden.
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 an, dass der Hostcontrollertreiber ausgewählt werden soll. Bei Festlegung wird der URB mit URB_SELECT_CONFIGURATION als Datenstruktur verwendet.
URB_FUNCTION_SELECT_INTERFACE
Gibt an, dass dem Hostcontrollertreiber eine alternative Schnittstelleneinstellung für eine Schnittstelle ausgewählt wird. Bei Festlegung wird der 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. Bei Festlegung wird der URB mit _URB_PIPE_REQUEST als Datenstruktur verwendet. Diese allgemeine Anforderung ermöglicht es einem Client, alle ausstehenden Übertragungen für die angegebene Pipe abzubrechen. Der Pipestatus und der Endpunktstatus sind nicht betroffen. Die abgebrochene Anforderung kann abgeschlossen werden, bevor alle ausstehenden Anforderungen abgeschlossen wurden. Gehen Sie nicht davon aus, dass der Abschluss der abgebrochenen Anforderung impliziert, dass alle anderen ausstehenden Anforderungen abgeschlossen wurden.
URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL
Diese URB-Funktion ist veralteten unter Windows 2000 und höher unter Windows 2000 und höher 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 veralteten unter Windows 2000 und höher unter Windows 2000 und höher 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 veralteten unter Windows 2000 und höher unter Windows 2000 und höher und wird von Microsoft nicht unterstützt. Nicht verwenden. Wenn Sie diese Funktion mit einer URB-Anforderung verwenden, schlägt die Anforderung fehl, und das System meldet einen Fehler.
URB_FUNCTION_SET_FRAME_LENGTH
Diese URB-Funktion ist veralteten unter Windows 2000 und höher unter Windows 2000 und höher und wird von Microsoft nicht unterstützt. Nicht verwenden. Wenn Sie sie mit einer URB-Anforderung verwenden, schlägt die Anforderung fehl, und das System meldet einen Fehler.
URB_FUNCTION_GET_CURRENT_FRAME_NUMBER
Fordert die aktuelle Framenummer vom Hostcontrollertreiber an. Bei Festlegung wird der URB mit _URB_GET_CURRENT_FRAME_NUMBER als Datenstruktur verwendet.
URB_FUNCTION_CONTROL_TRANSFER
Überträgt Daten an oder von einem Kontrollrohr. Bei Festlegung wird der URB mit _URB_CONTROL_TRANSFER als Datenstruktur verwendet.
URB_FUNCTION_CONTROL_TRANSFER_EX
Überträgt Daten an oder von einer Steuerelementpipeline ohne zeitlimit, die durch einen Timeoutwert angegeben wird. Bei Festlegung wird der 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 einem Massenrohr oder Unterbrechungsrohr oder in ein Massenrohr. Bei Festlegung wird der URB mit _URB_BULK_OR_INTERRUPT_TRANSFER als Datenstruktur verwendet.
URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_USING_CHAINED_MDL
Überträgt Daten mithilfe von verketteten MDLs an und von einem Massenrohr oder einer Unterbrechungspipeline. Bei Festlegung wird der 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 von verketteten MDLs finden Sie unter How to Send Chained MDLs">How to Send Chained MDLs.
URB_FUNCTION_ISOCH_TRANSFER
Überträgt Daten an oder von einem isochronen Rohr. Bei Festlegung wird der URB mit _URB_ISOCH_TRANSFER als Datenstruktur verwendet.
URB_FUNCTION_ISOCH_TRANSFER_USING_CHAINED_MDL
Überträgt Daten mithilfe von verketteten MDLs an oder von einem isochronen Rohr. Bei Festlegung wird der URB mit _URB_ISOCH_TRANSFER als Datenstruktur verwendet. Der Clienttreiber muss den TransferBufferMDL- Member auf den ersten 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 von verketteten MDLs finden Sie unter How to Send Chained 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 Pfeife zurück. Bei Festlegung wird dieser URB mit _URB_PIPE_REQUESTverwendet.
Anmerkung
Dieser URB ersetzt URB_FUNCTION_RESET_PIPE.
Der Busfahrer führt drei Aufgaben als Reaktion auf diese URB durch:
Zunächst sendet dieser URB für alle Rohre außer isochronen Rohren eine CLEAR_FEATURE Anforderung, um die ENDPOINT_HALT-Funktion des Geräts zu löschen.
Zweitens setzt der USB-Bustreiber die Datenumschaltung auf der Hostseite zurück, wie dies für die USB-Spezifikation erforderlich ist. Das USB-Gerät sollte den Datenschalter 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 bereit: URB_FUNCTION_SYNC_CLEAR_STALL und URB_FUNCTION_SYNC_RESET_PIPE. Diese ermöglichen es Clienttreibern, das feature ENDPOINT_HALT auf dem Gerät zu löschen oder die Pipe auf der Hostseite zurückzusetzen, ohne dass sich dies auf die Hostseite auswirkt. Wenn das Gerät die Datenumschaltung bei Bedarf nicht zurücksetzt, kann der Clienttreiber diesen Fehler ausgleichen, indem er den hostseitigen Datenumschalter nicht zurücksetzt. Wenn die Datenumschaltung auf der Hostseite, aber nicht auf der Geräteseite zurückgesetzt wird, werden Pakete aus der Reihenfolge entfernt, und das Gerät kann Pakete ablegen.
Drittens, nachdem der Bustreiber die Leitung erfolgreich zurückgesetzt hat, setzt er Übertragungen mit der nächsten in die Warteschlange eingereihten URB fort.
Nach dem Zurücksetzen einer Pipe werden Die Übertragungen mit der nächsten in die Warteschlange eingereihten URB fortgesetzt.
Es ist nicht erforderlich, eine Unterbrechungsbedingung für ein Standardkontrollrohr zu löschen. Die Standardsteuerungspipeline muss immer Setuppakete akzeptieren, und wenn sie angehalten wird, löscht der USB-Stapel die Unterbrechungsbedingung automatisch. Der Clienttreiber muss keine besondere Aktion ergreifen, um die Anhaltenbedingung für eine Standardpipeline zu löschen.
Alle Übertragungen müssen abgebrochen oder abgebrochen werden, bevor Sie versuchen, die Pipe zurückzusetzen.
Diese URB muss an PASSIVE_LEVEL gesendet werden.
URB_FUNCTION_SYNC_RESET_PIPE
Löscht den Haltzustand auf der Hostseite eines Rohrs. Bei Festlegung wird dieser URB mit _URB_PIPE_REQUEST als Datenstruktur verwendet.
Dieser URB ermöglicht es einem Client, den angehaltenen Zustand einer Pipe zu löschen, ohne den Datenschalter zurückzusetzen und ohne die Endpunkt-Stallbedingung zu löschen (Feature ENDPOINT_HALT). Um eine Unterbrechungsbedingung für die Rohre zu löschen, setzen Sie den Hostseitigen Datenschalter zurück und löschen Sie einen Stand auf dem Gerät mit einem einzigen Vorgang, verwenden Sie URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL.
Die folgenden Statuscodes sind wichtig und haben die angegebene Bedeutung:
USBD_STATUS_INVALID_PIPE_HANDLE
Die PipeHandle- ist ungültig.
USBD_STATUS_ERROR_BUSY
Der Endpunkt hat aktive Übertragungen ausstehend.
Es ist nicht erforderlich, eine Unterbrechungsbedingung für ein Standardkontrollrohr zu löschen. Die Standardsteuerungspipeline muss immer Setuppakete akzeptieren, und wenn sie angehalten wird, löscht der USB-Stapel die Unterbrechungsbedingung automatisch. Der Clienttreiber muss keine besondere Aktion ergreifen, um die Anhaltenbedingung für eine Standardpipeline zu löschen.
Alle Übertragungen müssen abgebrochen oder abgebrochen werden, bevor Sie versuchen, 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 Stallbedingung auf dem Endpunkt. Für alle Rohre mit Ausnahme von isochronen Rohren sendet dieser URB eine CLEAR_FEATURE Anforderung, um die ENDPOINT_HALT-Funktion des Geräts zu löschen. Im Gegensatz zur RB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL-Funktion setzt diese URB-Funktion die Datenumschaltung auf der Hostseite der Pipe jedoch nicht zurück. Die USB-Spezifikation erfordert, dass Geräte den geräteseitigen Datenschalter zurücksetzen, nachdem der Client das feature ENDPOINT_HALT des Geräts gelöscht hat, aber einige nicht kompatible Geräte setzen ihre Datenumschaltung nicht ordnungsgemäß zurück. Clienttreiber, die solche Geräte verwalten, können diesen Fehler ausgleichen, indem sie den Zustand des Stalls direkt mit URB_FUNCTION_SYNC_CLEAR_STALL löschen, anstatt das Rohr mit URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL zurückzusetzen. URB_FUNCTION_SYNC_CLEAR_STALL löscht eine Stallbedingung auf dem Gerät, ohne die hostseitige Datenumschaltung zurückzusetzen. Dadurch wird verhindert, dass ein nicht kompatibles Gerät das nächste Paket als Erneutes Übertragen und Ablegen des Pakets interpretiert.
Bei Festlegung wird der 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. Bei Festlegung wird der 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. Bei Festlegung wird der URB mit _URB_CONTROL_DESCRIPTOR_REQUEST als Datenstruktur verwendet.
URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE
Legt einen Gerätedeskriptor auf einem Gerät fest. Bei Festlegung wird der 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. Bei Festlegung wird der URB mit _URB_CONTROL_DESCRIPTOR_REQUEST als Datenstruktur verwendet.
URB_FUNCTION_SET_FEATURE_TO_DEVICE
Legt ein USB-definiertes Feature auf einem Gerät fest. Bei Festlegung wird der 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. Bei Festlegung wird der 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. Bei Festlegung wird der 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. Bei Festlegung wird der 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. Bei Festlegung wird der 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. Bei Festlegung wird der 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. Bei Festlegung wird der URB mit _URB_CONTROL_FEATURE_REQUEST als Datenstruktur verwendet.
URB_FUNCTION_CLEAR_FEATURE_TO_OTHER
Löscht ein USB-definiertes Feature auf einem gerät definierten Ziel auf einem USB-Gerät. Bei Festlegung wird der URB mit _URB_CONTROL_FEATURE_REQUEST als Datenstruktur verwendet.
URB_FUNCTION_GET_STATUS_FROM_DEVICE
Ruft den Status von einem USB-Gerät ab. Bei Festlegung wird der URB mit _URB_CONTROL_GET_STATUS_REQUEST als Datenstruktur verwendet.
URB_FUNCTION_GET_STATUS_FROM_INTERFACE
Ruft den Status von einer Schnittstelle auf einem USB-Gerät ab. Bei Festlegung wird der URB mit _URB_CONTROL_GET_STATUS_REQUEST als Datenstruktur verwendet.
URB_FUNCTION_GET_STATUS_FROM_ENDPOINT
Ruft den Status eines Endpunkts für eine Schnittstelle auf einem USB-Gerät ab. Bei Festlegung wird der URB mit _URB_CONTROL_GET_STATUS_REQUEST als Datenstruktur verwendet.
URB_FUNCTION_GET_STATUS_FROM_OTHER
Ruft den Status eines gerätedefinierten Ziels auf einem USB-Gerät ab. Bei Festlegung wird der URB mit _URB_CONTROL_GET_STATUS_REQUEST als Datenstruktur verwendet.
URB_FUNCTION_VENDOR_DEVICE
Sendet einen herstellerspezifischen Befehl an ein USB-Gerät. Bei Festlegung wird der 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. Bei Festlegung wird der URB mit _URB_CONTROL_VENDOR_OR_CLASS_REQUEST als Datenstruktur verwendet.
URB_FUNCTION_VENDOR_ENDPOINT
Sendet einen anbieterspezifischen Befehl für einen Endpunkt auf einer Schnittstelle auf einem USB-Gerät. Bei Festlegung wird der 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. Bei Festlegung wird der 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. Bei Festlegung wird der URB mit _URB_CONTROL_VENDOR_OR_CLASS_REQUEST als Datenstruktur verwendet.
URB_FUNCTION_CLASS_INTERFACE
Sendet einen usb-definierten klassenspezifischen Befehl an eine Schnittstelle auf einem USB-Gerät. Bei Festlegung wird der URB mit _URB_CONTROL_VENDOR_OR_CLASS_REQUEST als Datenstruktur verwendet.
URB_FUNCTION_CLASS_ENDPOINT
Sendet einen USB-definierten klassenspezifischen Befehl an einen Endpunkt auf einer Schnittstelle auf einem USB-Gerät. Bei Festlegung wird der 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. Bei Festlegung wird der 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. Bei Festlegung wird der 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. Bei Festlegung wird der URB mit _URB_CONTROL_GET_INTERFACE_REQUEST als Datenstruktur verwendet.
Verfügbar in Windows 2000 und 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. Bei Festlegung wird der 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. Bei Festlegung wird der URB mit _URB_CONTROL_DESCRIPTOR_REQUEST als Datenstruktur verwendet.
URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR
Ruft einen Microsoft OS-Featuredeskriptor von einem USB-Gerät oder einer Schnittstelle auf einem USB-Gerät ab. Bei Festlegung wird der URB mit _URB_OS_FEATURE_DESCRIPTOR_REQUEST als Datenstruktur verwendet.
Verfügbar in Windows XP und späteren Betriebssystemen.
URB_FUNCTION_OPEN_STATIC_STREAMS
Öffnet Datenströme im angegebenen Massenendpunkt. Bei Festlegung wird der 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 Vorgehensweise Öffnen und Schließen statischer Datenströme in einem USB-Massenendpunkt.
URB_FUNCTION_CLOSE_STATIC_STREAMS
Schließt alle geöffneten Datenströme im angegebenen Massenendpunkt. Bei Festlegung wird der 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 Vorgehensweise Öffnen und Schließen statischer Datenströme in einem USB-Massenendpunkt.
Status
Enthält einen USBD_STATUS_XXX- Code, der vom Hostcontrollertreiber zurückgegeben wird.
UsbdDeviceHandle
Reserviert. Nicht verwenden.
UsbdFlags
Reserviert. Nicht verwenden.
Bemerkungen
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 (include Usb.h) |
Siehe auch
_URB_BULK_OR_INTERRUPT_TRANSFER
_URB_CONTROL_DESCRIPTOR_REQUEST
_URB_CONTROL_GET_CONFIGURATION_REQUEST
_URB_CONTROL_GET_INTERFACE_REQUEST
_URB_CONTROL_GET_STATUS_REQUEST
_URB_CONTROL_VENDOR_OR_CLASS_REQUEST