Registriert seit: 27. Okt 2004
292 Beiträge
Delphi 7 Professional
|
Re: Treiber installieren, starten, stoppen, deinstallieren
18. Sep 2005, 23:08
Autsch. Sorry, jetz hab ich nicht genau hingeguckt.
Ich habe deswegen jetzt selber noch etwas genauer hingeschaut und ein paar Sachen verbessert.
Es klappt jetz
ich weiss es nicht ob es überhaupt nochmal nützlich für jemanden sein könnte. Vlt wäre ein Post in der CodeLibrary nicht verkehrt ?
Naja wens interessiert hier:
Delphi-Quellcode:
function load_sysfile(DriverPath: String):boolean;
var
sh, rh : SC_HANDLE;
aPath,dummy,DriverName : PChar;
PreviousState : Boolean;
begin
If not EnablePrivilege('SeLoadDriverPrivilege',False,PreviousState) = ERROR_SUCCESS Then
begin
MessageBox(0,'Fehler beim akquirieren des SeLoadDriverPrivileges!','Error Handling',MB_ICONERROR);
result := false;
Exit;
end;
dummy := '';
sh := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if (sh = 0) then
begin
MessageBox(0,Pchar('OpenSCManager : '+SyserrorMessage(GetLastError)),'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 (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 (rh=0) Then
begin
MessageBox(0,Pchar('Vorhandener Service kann nicht geöffnet werden! : ' + SysErrorMessage(GetLastError)),'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 not (rh=0) Then
begin
if not 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,Pchar('Service lässt sich nicht starten: ' + SysErrorMessage(GetLastError)),'Error Handling',MB_ICONERROR);
CloseServiceHandle(rh);
CloseServiceHandle(sh);
result := false;
Exit;
end;
end;
result := True;
end;
|