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.