AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Treiber installieren, starten, stoppen, deinstallieren
Thema durchsuchen
Ansicht
Themen-Optionen

Treiber installieren, starten, stoppen, deinstallieren

Ein Thema von Neotracer64 · begonnen am 17. Sep 2005 · letzter Beitrag vom 18. Sep 2005
Antwort Antwort
Seite 1 von 3  1 23      
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#1

Treiber installieren, starten, stoppen, deinstallieren

  Alt 17. Sep 2005, 19:47
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

  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: Treiber installieren, starten, stoppen, deinstallieren

  Alt 17. Sep 2005, 19:52
Zitat von Neotracer64:
(geschrieben in C++ und kompiliert mit dem DDK)
Respekt. Manche würden dich dafür steinigen, wenn du dank überladenem new und delete den Speicher verschwendest

Guck mal in mein Service Tut: http://assarbad.net/en/stuff/tutorials/ntsvc/

Dienste und Treiber werden auf die gleiche Art und Weise installiert, gestartet und gestoppt usw.
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#3

Re: Treiber installieren, starten, stoppen, deinstallieren

  Alt 17. Sep 2005, 19:58
Zitat:
Respekt. Manche würden dich dafür steinigen, wenn du dank überladenem new und delete den Speicher verschwendest
Hmm versteh ich nicht ganz. Kann es sein, dass ich mich etwas falsch ausgedrückt hab ? Von Treiberprogrammierung versteh ich noch nicht viel, deswegen hatte ich auch kompetente Hilfe, die im Moment nicht erreichbar ist. Gut, dass die DP so schnell ist

Danke für das TUT, Olli
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

Re: Treiber installieren, starten, stoppen, deinstallieren

  Alt 17. Sep 2005, 20:04
Zitat von Neotracer64:
Hmm versteh ich nicht ganz. Kann es sein, dass ich mich etwas falsch ausgedrückt hab ?
Nee, es ging darum, daß du sagtest, dein Treiber sei mit C++ programmiert. Suche mal mit Google nach dem Streitthema ob C++ oder C verwendet werden soll ... dann weißt du was ich meine. Ist aber auch nicht trivial mit C++ einen Treiber zu programmieren.
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

Registriert seit: 4. Jun 2004
Ort: Nordhausen
2.214 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Treiber installieren, starten, stoppen, deinstallieren

  Alt 17. Sep 2005, 20:08
[quote="Olli"]
Zitat von Neotracer64:
Ist aber auch nicht trivial mit C++ einen Treiber zu programmieren.
Dafür gibts extra DriverProgrammingKits, mitdenen man Treiber auch mit C++ schreiben kann.
André
"A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann

Zitat von Luckie:
Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#6

Re: Treiber installieren, starten, stoppen, deinstallieren

  Alt 17. Sep 2005, 20:11
Zitat von MagicAndre1981:
Zitat von Olli:
Ist aber auch nicht trivial mit C++ einen Treiber zu programmieren.
Dafür gibts extra DriverProgrammingKits, mitdenen man Treiber auch mit C++ schreiben kann.
Nee, ehrlich? Wenn du dir sowas leisten kannst, Glückwunsch. Ich steige erst in die Riege der Großverdiener auf
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#7

Re: Treiber installieren, starten, stoppen, deinstallieren

  Alt 17. Sep 2005, 20:36
Schau mal hier:
http://www.nirsoft.net/utils/serviwin.html

Es sollte sich also über die allbekannte und von vielen gehasste Registry realisieren lassen.
(ot: hasse sie nicht, finde sie sehr sinnvoll)
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#8

Re: Treiber installieren, starten, stoppen, deinstallieren

  Alt 17. Sep 2005, 20:39
Zitat von bigg:
Es sollte sich also über die allbekannte und von vielen gehasste Registry realisieren lassen.
Über die SCM-APIs greifst du implizit auf die Registry zu. Allerdings wirst du ohne Beteiligung des SCM nicht einen Eintrag in die Registry machen und dann ohne Neustart deinen Treiber/Dienst starten können. Daher ist eben der SCM immer der Weg, den man gehen sollte. Auch wenn man es über ein Registry-Script (.REG) oder sonstwas lösen könnte!
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#9

Re: Treiber installieren, starten, stoppen, deinstallieren

  Alt 17. Sep 2005, 23:22
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:
//----------------------------------------------------------------
// load a sys file as a driver using undocumented method
//----------------------------------------------------------------
bool load_sysfile()
{
SYSTEM_LOAD_AND_CALL_IMAGE GregsImage;

WCHAR daPath[] = L"\\??\\C:\\HELLOWORLD.SYS";

//////////////////////////////////////////////////////////////
// get DLL entry points
//////////////////////////////////////////////////////////////
if( !(RtlInitUnicodeString = (RTLINITUNICODESTRING)
GetProcAddress( GetModuleHandle("ntdll.dll")
,"RtlInitUnicodeString"
)))
{
return false;
}

if(!(ZwSetSystemInformation = (ZWSETSYSTEMINFORMATION)
GetProcAddress(
GetModuleHandle("ntdll.dll")
,"ZwSetSystemInformation" )))
{
return false;
}

RtlInitUnicodeString(
&(GregsImage.ModuleName)
,daPath
);

if(
!NT_SUCCESS(
ZwSetSystemInformation(
SystemLoadAndCallImage
,&GregsImage
,sizeof(SYSTEM_LOAD_AND_CALL_IMAGE))))
{
return false;
}

return true;
}
Delphi-Quellcode:
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;
Es kommt leider immer false raus
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#10

Re: Treiber installieren, starten, stoppen, deinstallieren

  Alt 17. Sep 2005, 23:43
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!)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz