Einzelnen Beitrag anzeigen

Neotracer64

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

Re: Treiber installieren, starten, stoppen, deinstallieren

  Alt 18. Sep 2005, 17: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 ?
  Mit Zitat antworten Zitat