Question

Avant de me lancer tête baissée dans C # ...

J'ai toujours pensé que C, ou peut-être C ++, était préférable pour développer des pilotes sous Windows. Je ne suis pas partisan du développement d’un pilote sur une machine .NET.

Mais .NET semble être la voie que se dirige MS pour le développement d’applications, je me pose donc la question suivante:

  • Les gens utilisent-ils C # pour développer des pilotes?
  • Devez-vous utiliser de nombreux hooks d'API ou C # dispose-t-il des fonctionnalités lui permettant d'interagir avec le noyau sans beaucoup de piratage?
  • Quelqu'un peut-il parler de la fiabilité et de la sécurité d'un programme C # plus proche de Ring 0 que ce ne serait normalement le cas?

Je veux que mes périphériques soient utilisables en C #, et si le pilote du pilote en C # est mature, c'est évidemment la voie à suivre, mais je ne veux pas y consacrer beaucoup d'efforts si ce n'est pas recommandé.

  • Quelles sont les bonnes ressources pour commencer, par exemple, le développement d’un pilote de port série virtuel simple?

-Adam

Était-ce utile?

La solution

Vous ne pouvez pas créer de pilotes de périphérique en mode noyau en C #, car l'exécution ne peut pas être chargée en toute sécurité dans ring0 et fonctionner comme prévu.

De plus, C # ne crée pas de fichiers binaires adaptés au chargement en tant que pilotes de périphérique, en particulier en ce qui concerne les points d'entrée que les pilotes doivent exposer. La dépendance à l'exécution pour effectuer des analyses et analyser le fichier binaire JIT pendant le chargement interdit l'accès direct au sous-système du pilote nécessaire au chargement du fichier binaire.

Des travaux sont en cours, cependant, pour mettre certains pilotes de périphérique en mode utilisateur, vous pouvez voir une interview ici avec Peter Wieland de l’équipe UDMF (User Mode Driver Framework).

Les pilotes en mode utilisateur seraient beaucoup plus adaptés au travail géré, mais vous devrez un peu google pour savoir si C # et .NET seront directement pris en charge. Tout ce que je sais, c'est que les pilotes de niveau noyau ne sont pas réalisables uniquement en C #.

Cependant, vous pouvez probablement créer un pilote C / C ++ et un service C # (ou similaire) et faire en sorte que le pilote parle au code managé, si vous devez absolument écrire beaucoup de code en C #.

Autres conseils

Cela vous aidera en quelque sorte: Kit de pilotes Windows

Ce n'est pas une réponse directe à votre question, mais si cela vous intéresse, vous pouvez consulter le Projet Singularity .

  

Quelqu'un peut-il parler de la fiabilité et de la sécurité d'un programme C # plus proche de Ring 0 que ce ne serait normalement le cas?

C # s'exécute sur la machine virtuelle .NET, vous ne pouvez pas le rapprocher de Ring 0 plutôt que sur la machine virtuelle, et la machine virtuelle s'exécute dans l'espace utilisateur.

Si vous souhaitez vous essayer à un framework propriétaire, Le kit de ressources WinDriver de Jungo prend en charge le développement de pilotes en mode utilisateur (même en code managé) pour les périphériques USB, PCI et PCI-E.

Microsoft a un certain nombre de projets de recherche sur le système d’exploitation, c’est-à-dire tuer avec l’API Win32.

Voir l'article de Mary Jo Foley: Reconstruire un héritage

Écrire des pilotes de périphérique au format .net n’a aucun sens pour les versions actuelles de Windows.

< spéculation >
Selon certaines rumeurs, MS investit beaucoup d'argent pour amener la singularité à un niveau supérieur. Il suffit de chercher Midori . Mais c'est 2015+
< / spéculation >

Si je me souviens bien, le Dokan Project est un pilote de système de fichiers en mode utilisateur, qui permet également à du code .NET d'être exécuté par un pilote système: https://github.com/ dokan-dev / dokan-dotnet .

Ainsi, vous pourriez développer un pilote C # & "; pilote &"; (vraiment en mode utilisateur), qui est ensuite appelé / appelé par un pilote en mode noyau C ++. Le pilote du noyau pourrait simplement tout transmettre sans manipuler les données et agir comme un simple wrapper.
Inutile de dire que c’est très dangereux et que vous finiriez très probablement avec un BSOD (je l’ai essayé).

Légèrement lié:

Le Cosmos Project est un système d'exploitation à code source ouvert, développé en C # et exécuté
" pilotes (du noyau) " et des applications de niveau utilisateur écrites complètement en C # / F # / VB.NET /...

Bien qu'il s'agisse techniquement de pilotes au niveau du noyau, le système d'exploitation n'est plus Windows, mais le vôtre. Je suppose donc que ce n'est pas une réponse correcte ......

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top