Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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, Usbccgp.sys, ersetzt und die Funktion zum Anhalten und Remote-Wake-Up gemäß der Spezifikation universal Serial Bus (USB) 3.0 implementiert.
IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE ist eine E/A-Steuerungsanforderung im Kernelmodus. Diese Anforderung zielt auf das physische USB-Hub-Geräteobjekt (PDO) ab. 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. Rufen Sie zum Initialisieren der Struktur die USBD_BuildRegisterCompositeDevice Routine auf.
Der AssociatedIrp.SystemBuffer Member verweist auf einen vom Aufrufer zugewiesenen Puffer, der groß genug ist, um ein Array von Funktionsziehpunkten (typiert USBD_FUNCTION_HANDLE) für Funktionen im USB-Verbundgerät zu speichern. Die Anzahl der Elemente im Array wird durch das FunctionCount Member von REGISTER_COMPOSITE_DEVICEangegeben. 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 AssociatedIrp.SystemBuffer Member verweist, mit Funktionshandles für Funktionen auf dem Multifunktionsgerät gefüllt.
Länge des Ausgabepuffers
Die Größe der Funktionsziehpunkte 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.
Bei einem Fehler enthält Irp->IoStatus.Status einen entsprechenden Fehlerstatus. Wenn beispielsweise der zusammengesetzte Treiber die Anforderung mehrmals sendet, wird die Status- auf STATUS_INVALID_DEVICE_REQUEST festgelegt.
Bemerkungen
Der Zweck von IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE ist es, 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 ermittelt haben. In der Regel werden diese Informationen in der Startgeräteroutine des zusammengesetzten Treibers IRP_MN_START_DEVICEabgerufen. Beachten Sie, dass die Anzahl der Schnittstellen in einer Konfiguration die Anzahl der Funktionen angeben kann, aber nicht immer. Bestimmte multifunktionsfähige Geräte machen mehrere Schnittstellen verfügbar, die sich auf eine Funktion beziehen. Um die Anzahl der Funktionen zu erhalten, müssen Sie verschiedene Deskriptoren untersuchen, die mit einer bestimmten Konfiguration zusammenhängen. Diese Deskriptoren können über eine Get-Deskriptor-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 How to Register a Composite Device.
Nachdem der zusammengesetzte Treiber registriert wurde, kann der Treiber die Remote-Reaktivierungsfunktion konfigurieren. Mithilfe des Funktionshandles kann der zusammengesetzte Treiber eine Anforderung IOCTL_INTERNAL_USB_REQUEST_REMOTE_WAKE_NOTIFICATION senden, um Remote-Wake-Up-Benachrichtigungen vom USB-Treiberstapel abzurufen, wenn die zugeordnete 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 zugeordnet sind, muss der Treiber die IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE Anforderung senden.
Anforderungen
| Anforderung | Wert |
|---|---|
| mindestens unterstützte Client- | Windows 8 |
| Header- | usbioctl.h (include Usbioctl.h) |
| IRQL- | PASSIVE_LEVEL |