Remarque
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.
Meilleures pratiques pour un pilote de contrôleur hôte pour la gestion des demandes d’E/S envoyées par UCX.
UCX effectue le suivi de tous les points de terminaison créés par le pilote du contrôleur hôte pour les périphériques sur le bus USB. Toutes les demandes de transfert de données envoyées par le pilote hub, ou par un autre pilote plus élevé dans la pile de périphériques USB, sont d’abord gérées par UCX. UCX est responsable du transfert de l'objet de requête de cadre vers la file d'attente correcte du point de terminaison. Le bloc de requête USB (URB) contenu dans la requête peut spécifier un handle de point de terminaison. Si un manipulateur de point de terminaison est spécifié, UCX vérifie le point de terminaison correspondant parmi les points de terminaison présents pour le dispositif. Si le handle de point de terminaison spécifié est présent, la requête est transférée à la file d’attente du point de terminaison. Si le handle de point de terminaison spécifié est introuvable, la requête a échoué. Si aucun handle n’est spécifié, la requête concerne le point de terminaison par défaut et UCX transfère la requête à la file d’attente de point de terminaison par défaut du pilote du contrôleur hôte pour cet appareil.
Pour garantir la compatibilité avec les pilotes USB existants, le contrôleur hôte doit respecter les exigences suivantes lors de la demande URB :
- WdfRequestComplete doit être appelé à DISPATCH_LEVEL.
- Si l’URB a été remis à la file d'attente de son cadre et que le pilote a commencé le traitement en mode synchrone sur le thread ou le DPC du pilote appelant, la requête ne doit pas non plus être effectuée en mode synchrone. La demande doit être effectuée sur un DPC distinct, qui peut être planifié avec un appel à WdfDpcEnqueue.
- Comme pour l’exigence précédente, lors de la réception de EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE ou de EVT_WDF_REQUEST_CANCEL, le pilote du contrôleur hôte doit effectuer la requête URB sur une DPC distincte du thread appelant ou du DPC. Par défaut, WDF traite les demandes annulées dans la file de manière synchrone. Ce comportement peut entraîner des problèmes pour les requêtes URB. Pour cette raison, le pilote doit fournir un rappel EvtIoCanceledOnQueue pour ses files d’attente URB.
L’objet de requête de framework pour un IOCTL_INTERNAL_USB_SUBMIT_URB contient un URB situé à Parameters.Others.Arg1 de la requête. Une fois la demande terminée, l’état URB doit être défini sur USBD_STATUS_SUCCESS ou sur un état d’échec qui indique la nature de l’échec. Les valeurs d’état d’échec sont définies dans le fichier d’en-tête usb.h.