Einzelnen Beitrag anzeigen

LeoDD

Registriert seit: 30. Jul 2003
43 Beiträge
 
Delphi 2010 Professional
 
#1

NT-Dienste, Fehler im Code...nur wo?

  Alt 30. Jul 2003, 18:14
Hallo

Ich sitz derzeit an nem kleinen Programm, was den Status und die Config für einen bestimmten Dienst ("Messenger") abfragen soll und auch ändern soll (später).

Während die Statusabfrage problemlos läuft, verzweifel ich an der Konfigurationsabfrage. Zunächst mal der Codeschnipsel:

Code:
procedure GetMessengerInfo(var ServiceStatus: TServiceStatus; var ServiceConfig: TQueryServiceConfig);
var
   SMH, MH: THandle;
   NeededBytes: dword;
   R: boolean;

begin
SMH:=OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if SMH = null then begin
   ShowMessage(SysErrorMessage(GetLastError));
   Application.Terminate;
end;

MH:=OpenService(SMH, PChar('Messenger'), SC_MANAGER_ALL_ACCESS);

if MH = null then begin
   ShowMessage(SysErrorMessage(GetLastError));
end;

if not QueryServiceStatus(MH, ServiceStatus) then begin
   ShowMessage(SysErrorMessage(GetLastError));
end;

NeededBytes:=0;

R:=QueryServiceConfig(MH, @ServiceConfig, sizeof(ServiceConfig), NeededBytes);

if not R then begin
   if GetLastError = ERROR_INSUFFICIENT_BUFFER then begin
      if not QueryServiceConfig(MH, @ServiceConfig, sizeof(ServiceConfig) + NeededBytes, NeededBytes) then begin
         ShowMessage(SysErrorMessage(GetLastError));
      end;
   end else begin
      ShowMessage(SysErrorMessage(GetLastError));
   end;
end;

CloseServiceHandle(MH);
CloseServiceHandle(SMH);
end;
Diese Funktion soll also den Status und die Config in die übergebenen Parameter ablegen. Dabei erscheint auch keine Fehlermeldung. Aber beim Beenden des Programms kommt eine "access violation".

Kann sich bitte einer von euch mal der Sache annehmen und mir einen Hinweis geben was ich falsch mache?

Gruß
Leo
Erst wenn man dreimal auf Holz klopfen will, stellt man fest, dass die Welt nur noch aus Plastik und Aluminium besteht.
  Mit Zitat antworten Zitat