Frage

Bevor ich springen kopfüber in C # ...

Ich habe immer gefühlt, dass C, oder vielleicht C ++, das Beste für Treiber unter Windows zu entwickeln. Ich bin nicht scharf auf der Idee, einen Treiber auf einer .NET-Maschine zu entwickeln.

Aber .NET scheint der Weg zu sein, MS für die Anwendungsentwicklung vorangeht, und so bin ich jetzt fragen:

  • Menschen C # verwenden Treiber zu entwickeln?
  • Haben Sie eine Menge von API-Hooks zu tun haben, oder hat C # die Einrichtungen ohne viel hackery mit dem Kernel-Schnittstelle?
  • Kann mir jemand auf die Zuverlässigkeit sprechen und die Sicherheit eines C # Programm näher an Ring 0 ausgeführt wird, als dies normalerweise der Fall wäre?

Ich möchte meine Geräte in C # verwendbar sein, und wenn Fahrer Entwickler in C # reif ist, das ist offensichtlich der Weg zu gehen, aber ich will nicht viel Mühe verbringen, wenn es nicht empfohlen wird.

  • Was sind einige gute Ressourcen, um loszulegen, sagen wir, einen einfachen virtuellen seriellen Port-Treiber zu entwickeln?

-Adam

War es hilfreich?

Lösung

Sie können keine Kernel-Mode-Gerätetreiber in C # machen als die Laufzeit nicht sicher in ring0 geladen werden kann und arbeiten wie erwartet.

Darüber hinaus wird C # nicht Binärdateien für das Laden als Gerätetreiber geeignet schaffen, vor allem in Bezug auf Eintrittspunkte, die Fahrer aussetzen müssen. Die Abhängigkeit von der Laufzeit springen und analysieren und JIT die binäre beim Laden verbietet den direkten Zugriff des Treiber-Subsystem muss die binären laden.

Es ist im Gange Arbeit jedoch einige Gerätetreiber in den Benutzermodus zu heben, können Sie ein Interview finden Sie unter hier mit Peter Wieland der UDMF (User Mode Driver Framework) Team.

User-Modus-Treiber würde für verwaltete Arbeit viel besser geeignet sein, aber Sie werden ein bisschen googeln müssen, um herauszufinden, ob C # und .NET werden direkt unterstützt werden. Alles was ich weiß ist, dass die Kernel-Level-Treiber in nur C # nicht machbar sind.

Sie können jedoch wahrscheinlich einen C machen / C ++ Treiber und einen C # Service (oder ähnlich) und haben die Fahrer der Rede auf den verwalteten Code, wenn Sie unbedingt eine Menge Code in C # schreiben.

Andere Tipps

Dies wird Ihnen in einer Art und Weise helfen: Windows Driver Kit

Es ist keine direkte Antwort auf Ihre Frage, aber wenn Sie sich interessieren könnten Sie sehen Singularity Projekt .

  

Kann jemand sprechen für die Zuverlässigkeit und Sicherheit von einem C # Programm näher an Ring 0 ausgeführt wird, als dies normalerweise der Fall sein?

C # läuft in .NET Virtual Machine, können Sie es nicht näher bewegen 0 bis Ring als die VM ist, und die VM läuft im Userspace.

Wenn Sie bereit sind, gehen an einem proprietären Rahmen haben, Jungo Windriver-Toolkit unterstützt User-Mode-Treiber-Entwicklung (auch in verwaltetem Code) für USB, PCI und PCI-E-Geräte.

Microsoft hat eine Reihe von Forschungsprojekten im Bereich des mit einem verwalteten Code O, mit anderen Worten mit Win32-API zu töten.

Sehen Sie Mary Jo Foley Artikel: Neuaufbau eines Legacy-

Schreibgerätetreiber in .net macht keinen Sinn für aktuelle Versionen von Windows.


Gerüchte sind, dass MS eine Menge Geld auf die nächste Ebene zu bringen Singularity investiert. Suchen Sie einfach nach Midori . Aber das ist 2015+

Wenn ich es mir richtig erinnere, das Dokan Projekt ein Dateisystemtreiber Benutzermodus ist, der es ermöglicht auch .NET-Code durch einen Systemtreiber ausgeführt werden: https://github.com/ dokan-dev / dokan-dotnet .

So könnten Sie einen C # "Treiber" (User-Mode-Anwendung wirklich) entwickeln, die von einem C ++ Kernel-Mode-Treiber aufgerufen / aufgerufen wird, dann. Der Kernel-Treiber konnte einfach alles passiert zusammen, ohne dass die Daten und fungiert als eine einfache Hülle zu manipulieren.
Es erübrigt sich zu erwähnen, dass es sehr gefährlich ist, und Sie würden höchstwahrscheinlich mit einem BSOD Ende (ich es versucht).


Mild bezogen werden:

Das Cosmos Projekt ist ein Open-Source-Betriebssystem, das in C # entwickelt und läuft
"(Kernel) drivers" und Anwendungen auf Benutzerebene vollständig in C # / F # / VB.NET /...

Obwohl diese technisch Kernel-Level-Treiber, das Betriebssystem Windows nicht mehr, aber Ihre eigenen, also denke ich, dass dies nicht eine richtige Antwort ist ......

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top