Du musst auch Speicher anfordnern:
Delphi-Quellcode:
uses
WinSvc;
function ServiceGetDisplayname(sMachine, sService: string; var DisplayName: string): Boolean;
var
ret : Boolean;
SCManHandle : SC_Handle;
Buffer : PChar;
len : cardinal;
begin
ret := False;
len := 0;
SCManHandle := OpenSCManager(PChar(sMachine), nil, SC_MANAGER_CONNECT);
if (SCManHandle > 0) then
begin
GetServiceDisplayName(SCManHandle, PChar(sService), nil, len);
if GetLastError = ERROR_INSUFFICIENT_BUFFER then
begin
len := len + 1;
GetMem(Buffer, len);
ret := GetServiceDisplayName(SCManHandle, PChar(sService), Buffer, len);
DisplayName := string(Buffer);
FreeMem(Buffer);
end;
CloseServiceHandle(SCManHandle);
end;
Result := ret;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Displayname : string;
begin
if ServiceGetDisplayname('', 'NetLogon', Displayname) then
ShowMessage(Displayname)
else
ShowMessage(SysErrorMessage(GetLastError));
end;
Ich habe die Funktion auch gleich noch mal etwas umgeschrieben, damit eine einfachere Fehlerbehandlung möglich wird.