IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE IOCTL (usbioctl.h)

La demande d’E /S IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE inscrit le pilote d’un périphérique multi-fonction USB (pilote composite) avec la pile de pilotes USB sous-jacente.

Cette demande est envoyée par un pilote qui remplace le pilote composite fourni par Microsoft, Usbccgp.sys et implémente la fonctionnalité de suspension de fonction et de mise en éveil à distance, conformément à la spécification USB 3.0 (Universal Serial Bus).

IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE est une demande de contrôle d’E/S en mode noyau. Cette requête cible l’objet de périphérique physique (PDO) du hub USB. Cette demande doit être envoyée au niveau de la demande d’interruption (IRQL) de PASSIVE_LEVEL.

Code principal

IRP_MJ_INTERNAL_DEVICE_CONTROL

Mémoire tampon d'entrée

Parameters.Others.Argument1 est un pointeur vers une structure de REGISTER_COMPOSITE_DEVICE< allouée et initialisée par l’appelant qui contient des informations sur le pilote parent. Pour initialiser la structure, appelez la routine USBD_BuildRegisterCompositeDevice .

Le membre AssociatedIrp.SystemBuffer pointe vers une mémoire tampon allouée à l’appelant qui est suffisamment grande pour contenir un tableau de handles de fonction (typés USBD_FUNCTION_HANDLE) pour les fonctions dans le périphérique composite USB. Le nombre d’éléments dans le tableau est indiqué par le membre FunctionCount de REGISTER_COMPOSITE_DEVICE. Pour obtenir le nombre de fonctions, inspectez les descripteurs retournés par une demande get-configuration.

Longueur de la mémoire tampon d’entrée

Taille d’une structure REGISTER_COMPOSITE_DEVICE .

Mémoire tampon de sortie

En sortie, la mémoire tampon pointée vers par le membre AssociatedIrp.SystemBuffer est remplie de handles de fonction pour les fonctions dans l’appareil multi-fonction.

Longueur de la mémoire tampon de sortie

Taille des handles de fonction pour les fonctions dans l’appareil.

Bloc d’état

La pile de pilotes USB définit Irp-IoStatus.Status> sur STATUS_SUCCESS si la demande se termine correctement. STATUS_SUCCESS indique que les handles de fonction sont valides.

En cas d’erreur, Irp-IoStatus.Status> contient une status d’erreur appropriée. Par exemple, si le pilote composite envoie la requête plusieurs fois, l’état est défini sur STATUS_INVALID_DEVICE_REQUEST.

Remarques

L’objectif de IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE est que le pilote composite envoie une demande d’inscription à la pile de pilotes USB. Dans la demande d’inscription, le pilote composite spécifie le nombre de fonctions prises en charge par l’appareil. Par conséquent, vous devez envoyer la requête IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE après avoir déterminé le nombre de fonctions. En règle générale, ces informations sont récupérées dans la routine de démarrage du pilote composite IRP_MN_START_DEVICE. Notez que le nombre d’interfaces dans une configuration peut indiquer le nombre de fonctions, mais pas toujours. Certains appareils multi-fonctions exposent plusieurs interfaces liées à une seule fonction. Pour obtenir le nombre de fonctions, vous devez inspecter différents descripteurs liés à une configuration particulière. Ces descripteurs peuvent être obtenus via une demande get-descriptor.

En réponse à la demande d’inscription, la pile de pilotes USB fournit une liste de handles pour les fonctions de l’appareil. Pour obtenir un exemple de code, consultez Comment inscrire un appareil composite.

Une fois le pilote composite inscrit, il peut configurer la fonctionnalité de mise en éveil à distance. À l’aide du handle de fonction, le pilote composite peut envoyer une requête IOCTL_INTERNAL_USB_REQUEST_REMOTE_WAKE_NOTIFICATION pour obtenir des notifications de mise en éveil à distance à partir de la pile de pilotes USB, lorsque la fonction associée envoie un signal de reprise d’activité.

Pour supprimer l’association du pilote composite à la pile de pilotes USB et libérer toutes les ressources allouées pour l’inscription, le pilote doit envoyer la demande IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8
En-tête usbioctl.h (inclure Usbioctl.h)
IRQL PASSIVE_LEVEL

Voir aussi

Comment inscrire un appareil composite

IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE