Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La requête 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 (Universal Serial Bus) 3.0.
IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE est une demande de contrôle d’E/S en mode noyau. Cette requête cible l’objet DDO (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 REGISTER_COMPOSITE_DEVICE< allouée par l’appelant et initialisée 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 par l’appelant qui est suffisamment grande pour contenir un tableau de handles de fonction (typé USBD_FUNCTION_HANDLE) pour les fonctions dans le périphérique composite USB. Le nombre d’éléments du tableau est indiqué par le FunctionCount membre 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 par AssociatedIrp.SystemBuffer membre 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 de l’appareil.
Bloc d’état
La pile de pilotes USB définit Irp->IoStatus.Status sur STATUS_SUCCESS si la requête se termine correctement. STATUS_SUCCESS indique que les handles de fonction sont valides.
En cas d’erreur, Irp->IoStatus.Status contient un état d’erreur approprié. Par exemple, si le pilote composite envoie la requête plusieurs fois, l'd’é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 d’une configuration peut indiquer le nombre de fonctions, mais pas toujours. Certains appareils à fonctions multiples exposent plusieurs interfaces liées à une 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 requête get-descripteur.
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 How to Register a Composite Device.
Une fois le pilote composite inscrit, le pilote peut configurer la fonctionnalité de mise en éveil à distance. À l’aide du handle de fonction, le pilote composite peut envoyer une demande 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.
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 de IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows 8 |
d’en-tête | usbioctl.h (include Usbioctl.h) |
IRQL | PASSIVE_LEVEL |
Voir aussi
Comment inscrire un d’appareil composite