Utilisation des périphériques USB
Cette rubrique décrit les opérations qu’un pilote KMDF (Kernel-Mode Driver Framework) ou User-Mode Driver Framework (UMDF) à partir de la version 2 peut effectuer à l’aide des méthodes d’objet de périphérique USB fournies par Windows Driver Frameworks (WDF).
Il contient les sections suivantes :
- Création d’un objet de périphérique USB
- Configuration d’un périphérique USB
- Obtention d’informations sur l’appareil
- Obtention des descripteurs USB
- Envoi d’un transfert de contrôle
- Réinitialisation et Power-Cycling le port d’un appareil
- Envoi d’un URB à un appareil
Pour obtenir des instructions détaillées sur l’écriture d’un pilote client USB simple basé sur KMDF, consultez Comment écrire votre premier pilote client USB (KMDF).
Création d’un objet de périphérique USB
Pour utiliser les objets cibles d’E/S USB de l’infrastructure (WDFUSBDEVICE, WDFUSBINTERFACE et WDFUSBPIPE), votre pilote client doit d’abord appeler WdfUsbTargetDeviceCreateWithParameters pour créer un objet périphérique USB. En règle générale, un pilote appelle WdfUsbTargetDeviceCreateWithParameters à partir de sa fonction de rappel EvtDevicePrepareHardware .
Lorsque le pilote appelle WdfUsbTargetDeviceCreateWithParameters, le framework crée un objet WDFUSBDEVICE et l’associe au FDO qui représente le périphérique USB. La méthode retourne un handle au nouvel objet périphérique USB du framework que le pilote client USB peut ensuite utiliser pour communiquer avec le périphérique physique.
Après avoir appelé WdfUsbTargetDeviceCreateWithParameters, le pilote peut appeler WdfUsbTargetDeviceGetDeviceDescriptor et WdfUsbTargetDeviceRetrieveConfigDescriptor pour obtenir des descripteurs USB à partir de l’appareil. Ces descripteurs contiennent des informations sur la première configuration de l’appareil, ses paramètres d’interface et leurs points de terminaison définis. (Les descripteurs USB sont définis dans la spécification USB officielle.)
Configuration d’un périphérique USB
La méthode WdfUsbTargetDeviceCreateWithParameters crée également un objet d’interface USB d’infrastructure pour chaque interface USB que contient la première configuration de l’appareil.
Après avoir appelé WdfUsbTargetDeviceCreateWithParameters, le pilote client doit appeler WdfUsbTargetDeviceSelectConfig pour sélectionner une configuration. Cette méthode crée des objets d’interface d’infrastructure pour chaque autre paramètre de l’interface dans la configuration sélectionnée.
La méthode crée également des objets de canal qui représentent des points de terminaison définis dans chaque autre paramètre de chaque interface de la configuration sélectionnée.
Une fois que vous avez sélectionné une configuration, vous pouvez modifier d’autres paramètres pour les interfaces de la configuration, si nécessaire.
Vous pouvez également appeler WdfUsbTargetDeviceSelectConfig pour déconfigurer un appareil.
Pour plus d’informations, consultez :
- Comment sélectionner une configuration pour un périphérique USB
- Comment sélectionner un autre paramètre dans une interface USB
Obtention d’informations sur l’appareil
Après avoir configuré un appareil, votre pilote client peut appeler les méthodes suivantes pour obtenir des informations sur un périphérique USB :
WdfUsbTargetDeviceQueryUsbCapability
Détermine si le contrôleur hôte et la pile de pilotes USB prennent en charge une fonctionnalité spécifique. Avant d’appeler WdfUsbTargetDeviceQueryUsbCapability, un pilote doit appeler WdfUsbTargetDeviceCreateWithParameters.
WdfUsbTargetDeviceGetIoTarget
Retourne un handle à l’objet cible d’E/S associé à un périphérique USB. Le pilote peut passer ce handle à WdfRequestSend ou WdfIoTargetStop.
WdfUsbTargetDeviceRetrieveInformation
Récupère les informations de version et de capacité associées à un périphérique USB.
WdfUsbTargetDeviceIsConnectedSynchronous (KMDF uniquement)
Détermine si l’appareil est connecté.
WdfUsbTargetDeviceRetrieveCurrentFrameNumber (KMDF uniquement)
Récupère le numéro de frame USB actuel.
Obtention des descripteurs USB
Pour obtenir les chaînes Unicode contenues dans les descripteurs d’un périphérique USB, le pilote peut appeler l’une des méthodes suivantes :
WdfUsbTargetDeviceGetDeviceDescriptor
Obtient le descripteur de périphérique USB d’un appareil.
WdfUsbTargetDeviceRetrieveConfigDescriptor
Obtient le descripteur de configuration USB, les descripteurs d’interface et les descripteurs de point de terminaison d’un appareil.
WdfUsbTargetDeviceQueryString
Copie une chaîne Unicode dans une mémoire tampon fournie par le pilote.
WdfUsbTargetDeviceAllocAndQueryString
Copie une chaîne Unicode dans une mémoire tampon fournie par l’infrastructure.
WdfUsbTargetDeviceFormatRequestForString
Met en forme une requête pour une chaîne Unicode. Le pilote peut appeler WdfRequestSend pour envoyer la requête de manière synchrone ou asynchrone.
Envoi d’un transfert de contrôle
Votre pilote peut appeler les méthodes suivantes pour envoyer une demande d’E/S qui décrit un transfert de contrôle USB standard, spécifique à la classe de périphérique ou spécifique au fournisseur.
WdfUsbTargetDeviceSendControlTransferSynchronously
Envoie de façon synchrone une demande de transfert de contrôle USB.
WdfUsbTargetDeviceFormatRequestForControlTransfer
Met en forme une demande de transfert de contrôle USB. Le pilote peut appeler WdfRequestSend pour envoyer la requête de manière synchrone ou asynchrone.
Pour plus d’informations, consultez Comment envoyer un transfert de contrôle USB.
Réinitialisation et Power-Cycling le port d’un appareil
Votre pilote peut appeler les méthodes suivantes pour réinitialiser ou mettre sous tension le port USB auquel un appareil est connecté :
WdfUsbTargetDeviceResetPortSynchronously
Envoie de façon synchrone une demande de réinitialisation du port USB d’un appareil.
WdfUsbTargetDeviceCyclePortSynchronously (KMDF uniquement)
Envoie de façon synchrone une demande pour le cycle d’alimentation du port USB d’un appareil.
WdfUsbTargetDeviceFormatRequestForCyclePort (KMDF uniquement)
Met en forme une demande pour le cycle d’alimentation du port USB d’un appareil. Le pilote doit appeler WdfRequestSend pour envoyer la requête de manière synchrone ou asynchrone.
Pour plus d’informations, consultez Comment récupérer à partir d’erreurs de canal USB.
Envoi d’un URB à un appareil
Si votre pilote KMDF communique avec son périphérique USB en envoyant des demandes d’E/S qui contiennent des URB, le pilote peut appeler les méthodes suivantes :
WdfUsbTargetDeviceCreateUrb (KMDF uniquement)
Alloue un bloc de requête USB (URB). Avant d’appeler WdfUsbTargetDeviceCreateUrb, un pilote doit appeler WdfUsbTargetDeviceCreateWithParameters.
WdfUsbTargetDeviceCreateIsochUrb (KMDF uniquement)
Alloue un bloc de requête USB isochronous (URB). Avant d’appeler WdfUsbTargetDeviceCreateIsochUrb, un pilote doit appeler WdfUsbTargetDeviceCreateWithParameters.
WdfUsbTargetDeviceSendUrbSynchronously (KMDF uniquement)
Envoie de façon synchrone une demande d’E/S qui contient un URB.
WdfUsbTargetDeviceFormatRequestForUrb (KMDF uniquement)
Met en forme une demande d’E/S qui contient un URB. Le pilote doit appeler WdfRequestSend pour envoyer la requête de manière synchrone ou asynchrone.
WdfUsbTargetDeviceWdmGetConfigurationHandle (KMDF uniquement)
Retourne le handle de configuration USBD d’un appareil. Certains URB nécessitent ce handle.
Pour plus d’informations conceptuelles générales sur les URB, consultez Allocation et création d’URBs.