Écriture des bases de Windows Port Monitor

J’essaie de trouver un exemple de base, un tutoriel ou un article de blog sur la manière d’écrire un moniteur de port d’imprimante. J’ai téléchargé le DDK Windows et creusé dans localmon, mais il semble que cet exemple soit bien plus complexe que les bases et qu’il soit un peu plus complexe. À ma connaissance, il est légèrement différent d’un moniteur de port OEM car il gère la clé de registre et énumération de ports. Est-ce que quelqu’un connaît un blog, un tutoriel ou même un livre qui guide le lecteur dans le code de base pour en créer un? J’ai trouvé quelques liens sur le concept, mais rien sur le code.

J’ai écrit le mien d’après les spécifications , il n’y a pas vraiment beaucoup d’API à implémenter.

EnumPorts est la seule chose qui attire les gens, le spouleur alloue suffisamment de mémoire pour TOUS les ports, pas seulement le vôtre. Donc, vous devez vous assurer que vous remplissez les chaînes de la fin du tampon de spouleur, ne les mettez pas directement après vos structures.

Cela ne le dit pas dans les spécifications, mais vous pouvez placer en toute sécurité les fonctions d’interface utilisateur et de serveur dans la même DLL.

Il est également possible de créer un moniteur à port unique prenant en charge NT et les moniteurs de port de type Windows 2000 ultérieurs.

Le code dans RedMon est beaucoup plus facile à lire que l’exemple localmon, il est donc intéressant de le consulter avant de commencer. C’est assez sympa car vous pouvez le comstackr en VS, vous n’avez pas besoin d’utiliser le DDK pour le construire.

Je peux recommander http://www.codeproject.com/KB/printing/wpa.aspx , qui décrit comment écrire un pilote d’imprimante et fournit de bons conseils sur ce qui est nécessaire pour créer un moniteur de port.

Mais à mon avis, un bon tutoriel dans ce domaine n’est pas disponible sur Internet (je serais heureux de trouver quelqu’un qui puisse me montrer que je me trompe). Ainsi, lorsque j’ai dû faire face à cette tâche, j’ai été forcé de le faire à la dure: j’ai lu attentivement les explications MSDN à partir de ce point: http://msdn.microsoft.com/en-us/library/ff561109 .aspx . En parallèle à la lecture de MSDN, j’ai également vérifié le code dans le DDK que vous avez mentionné et essayé de le comprendre. Je suis sûr que cette solution pourrait également fonctionner pour vous.

J’ai été sur ce même territoire pour une imprimante série. L’article le plus intéressant que j’ai trouvé est celui du Dr Dobbs Journal . L’avantage est qu’un pilote de port série et le programme de contrôle de l’espace utilisateur sont tous deux couverts. Le projet peut également être utilisé comme exemple de configuration de Visual Studio pour la compilation d’un pilote. C’est aussi quelque chose d’un peu difficile pour trouver des informations. L’article décrit un ancien pilote de style NT, qui fonctionnait bien pour moi sous XP.

Il y a pas mal de bons articles sur CodeProject sur l’écriture de pilotes et de programmes pour interagir avec eux. Ils incluent le code source et la plupart traitent des nouveaux pilotes de style WDM et WDF.

OSROnline est une autre bonne source, en particulier pour discuter de problèmes spécifiques et d’erreurs courantes. Ils ont également quelques utilitaires dont vous aurez besoin.

Parmi les codes de pilote les plus clairement écrits et les plus compréhensibles que j’ai rencontrés, citons l’exemple de code de Mark Russinovich. Bien que Microsoft ait supprimé l’intégralité de la source lors de l’achat de Sysinternals, certains des meilleurs exemples peuvent toujours être trouvés en cache ici et là.

Les pilotes sont assez intéressants. Quoi que vous fassiez, faites-le sur une machine virtuelle. Vraiment.