Muchas gracias por tu tiempo. Pongo en este mensaje el código de mi función y explico donde falla y que error me dá.
Código Delphi
[-]
function ObtenerInfoServicios(Equipo : string; Tipos : TServiceTypes;
IncluirInactivos : boolean; Lista : TObjectList):boolean;
var
hSCManager : SC_HANDLE;
dwServiceType, dwServiceState: DWORD;
pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD;
Buffer : PArrayTEnumServiceStatus;
i : integer;
InfS : TInfoServicio;
begin
Lista.Clear;
Result := False;
hSCManager := OpenSCManager(PChar(Equipo), nil, SC_MANAGER_ENUMERATE_SERVICE);
if (hSCManager=0) then begin
ChequeaError();
Exit;
end;
lpResumeHandle := 0;
New(Buffer);
try
dwServiceType:=SERVICE_WIN32;
dwServiceState:=SERVICE_STATE_ALL;
Result:=EnumServicesStatus( hSCManager, dwServiceType, dwServiceState, Buffer^[0],
SizeOf(Buffer^), pcbBytesNeeded, lpServicesReturned, lpResumeHandle );
for i := 0 to lpServicesReturned-1 do begin
InfS:=TInfoServicio.Create;
InfS.ServiceName:=Buffer^.lpServiceName;
InfS.DisplayName:=Buffer^[i].lpDisplayName;
InfS.ServiceStatus:=Buffer^[i].ServiceStatus;
Lista.Add(InfS);
end;
finally
Result := true;
Dispose(Buffer);
CloseServiceHandle(hSCManager);
end;
end;
[i]
Falla en el llamado a
EnumServicesStatus. El Código de error que dá es el
1783 y el mensaje de dicho error es
El fragmento ha recibido datos incorrectos
Lo curioso es que en el resto de los S.O. no falla y funciona correctamente.
No sé si me puedes ayudar con esta información. Un Saludo Aldo