Eigener Treiber Programmieren/Treiber ableiten

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von tcs-1986.

    Eigener Treiber Programmieren/Treiber ableiten

    Hey,
    ich weiß jetzt nicht ob ich im richtigen Sub Forum bin, wenn nicht ~> moven

    Also,
    Wenn ich ein neues Gerät in Windows anstöpsele, kommt ja der Installationsdialog wo man den Treiber auswählen muss,
    jetzt wollte ich fragen ob das mit VB auch möglich ist einen Treiber zu programmieren^^

    lg.

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    hallo renati,

    Da muss man zwischen den VB-Versionen differenzieren:
    Visual Basic 6 und kleiner: Nein!
    Visual Basic .NET ab 2002: NEIN!!!!!

    warum muss man zwischen den vb versionen unterscheiden - wenn am ende doch überall nein steht ?

    gruss

    mikeb69
    Weil VB6 wenigstens in nativen Code compiliert wird und VB.Net nur in die CL übersetzt wird gibts bei VB6 nur ein kleines nein.
    Außerdem gibt es in Basic nichtmal Pointer oder malloc Funktionen, man kann nicht mal Interrupts auslösen, inline Assembler verwenden, lesbaren Code schreiben und vor allen Dingen ist es nicht schnell genug.
    Und da alle modernen Betriebssysteme in C/C++ geschrieben sind, werden es die Treiber auch.
    Kannst ja mal mit Linux Kernel Modulen anfangen. Der Anfang ist nicht schwer, ein kleines Modul hat man schnell programmiert.
    freesoftwaremagazine.com/articles/drivers_linux

    beate schrieb:

    Weil VB6 wenigstens in nativen Code compiliert wird und VB.Net nur in die CL übersetzt wird gibts bei VB6 nur ein kleines nein.

    VB6 kann man ja in pCode kompilieren ...
    Und VB.Net (oder c#) läßt sich per NGen.exe ebenfalls gleich in nativen Code überführen.

    Aber es ist natürlich trotzdem richtig, dass sich die .Net Sprachen nicht zum Treiber schreiben eignen. .Net heißt Abstraktion in hohem Maße, während es bei einem Treiber genau auf's Gegenteil ankommt.

    BTW: Der erste der nen buffer-overflow exploit in einem .Net Programm findet, gewinnt ein Bier
    VB6 kann man ja in pCode kompilieren ...


    Und VB.Net (oder c#) läßt sich per NGen.exe ebenfalls gleich in nativen Code überführen.
    NGen.exe macht keine PE32 sondern steckt irgendwas für den lokalen Computer optimiertes in den WIN32 Ordner und pCode ist quasi exakt das selbe wie CL. Damit sind beide für Treiber ungeeignet.

    In C# ist es mit dem unsafe Mode möglich Pointer zu benutzen, also würde sich das wenigstens mehr für die Treiberentwicklung benutzen als VB. Da können dann auch sehr leicht buffer-overflows vorkommen (ist immer noch ein .Net Programm^^).
    Hi!

    Hab mich mit dem Thema noch überhaupt nicht auseinander gesetzt, aber eine Seite, wo du dir vielleicht ein paar Infos holen kannst, ist hier.

    Dass man mit .net keine Kernelspace driver schreiben kann liegt daran, dass der .net Interpreter im Userspace ausgeführt wird, und die .net-Programme somit auch. Das ganze würde zwar Userspace driver nicht ausschließen, dafür ist .net aber wohl (wegen den o.g. gründen) ebenfalls nicht sonderlich geeignet.
    Userspace driver sind unter Linux normale Programme bzw. Daemons ("Services"), die die Aufgabe vom Treiber als root ("Administrator") im Userspace durchführen. Falls das unter Windows auch so ist, wäre es mit .net (mit API-Calls) durchaus möglich. Hab mich, wie gesagt, mit dem Thema kaum auseinander gesetzt.
    Userspace Driver sind keine normalen Programme. Normale Programme dürfen/können nicht auf die Hardware zugreifen. die in/out Befehle werden nur ausgeführt wenn sich der aktuelle Code im Ring 0 befindet und Userspace ist Ring 3. Außerdem sind alle Treiber gegen den Kernel gelinkt, der im gegensatz zu den standard Librarys ein ganz anderes Interface hat.
    Userspace Driver sind auch gegen den Kernel gelinkt und können daher nicht die Standard C Funktionen benutzen sondern logischerweise auch die Kernel Funktionen. Der einzige Unterschied ist halt, das bei dem Aufruf der Kernel in/out Befehlen bei denen in Ring 0 gewechselt wird.