Choix d’un modèle de pilote pour le développement d’un pilote client USB

Cette rubrique fournit des instructions pour le choix du meilleur modèle de pilote pour le développement d’un pilote client USB qui agit comme le pilote de fonction de l’appareil.

Les fabricants de périphériques USB doivent souvent offrir aux applications un moyen d’accéder aux fonctionnalités de l’appareil. Pour choisir le meilleur mécanisme d’accès à un périphérique USB, commencez par l’approche la plus simple et passez à des solutions plus complexes uniquement si nécessaire. La liste suivante récapitule les choix abordés dans cette rubrique :

  1. si votre appareil appartient à une classe de périphérique USB pour laquelle Windows comprend un pilote de boîte de réception, vous n’avez pas besoin d’écrire un pilote.
  2. Si votre appareil n’a pas de pilote de classe fourni par Microsoft, et que l’appareil est accessible par une seule application, chargez WinUSB comme pilote de fonction.
  3. Si l’appareil doit être accessible par des applications simultanées et que votre appareil n’a pas de points de terminaison isochrone, écrivez un pilote client basé sur UMDF.
  4. Si les solutions de pilote de classe, WinUSB ou UMDF ne sont pas des options qui fonctionnent pour vous, écrivez un pilote client basé sur KMDF.
  5. Si une fonctionnalité particulière n’est pas prise en charge par KMDF, écrivez un pilote hybride qui appelle des routines WDM.

L’approche la plus courante consiste à implémenter un pilote de périphérique, (appelé pilote client USB dans cet ensemble de documentation) et à fournir un package d’installation qui installe le pilote comme pilote de fonction dans la pile de périphériques au-dessus de la pile de pilotes USB fournie par Microsoft. Le pilote client expose une interface d’appareil que les applications peuvent utiliser pour obtenir le descripteur de fichier de l’appareil. les Applications peuvent ensuite utiliser ce descripteur de fichier pour communiquer avec le pilote en appelant Windows api.

L’écriture d’un pilote personnalisé pour les besoins de l’appareil est la méthode la plus souple pour fournir un accès à un périphérique USB. Toutefois, l’implémentation d’un pilote nécessite beaucoup de travail. Le pilote doit effectuer des tâches complexes, telles que l’initialisation du pilote lorsque de nouveaux périphériques sont détectés, la gestion de l’alimentation, les opérations d’e/s, la suppression subite, la gestion des États et le nettoyage lors de la suppression de l’appareil. Avant de choisir d’écrire un pilote, posez-vous les questions suivantes :

Pouvez-vous utiliser un pilote fourni par Microsoft ?

Il se peut que vous n’ayez pas besoin d’écrire un pilote dans les cas suivants :

  • Votre appareil appartient à une classe de périphérique USB qui est prise en charge par Microsoft.

    Dans ce cas, le pilote de classe correspondant est chargé en tant que pilote de périphérique. pour obtenir la liste des classes d’appareils pour lesquelles Windows inclut un pilote de boîte de réception, consultez pilotes de classe de périphérique USB inclus dans Windows.

  • Votre appareil n’appartient pas à une classe d’appareil.

    Pour ces appareils, évaluez les fonctionnalités de l’appareil pour déterminer si vous pouvez charger le winusb fourni par Microsoft (Winusb.sys) en tant que pilote de fonction de l’appareil. L’utilisation de WinUSB est la meilleure solution dans les cas suivants :

    • Une seule application peut accéder à votre appareil.
    • Votre appareil prend en charge les points de terminaison en bloc, en interruption ou isochrone.
    • votre appareil est conçu pour fonctionner avec un ordinateur cible exécutant Windows XP avec Service Pack 2 (SP2) et les versions ultérieures de Windows.

    Le chargement de WinUSB comme pilote de fonction offre une alternative plus simple à l’implémentation d’un pilote USB personnalisé. Par exemple, WinUSB est l’approche recommandée pour une station météo électronique accessible uniquement par une application empaquetée avec l’appareil. Il est également utile pour la communication de diagnostic avec un appareil et pour le clignotement du microprogramme.

    Pour permettre aux applications d’envoyer facilement des requêtes à Winusb.sys, nous fournissons une DLL en mode utilisateur, Winusb.dll, qui expose les fonctions winusb. Une application peut appeler ces fonctions pour accéder à l’appareil, la configurer et transférer des données vers les points de terminaison de l’appareil.

    WinUSB n’est pas une option si :

    • Plusieurs applications accèdent à votre appareil.
    • votre appareil dispose de fonctions qui prennent déjà en charge le mode noyau dans le système d’exploitation Windows. Par exemple, pour les fonctions de modem (que TAPI prend en charge) ou les fonctions LAN (que NDIS prend en charge), vous devez utiliser l’interface que le pilote Usbser.sys prend en charge pour gérer les périphériques modems avec les logiciels en mode utilisateur.

    dans Windows 8, nous avons ajouté un nouvel ID compatible au fichier INF pour l’installation de WinUSB. Si le microprogramme de l’appareil contient cet ID compatible, WinUSB est chargé par défaut en tant que pilote de fonction pour l’appareil. Cela signifie que les fabricants de matériel ne sont pas tenus de distribuer les fichiers INF pour leurs appareils WinUSB. Pour plus d’informations, consultez winusb Device.

Si vous écrivez un pilote client USB, quel est le modèle de pilote le mieux adapté ?

La réponse dépend de la conception de votre appareil. Tout d’abord, déterminez si un modèle de pilote particulier répond à vos besoins. Certaines considérations relatives à la conception sont basées sur le fait que vous voulez que le périphérique USB soit accessible par plusieurs applications simultanées et qu’il prenne en charge la diffusion en continu des données via des points de terminaison isochrone.

Si vous choisissez d’écrire un pilote, Voici les options disponibles :

  • Infrastructure de pilote en mode utilisateur (UMDF)

    UMDF fournit des interfaces de pilote de périphérique (DDIs) qu’un pilote client peut utiliser pour s’intégrer à des composants Windows tels que le gestionnaire de Plug-and-Play et Power manager. UMDF fournit également des objets cibles spécialisés pour les périphériques USB, qui extraient le matériel en mode utilisateur et simplifient les opérations d’e/s pour le pilote. Outre les interfaces UMDF, WDF fournit des extensions de débogueur et des outils de suivi améliorés pour les pilotes en mode utilisateur. UMDF est basé sur le modèle COM (Component Object Model) et le développement d’un pilote en mode utilisateur est plus facile pour un développeur C++.

    Implémentez un pilote client basé sur UMDF pour un périphérique USB dans les cas suivants :

    • L’appareil est accessible simultanément par plusieurs applications.
    • L’appareil prend en charge les transferts en bloc ou les interruptions.

    Les pilotes qui s’exécutent en mode utilisateur ne peuvent accéder qu’à l’espace d’adressage de l’utilisateur (virtuel) et présentent un risque nettement plus faible pour le système. Les pilotes en mode noyau peuvent accéder à l’espace d’adressage du système et aux structures système internes. Un pilote en mode noyau mal codé peut provoquer des problèmes affectant d’autres pilotes ou du système, et éventuellement bloquer l’ordinateur. Par conséquent, un pilote en mode utilisateur peut être plus sûr qu’un pilote en mode noyau en termes de sécurité et de stabilité.

    Un autre avantage des pilotes en mode utilisateur est qu’ils tirent parti de toutes les API Win32. Par exemple, les pilotes peuvent appeler des API telles que Winsock, la compression, des API de chiffrement, etc. Ces API ne sont pas disponibles pour les pilotes en mode noyau.

    Un pilote client basé sur UMDF n’est pas une option pour les périphériques USB qui prennent en charge les points de terminaison isochrone.

    remarque Windows 8.1 introduit la version 2,0 de UMDF. Avec la version 2,0 de UMDF, vous pouvez écrire un pilote UMDF dans le langage de programmation C qui appelle la plupart des méthodes disponibles pour les pilotes KMDF. Vous ne pouvez pas utiliser UMDF version 2,0 pour écrire des pilotes de filtre inférieurs pour USB.

  • Infrastructure de pilote en mode noyau (KMDF)

    KMDF a été conçu pour faciliter l’extension des modèles de pilote afin de prendre en charge de nouveaux types de matériel. KMDF fournit des structures de données et de DDIs qui rendent les pilotes USB en mode noyau plus faciles à implémenter que les pilotes Windows Driver Model (WDM) précédents. En outre, KMDF fournit des cibles d’entrée/sortie (e/s) spécialisées que vous pouvez utiliser pour écrire un pilote client entièrement fonctionnel qui utilise la pile de pilotes USB Microsoft.

    Dans certains cas où une fonctionnalité particulière n’est pas exposée par le biais de KMDF, le pilote doit appeler les routines WDM. Le pilote n’a pas besoin d’implémenter l’ensemble de l’infrastructure WDM, mais utilise les méthodes KMDF pour accéder à un ensemble sélectionné de routines WDM. Par exemple, pour effectuer des transferts isochrones, un pilote client basé sur KMDF peut envoyer des URBs de style WDM qui décrivent la requête à la pile de pilotes USB. Ces pilotes sont appelés des pilotes hybrides dans cet ensemble de documentation.

    KMDF prend également en charge le modèle de pilote port-miniport. Par exemple, un pilote de miniport de streaming de noyau (tel qu’une webcam USB) qui utilise le streaming de noyau sur le bord supérieur peut utiliser des objets cibles d’e/s USB KMDF pour envoyer des requêtes à la pile de pilotes USB. Les pilotes NDIS peuvent également être écrits à l’aide de KMDF pour les bus basés sur des protocoles tels que USB.

    Les pilotes WDM purs sont difficiles à écrire, complexes et non fiables. Avec l’évolution de KMDF, l’écriture de ce type de pilote n’est plus nécessaire.

Microsoft Visual Studio 2012 comprend des modèles de pilote de User-Mode usb et de pilotes de Kernel-Mode usb qui génèrent le code de démarrage pour un pilote client KMDF UMDF et, respectivement. Le code du modèle Initialise un objet périphérique cible USB pour permettre la communication avec le matériel. Pour plus d'informations, voir les rubriques suivantes :

pour plus d’informations sur la façon d’implémenter les pilotes UMDF et KMDF, consultez le livre Microsoft Press developing drives with the Windows Driver Foundation.

Comparaison des fonctionnalités WinUSB, UMDF et KMDF

Le tableau suivant récapitule les fonctionnalités de WinUSB, les pilotes USB basés sur UMDF et les pilotes USB basés sur KMDF.

Fonctionnalité WinUSB UMDF KMDF
Prend en charge plusieurs applications simultanées Non Oui Oui
Isole l’espace d’adressage du pilote de l’espace d’adressage de l’application Non Oui Non
Prend en charge les transferts en bloc, d’interruption et de contrôle Oui Oui Oui
Prend en charge les transferts isochrones Oui ⁴ Non Oui
Prend en charge l’installation de pilotes en mode noyau, tels que les pilotes de filtre, en tant que couche superposée sur la pile USB. Non Non Oui
Prend en charge la suspension sélective et l’état d’attente/éveil Oui Oui Oui

Le tableau suivant récapitule les options de WDF prises en charge par les différentes versions de Windows.

Version de Windows WinUSB UMDF KMDF
Windows 8 Oui Oui Oui
Windows 7 Oui Oui Oui
Windows Vista Oui ¹ Oui ¹ Oui
Windows Server 2003 Non Non Oui
Windows XP Oui ² Oui ² Yes
Microsoft Windows 2000 Non Non Oui ³

Remarque Oui ¹ : WinUSB et UMDF sont pris en charge uniquement sur les versions x86 et x64 de Windows.

Yes ² : WINUSB et UMDF sont pris en charge dans Windows XP avec Service Pack 2 (SP2) ou versions ultérieures de Windows.

oui ³ : KMDF est pris en charge dans Windows 2000 avec SP4 ou versions ultérieures de Windows.

oui ⁴ : les transferts isochrones sont pris en charge dans Windows 8.1 ou versions ultérieures de Windows.

toutes les références clientes des versions 32 bits de Windows XP avec SP2support WinUSB. WinUSB n’est pas natif pour Windows XP ; il doit être installé avec le co-programme d’installation de WinUSB. toutes les références (sku) Windows Vista et les versions ultérieures de Windows prennent en charge WinUSB.

Prise en main du développement de pilotes clients USB
WinUSB
Écrire votre premier pilote client USB (UMDF)
Écrire votre premier pilote client USB (KMDF)