enumDependentServicesA 函数 (winsvc.h)

检索依赖于指定服务的每个服务的名称和状态;也就是说,在依赖服务可以运行之前,必须运行指定的服务。

语法

BOOL EnumDependentServicesA(
  [in]            SC_HANDLE              hService,
  [in]            DWORD                  dwServiceState,
  [out, optional] LPENUM_SERVICE_STATUSA lpServices,
  [in]            DWORD                  cbBufSize,
  [out]           LPDWORD                pcbBytesNeeded,
  [out]           LPDWORD                lpServicesReturned
);

参数

[in] hService

服务的句柄。 此句柄由 OpenServiceCreateService 函数返回,并且必须具有 SERVICE_ENUMERATE_DEPENDENTS 访问权限。 有关详细信息,请参阅 服务安全性和访问权限

[in] dwServiceState

要枚举的服务的状态。 此参数的取值可为下列值之一:

含义
SERVICE_ACTIVE
0x00000001
枚举处于以下状态的服务:SERVICE_START_PENDINGSERVICE_STOP_PENDING、SERVICE_RUNNINGSERVICE_CONTINUE_PENDINGSERVICE_PAUSE_PENDINGSERVICE_PAUSED
SERVICE_INACTIVE
0x00000002
枚举 处于SERVICE_STOPPED 状态的服务。
SERVICE_STATE_ALL
0x00000003
组合以下状态: SERVICE_ACTIVESERVICE_INACTIVE

[out, optional] lpServices

指向 ENUM_SERVICE_STATUS 结构的数组的指针,该数组接收数据库中每个依赖服务的名称和服务状态信息。 缓冲区必须足够大,才能容纳结构,以及其成员指向的字符串。

此数组中的服务顺序是服务的启动顺序的反向顺序。 换句话说,数组中的第一个服务是上次启动的服务,数组中的最后一个服务是首先启动的服务。

此数组的最大大小为 64,000 字节。 若要确定所需的大小,请为此参数指定 NULL ,并为 cbBufSize 参数指定 0。 该函数将失败, GetLastError 将返回 ERROR_MORE_DATAtbBytesNeeded 参数将接收所需的大小。

[in] cbBufSize

lpServices 参数指向的缓冲区的大小(以字节为单位)。

[out] pcbBytesNeeded

指向接收存储服务条目数组所需的字节数的变量的指针。 如果 lpServices 指向的缓冲区太小(由函数失败和 ERROR_MORE_DATA 错误指示)则变量仅接收此值;否则, 未定义tbBytesNeeded 的内容

[out] lpServicesReturned

指向接收返回的服务条目数的变量的指针。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

服务控制管理器可以设置以下错误代码。 其他错误代码可由服务控制管理器调用的注册表函数设置。

返回代码 说明
ERROR_ACCESS_DENIED
句柄没有 SERVICE_ENUMERATE_DEPENDENTS 访问权限。
ERROR_INVALID_HANDLE
指定的句柄无效。
ERROR_INVALID_PARAMETER
指定的参数无效。
ERROR_MORE_DATA
lpServices 指向的缓冲区不够大。 该函数将 lpServicesReturn 指向 的变量设置为存储到缓冲区中的实际服务条目数。 该函数将 由tbBytesNeeded 指向 的变量设置为存储所有服务条目所需的字节数。

注解

返回的服务条目按开始顺序的反向顺序排序,并考虑组顺序。 如果需要停止依赖服务,可以使用写入 到 lpServices 缓冲区的条目顺序来按正确的顺序停止依赖服务。

示例

有关示例,请参阅 “停止服务”。

注意

winsvc.h 标头将 EnumDependentServices 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非中性编码别名与非编码中性代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅 函数原型的约定

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 winsvc.h (包括 Windows.h)
Library Advapi32.lib
DLL Advapi32.dll

请参阅

CreateService

ENUM_SERVICE_STATUS

EnumServicesStatusEx

OpenService

服务函数

服务安装、删除和枚举