查看完整版本: 取得系统已安装的NTService

猪猪 2007-3-6 23:29

取得系统已安装的NTService

信息来源:邪恶八进制
  
这东西好像不错................................

相關Api: EnumServicesStatus

The EnumServicesStatus function enumerates services in the specified service control manager database. The name and status of each service are provided.

This function has been superseded by the EnumServicesStatusEx function. It returns the same information EnumServicesStatus returns, plus the process identifier and additional information for the service. In addition, EnumServicesStatusEx enables you to enumerate services that belong to a specified group.


BOOL EnumServicesStatus(
SC_HANDLE hSCManager,
DWORD dwServiceType,
DWORD dwServiceState,
LPENUM_SERVICE_STATUS lpServices,
DWORD cbBufSize,
LPDWORD pcbBytesNeeded,
LPDWORD lpServicesReturned,
LPDWORD lpResumeHandle
);

sample:

function ServiceGetList(sMachine: string; dwServiceType,
dwServiceState: DWord; slServicesList: TStrings): boolean;
var
j: integer;
schm: SC_Handle;
nBytesNeeded, nServices, nResumeHandle: DWord;
ServiceStatusRecs: array[0..511] of TEnumServiceStatus;
begin
Result := false;
schm := OpenSCManager(PChar(sMachine), nil, SC_MANAGER_ALL_ACCESS);
try
  if (schm = 0) then Exit;
  nResumeHandle := 0;
  while True do
  begin
    EnumServicesStatus(schm, dwServiceType, dwServiceState, @ServiceStatusRecs[0], sizeof(ServiceStatusRecs),
    @nBytesNeeded, @nServices, @nResumeHandle);
    for j := 0 to nServices - 1 do
    begin
    slServicesList.Add(ServiceStatusRecs[j].lpDisplayName + '---' + ServiceStatusRecs[j].lpServiceName);
    end;
    if nBytesNeeded = 0 then Break;
  end;
  Result := true;
finally
  if schm > 0 then
    CloseServiceHandle(schm);
end;
end;

procedure TForm1.btnServiceGetListClick(Sender: TObject);
begin
ServiceGetList('', SERVICE_WIN32, SERVICE_STATE_ALL, lbServices.Items);
end;
页: [1]
查看完整版本: 取得系统已安装的NTService