Registriert seit: 27. Okt 2004
292 Beiträge
Delphi 7 Professional
|
Re: Treiber installieren, starten, stoppen, deinstallieren
18. Sep 2005, 18:05
Da ich Schuldgefühle habe, dass ich eine "fiese" Methode benutzen wollte habe ich es auf normale Art und Weise versucht.
Dabei habe ich wieder Greg Hoglunds C-Code übersetzt.
Aber Guess What. Er funktioniert noch nicht so ganz ;(
Er scheitert schon beim öffnen des SC_Managers. (Ja ich hab Admin-Rechte).
Delphi-Quellcode:
uses ...,WinSvc;
...
function load_sysfile(DriverPath: String):boolean;
var
sh, rh : SC_HANDLE;
aPath,dummy,DriverName : PChar;
begin
dummy := '';
sh := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if not sh > 0 Then
begin
MessageBox(0,'Fehler beim öffnen des SC_MANAGERS! ','Error Handling',MB_ICONERROR);
result := false;
Exit;
end;
aPath := Pchar(DriverPath);
DriverName := Pchar(ExtractFileName(DriverPath));
rh :=CreateService(sh,
DriverName,
DriverName,
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
aPath,
nil,
nil,
nil,
nil,
nil);
if not rh > 0 Then
begin
if GetLastError = ERROR_SERVICE_EXISTS Then
begin
MessageBox(0,'Service existiert schon!','Error Handling',MB_ICONERROR);
rh := OpenService(sh, Pchar(DriverName),SERVICE_ALL_ACCESS);
if not rh > 0 Then
begin
MessageBox(0,'Vorhandener Service kann nicht geöffnet werden!','Error Handling',MB_ICONERROR);
CloseServiceHandle(sh);
result := false;
Exit;
end;
end else
begin
MessageBox(0,'Fehler beim erstellen des Services!','Error Handling',MB_ICONERROR);
CloseServiceHandle(sh);
result := false;
Exit;
end;
end;
if rh > 0 Then
begin
if StartService(rh,0,dummy) Then
begin
if GetLastError = ERROR_SERVICE_ALREADY_RUNNING Then
begin
MessageBox(0,'Service läuft schon!','Error Handling',MB_ICONINFORMATION);
result := True;
end else
begin
MessageBox(0,'Service lässt sich nicht starten!','Error Handling',MB_ICONERROR);
CloseServiceHandle(rh);
CloseServiceHandle(sh);
result := false;
Exit;
end;
end;
result := True;
end;
Habt ihr eine Idee ?
|