IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE IOCTL (usbioctl.h)

Die IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE E/A-Anforderung registriert den Treiber eines USB-Multifunktionsgeräts (Zusammengesetzter Treiber) mit dem zugrunde liegenden USB-Treiberstapel.

Diese Anforderung wird von einem Treiber gesendet, der den von Microsoft bereitgestellten zusammengesetzten Treiber ersetzt, Usbccgp.sys und das Feature zum Anhalten der Funktion und Remotereaktivierung gemäß der USB 3.0-Spezifikation (Universal Serial Bus) implementiert.

IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE ist eine E/A-Steuerungsanforderung im Kernelmodus. Diese Anforderung richtet sich an das PDO -Objekt (Physical Device Object, PDO) des USB-Hubs. Diese Anforderung muss auf einer Interruptanforderungsebene (IRQL) von PASSIVE_LEVEL gesendet werden.

Hauptcode

IRP_MJ_INTERNAL_DEVICE_CONTROL

Eingabepuffer

Parameters.Others.Argument1 ist ein Zeiger auf eine vom Aufrufer zugewiesene und initialisierte REGISTER_COMPOSITE_DEVICE< Struktur, die Informationen zum übergeordneten Treiber enthält. Um die Struktur zu initialisieren, rufen Sie die USBD_BuildRegisterCompositeDevice Routine auf.

Das AssociatedIrp.SystemBuffer-Element verweist auf einen vom Aufrufer zugewiesenen Puffer, der groß genug ist, um ein Array von Funktionshandles (typisiert USBD_FUNCTION_HANDLE) für Funktionen im USB-Verbundgerät aufzunehmen. Die Anzahl der Elemente im Array wird durch das FunctionCount-Element von REGISTER_COMPOSITE_DEVICE angegeben. Um die Anzahl der Funktionen abzurufen, überprüfen Sie die Deskriptoren, die von einer Get-Configuration-Anforderung zurückgegeben werden.

Eingabepufferlänge

Die Größe einer REGISTER_COMPOSITE_DEVICE-Struktur .

Ausgabepuffer

Bei der Ausgabe wird der Puffer, auf den der AssociatedIrp.SystemBuffer-Member verweist, mit Funktionshandles für Funktionen im Multifunktionsgerät gefüllt.

Länge des Ausgabepuffers

Die Größe der Funktionshandles für Funktionen im Gerät.

Statusblock

Der USB-Treiberstapel legt Irp-IoStatus.Status> auf STATUS_SUCCESS fest, wenn die Anforderung erfolgreich abgeschlossen wurde. STATUS_SUCCESS gibt an, dass die Funktionshandles gültig sind.

Im Falle eines Fehlers enthält Irp-IoStatus.Status> einen entsprechenden Fehler status. Wenn der zusammengesetzte Treiber die Anforderung beispielsweise mehrmals sendet, wird der Status auf STATUS_INVALID_DEVICE_REQUEST festgelegt.

Hinweise

Der Zweck von IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE besteht darin, dass der zusammengesetzte Treiber eine Registrierungsanforderung an den USB-Treiberstapel sendet. In der Registrierungsanforderung gibt der zusammengesetzte Treiber die Anzahl der vom Gerät unterstützten Funktionen an. Daher müssen Sie die IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE Anforderung senden, nachdem Sie die Anzahl der Funktionen bestimmt haben. In der Regel werden diese Informationen in der Startgeräteroutine des zusammengesetzten Treibers IRP_MN_START_DEVICE abgerufen. Beachten Sie, dass die Anzahl der Schnittstellen in einer Konfiguration die Anzahl der Funktionen angeben kann , aber nicht immer. Bestimmte Mehrfunktionsgeräte machen mehrere Schnittstellen verfügbar, die mit einer Funktion verbunden sind. Um die Anzahl der Funktionen abzurufen, müssen Sie verschiedene Deskriptoren untersuchen, die mit einer bestimmten Konfiguration zusammenhängen. Diese Deskriptoren können über eine get-descriptor-Anforderung abgerufen werden.

Als Reaktion auf die Registrierungsanforderung stellt der USB-Treiberstapel eine Liste der Handles für die Funktionen im Gerät bereit. Ein Codebeispiel finden Sie unter Registrieren eines zusammengesetzten Geräts.

Nachdem der zusammengesetzte Treiber registriert wurde, kann der Treiber die Remotereaktivierungsfunktion konfigurieren. Mithilfe des Funktionshandles kann der zusammengesetzte Treiber eine Anforderung IOCTL_INTERNAL_USB_REQUEST_REMOTE_WAKE_NOTIFICATION senden, um Remoteweckbenachrichtigungen vom USB-Treiberstapel abzurufen, wenn die zugehörige Funktion ein Fortsetzungssignal sendet.

Um die Zuordnung des zusammengesetzten Treibers mit dem USB-Treiberstapel zu entfernen und alle Ressourcen freizugeben, die für die Registrierung zugewiesen sind, muss der Treiber die IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE-Anforderung senden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8
Kopfzeile usbioctl.h (include Usbioctl.h)
IRQL PASSIVE_LEVEL

Weitere Informationen

Registrieren eines zusammengesetzten Geräts

IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE