您的位置:首页 > 其它

枚举系统当前已安装的NTService

2005-10-28 14:16 363 查看
枚举系统当前已安装的NTService
  本文介绍了如何获取系统已安装的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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐