![]() |
Treiber installieren, starten, stoppen, deinstallieren
Zuerst einmal: Ich weiss, dass man keine Treiber mit Delphi programmieren kann.
Darum geht es auch NICHT. Ich habe schon einen Treiber in Form einer sys-Datei. (geschrieben in C++ und kompiliert mit dem DDK) Diese möchte ich mit Delphi installieren, starten, stoppen und deinstallieren können. Komischerweise habe ich dazu nichts gefunden hier im Forum. Aber es müsste doch eigentlich möglich sein oder ? Funktioniert das so ähnlich wie bei Diensten ? Ach ja: Damit das hier nicht in die Falsche Richtung läuft. Ich möchte keinerlei Alternativen sehen. Ich möchte nur wissen ob es in Delphi geht und wenn ja wie. Ich bin also in der Lage ein klares Nein zu akzeptieren. (Natürlich nur wenn es wahrheitsgemäss ist) Danke schonmal :) :dp: |
Re: Treiber installieren, starten, stoppen, deinstallieren
Zitat:
Guck mal in mein Service Tut: ![]() Dienste und Treiber werden auf die gleiche Art und Weise installiert, gestartet und gestoppt usw. |
Re: Treiber installieren, starten, stoppen, deinstallieren
Zitat:
Danke für das TUT, Olli :cyclops: |
Re: Treiber installieren, starten, stoppen, deinstallieren
Zitat:
|
Re: Treiber installieren, starten, stoppen, deinstallieren
[quote="Olli"]
Zitat:
|
Re: Treiber installieren, starten, stoppen, deinstallieren
Zitat:
|
Re: Treiber installieren, starten, stoppen, deinstallieren
Schau mal hier:
![]() Es sollte sich also über die allbekannte und von vielen gehasste Registry realisieren lassen. (ot: hasse sie nicht, finde sie sehr sinnvoll) |
Re: Treiber installieren, starten, stoppen, deinstallieren
Zitat:
|
Re: Treiber installieren, starten, stoppen, deinstallieren
Ich habe noch eine Quick&Dirty Variante gefunden. Leider lässt sich der Treiber ohne Neustart nicht mehr entladen.
Und geklappt hat es auch noch nicht, da ich wahrscheinlich zu blöd bin C++ in Delphi zu übersetzen. Ich habs trotzdem ma versucht: Original C-Code: Zitat:
Delphi-Quellcode:
Es kommt leider immer false raus :(
uses ...JwaNative, JwaNTStatus;
... function load_sysfile: boolean; var GregsImage: SYSTEM_LOAD_AND_CALL_IMAGE; daPath: PWideChar; begin daPath := 'HelloWorld.sys'; RtlInitUnicodeString(@GregsImage.ModuleName,daPath); if ZwSetSystemInformation(SystemLoadAndCallImage,@GregsImage,sizeof(SYSTEM_LOAD_AND_CALL_IMAGE))= STATUS_SUCCESS Then result := True Else result := false; end; |
Re: Treiber installieren, starten, stoppen, deinstallieren
Wozu das gut sein soll, wirst du wohl selber wissen, denn es existiert ja "nur" eine dokumentierte Methode. Da ist es mehr als logisch zur undokumentierten zu greifen *kopfschüttel*
Die Native API zeigt Fehler an, indem der Wert negativ ist. Nur weil der Rückgabewert ungleich STATUS_SUCCESS sagt das nicht, daß es einen Fehler gab. Wir haben in JwaNative.pas ja durchaus auch die Makros als Funktionen drin, wenn ich mich recht entsinne. Ansonsten checkst du eben selber auf ">= STATUS_SUCCESS". Aber mal ehrlich, wozu fragst du eigentlich, wenn du dann doch eine andere (und zumal unzuverlässige) Methode benutzt? EDIT: Ach ja, ob ein Treiber entladen werden kann, hängt a.) vom Typ des Treibers und b.) von seiner Konzeption ab. Also selbst wenn der Treibertyp es erlaubt entladen zu werden, muß es der Treiber noch nicht erlauben. Der Code enthält übrigens keinerlei C++-Features, sondern nur C. Außerdem ist Greg Hoglund eine Koryphäe auf dem Gebiet und weiß was er mit undokumentierten Aufrufen erreichen kann (und will) und was nicht. Genau das fehlt dir (offensichtlich!) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz