2009-07-16 7 views
3

Comment communiquer avec un pilote depuis l'espace utilisateur de Windows? (Vista si cela fait une différence.) Puis-je, et comment, communiquer avec le service depuis le site du pilote?Connexion du pilote Windows au service Userland

Je ne suis en fait pas très paresseux et devrait probablement obtenir mon patron pour m'acheter un livre, mais je ne sais pas lequel. Et deviner les commandes et les sections du MSDN prend un peu de temps et de nerfs sans les bons termes à rechercher. Quelqu'un peut-il me laisser quelques termes à rechercher dans la documentation?

Répondre

3

OSR online est une bonne source d'informations sur l'écriture de pilotes Windows.

How to name devices in kernel mode (avec un lien pour accéder à la sécurité).

la trajectoire fondamentale est la suivante:

Nom de votre objet périphérique avec l'une des fonctions d'attribution de nom (par exemple WdfDeviceInitAssignName).

Dans le service que vous faire:

hDev = CreateFile(<obj name>, ..., OVERLAPPED) 

DeviceIOControl(hDev, .. , OVERLAPPED); 

while(!end) 
    SleepEx(100, true /*bAltertable*/); 

... 

Dans le pilote, vous avez une file d'attente d'IRP, dans lequel vous file d'attente des demandes de service. Lorsque vous souhaitez appeler le service, vous effectuez l'un des IRP. NB: C'est un peu complexe ... et cela dépend de la structure/du modèle de pilote avec lequel vous travaillez. Je devais le faire une seule fois avec un pilote de filtre NDIS. Demandez à nouveau, si vous avez besoin de plus d'informations.

+0

merci pour la réponse rapide, je creuse à travers la réponse (test). Le lien nécessite (encore un autre) un compte Web à créer. –

1

Je dois faire cela comme une réponse pour garder les liens, pas comme un commentaire à Christopher.

merci encore. Et grâce à ce tutoriel, je peux ajouter une autre réponse sous peu. C'est le nom par exemple. par

IoCreateSymbolicLink(&usDosDeviceName, &usDriverName);

que j'avais besoin. (Je recommande ci-dessus tutoriel pour faire un sujet complexe facile à comprendre)

programmes userland peuvent alors communiquer avec le conducteur en ouvrant un descripteur de fichier:

CreateFile("\\\\.\\Example", 
1

En plus de ce qui a été dit ci-dessus, votre question: « Can Je, et comment, communiquer avec le service du site du pilote? "

Ceci est typiquement fait par ce qu'ils appellent un "appel inversé". Vous allez envoyer un IOCTL et bloquer jusqu'à ce que le conducteur le remplisse avec les données demandées. En ce qui concerne les livres à commander, j'ai vraiment apprécié le livre Greg Hoglund Rootkits pour l'écriture de base des pilotes (c'est-à-dire le pilote Hello World). OSR Online est excellent. Un ancien mais toujours génial est le développement de pilotes de périphériques Windows NT. OSR a des réimpressions classiques de grands livres à obtenir. Vraiment cependant, les exemples qui viennent avec le WDK de Microsoft répondront probablement à beaucoup de vos questions.

0

Sur le livre: « Développer les pilotes avec la Fondation du pilote Windows » a été recommendet dans une réponse à learning to program drivers

0

Le prêt-à-accumulation et execute WDK sample SIOCTL est votre meilleur pari.Juste quelques centaines de lignes de code (surtout des commentaires et des espaces) vous donnera un début rapide et la compréhension du modèle Windows I/O, qui est la façon officielle de l'utilisateur < ==> méthode de communication du noyau.

Chaque apprenti conducteur de Windows devrait commencer par celui-ci.

Questions connexes