Application de bureau Windows pour un périphérique USB

Dans cet article, vous allez découvrir comment une application peut appeler des fonctions WinUSB pour communiquer avec un périphérique USB. Pour une telle application, WinUSB (Winusb.sys) doit être installé en tant que pilote de fonction de l’appareil. WinUSB dans la pile en mode noyau de l’appareil. Ce pilote est inclus dans Windows dans le dossier \Windows\System32\drivers.

Si vous utilisez Winusb.sys comme pilote de fonction d’un périphérique USB, vous pouvez appeler des fonctions WinUSB à partir d’une application pour communiquer avec l’appareil. Ces fonctions, exposées par la DLL en mode utilisateur Winusb.dll, simplifient le processus de communication. Au lieu de construire des demandes de contrôle d’E/S d’appareil pour effectuer des opérations USB standard (telles que la configuration de l’appareil, l’envoi de demandes de contrôle et le transfert de données vers ou depuis l’appareil), les applications appellent la fonction WinUSB équivalente.

Winusb.dll utilise les données fournies par l’application pour construire la demande de contrôle d’E/S d’appareil appropriée, puis envoie la demande à Winusb.sys pour traitement. Pour communiquer avec la pile USB, la fonction WinUSB appelle la fonction DeviceIoControl avec le IOCTL approprié qui correspond à la requête de l’application. Une fois la demande terminée, la fonction WinUSB transmet toutes les informations retournées par Winusb.sys (telles que les données d’une demande de lecture) au processus appelant. Si l’appel à DeviceIoControl réussit, il retourne une valeur différente de zéro. Si l’appel échoue ou est en attente (non traité immédiatement), DeviceIoControl retourne une valeur zéro. Si une erreur se produit, l’application peut appeler GetLastError pour obtenir un message d’erreur plus détaillé.

Il est plus simple d’utiliser des fonctions WinUSB pour communiquer avec un appareil que d’implémenter un pilote. Toutefois, notez les limitations suivantes :

  • Les fonctions WinUSB permettent à une application à la fois de communiquer avec l’appareil. Si vous avez besoin de plusieurs applications pour communiquer simultanément avec un appareil, vous devez implémenter un pilote de fonction.

  • Avant Windows 8.1, les fonctions WinUSB ne prennent pas en charge la diffusion en continu de données vers ou depuis des points de terminaison isochronaux.

  • Les fonctions WinUSB ne prennent pas en charge les appareils qui ont déjà pris en charge le mode noyau. Par exemple, les modems et les cartes réseau sont pris en charge par l’API de téléphonie (TAPI) et NDIS, respectivement.

  • Pour les appareils multifonctions, vous pouvez utiliser le fichier INF de l’appareil pour spécifier un pilote en mode noyau intégré ou Winusb.sys pour chaque fonction USB séparément. Toutefois, vous ne pouvez spécifier qu’une seule de ces options pour une fonction particulière, pas les deux.

Notes

Les fonctions WinUSB nécessitent Windows XP ou version ultérieure. Vous pouvez utiliser ces fonctions dans votre application C/C++ pour communiquer avec votre périphérique USB. Pour écrire une application UWP qui utilise des API WinUSB, consultez Application UWP pour un périphérique USB.

Prise en main

  1. Obtenir les outils nécessaires pour écrire une application de bureau Windows pour les appareils

  2. Obtenez un périphérique USB de test et sa spécification matérielle.

    • Utilisez la spécification pour déterminer les fonctionnalités de l’application et les décisions de conception associées.

    • Les appareils Microsoft USB Test Tool (MUTT) sont disponibles auprès de JJG Technologies. Cet appareil nécessite un microprogramme de Microsoft disponible dans Télécharger le package logiciel MUTT.

  3. Écrivez une application squelette qui obtient un handle sur l’appareil.

    Il existe deux approches pour écrire la première application :

  4. Installez Winusb.sys pour votre appareil.

    Si vous utilisez Visual Studio, installez le package de pilotes sur l’ordinateur cible à l’aide du déploiement de Visual Studio. Pour obtenir des instructions , consultez Écrire une application de bureau Windows basée sur le modèle WinUSB. Sinon, installez manuellement le pilote dans Gestionnaire de périphériques en écrivant un INF personnalisé. Pour plus d’informations, consultez Installation de WinUSB (Winusb.sys).

  5. Obtenez des informations sur votre appareil et affichez ses descripteurs.

    Pour plus d’informations conceptuelles, consultez Concepts pour tous les développeurs USB. Obtenez des informations sur les fonctionnalités de votre appareil en lisant le descripteur de configuration, les descripteurs d’interface pour chaque autre paramètre pris en charge et leurs descripteurs de point de terminaison. Pour plus d’informations, consultez Interroger le périphérique pour les descripteurs USB.

  6. Envoyer un transfert de contrôle USB.

    Envoyez des demandes de contrôle standard et des commandes du fournisseur à votre appareil. Pour plus d’informations, consultez Envoyer le transfert de contrôle au point de terminaison par défaut.

  7. Envoyer des transferts en bloc ou des interruptions.

    Effectuez des opérations de lecture et d’écriture vers et à partir des points de terminaison en bloc, d’interruption et isochronous pris en charge par votre appareil. Pour plus d’informations, consultez Demandes d’E/S de problème.

  8. Envoyer des transferts isochrones.

    Envoyer des demandes de lecture et d’écriture isochrones, principalement utilisées pour la diffusion en continu des données. Cette fonctionnalité est disponible uniquement sur Windows 8.1 et versions ultérieures. Pour plus d’informations, consultez Envoi de transferts isochrones USB à partir d’une application de bureau WinUSB.

Voir aussi