Pilote de la souris virtuelle Windows

Je développe un pilote de souris virtuelle KMDF.

L’idée générale est un pilote non filtré racine énuméré par KMDF qui pourra envoyer des rapports de sortie aux stacks du pilote de la souris et du clavier.

Mon pilote fonctionne déjà et envoie des requêtes à d’autres pilotes, mais sans résultat.

Les types de rapports et les formats de paquets ne sont pas documentés sur les ressources Microsoft. Il n’y a aucune information sur les données et l’appareil que je dois envoyer pour déplacer le pointeur de la souris, simuler des clics (avec la souris ou le clavier).

Il n’y a que des informations générales sur les clients HID, les pilotes, etc. Leur documentation fait souvent référence au référentiel git des exemples de pilotes Windows, mais le référentiel ne contient aucune source proche de ma tâche. Peu de gens sont en développement de pilotes, donc il n’y a pas non plus de tutoriels.

J’apprécierais me donner un indice où puis-je trouver plus au sujet de ma tâche.

HID est un standard défini par USB. Donc, Microsoft ne définit pas le format. En fait, HID est tellement polyvalent que le format doit être défini par vous-même dans le descripteur de rapport HID.

Le descripteur HID est défini dans les tableaux d’utilisation HID et HID de la définition de classe de périphérique .

À la page 61 de `Device Class Definition HID ‘, vous trouverez un exemple de souris qui correspond exactement à ce que vous voulez. Usage Page (Generic Desktop), Usage (Mouse), Collection (Application), Usage (Pointer), Collection (Physical), Report Count (3), Report Size (1), Usage Page (Buttons), Usage Minimum (1), Usage Maximum (3), Logical Minimum (0), Logical Maximum (1), Input (Data, Variable, Absolute), Report Count (1), Report Size (5), Input (Constant), Report Size (8), Report Count (2), Usage Page (Generic Desktop), Usage (X), Usage (Y), Logical Minimum (-127), Logical Maximum (127), Input (Data, Variable, Relative), End Collection, End Collection

La réponse de Jks Liu indique déjà la bonne direction. La meilleure façon d’émuler une souris est d’émuler le matériel USB HID.

Si vos données de souris virtuelle proviennent du matériel que vous contrôlez, vous pouvez également ignorer le composant du pilote et rendre votre matériel compatible HID.

Si nous parlons d’une émulation de logiciel pur, je pense que votre meilleur pari sera d’émuler un périphérique USB qui s’identifie comme un périphérique HID. Il existe un excellent article MSDN sur la création de votre propre émulation de périphérique USB. La bonne chose est qu’ils utilisent HID comme exemple de descripteur USB:

 const UCHAR g_UsbDeviceDescriptor[] = { // Device Descriptor 0x12, // Descriptor Size 0x01, // Device Descriptor Type 0x00, 0x03, // USB 3.0 0x00, // Device class 0x00, // Device sub-class 0x00, // Device protocol 0x09, // Maxpacket size for EP0 : 2^9 0x5E, 0x04, // Vendor ID 0x39, 0x00, // Product ID 0x00, // LSB of firmware version 0x03, // MSB of firmware version 0x01, // Manufacture ssortingng index 0x03, // Product ssortingng index 0x00, // Serial number ssortingng index 0x01 // Number of configurations }; 

Pour connaître les points de terminaison et les données HID que vous devez envoyer, vous pouvez lire les spécifications HID, mais il serait plus simple d’examiner les implémentations existantes des microcontrôleurs. Beaucoup de marques de microcontrôleurs ont des exemples sur la façon d’émuler une souris USB HID avec leur stack USB. Quelques exemples:

  • Atmel – Implémentation du pilote USB HID AT91
  • Microchip – Classe USB HID sur un périphérique embarqué
  • Arduino – Un clavier USB HID, une souris, un émulateur d’écran tactile