EnumDependentServices函数枚举依赖于另一个指定服务的服务;也就是指定的服务必须在枚举服务运行之前运行。提供每个从属服务的名称和状态。
BOOL EnumDependentServices(
SC_HANDLE 【hService】, | //处理服务 |
DWORD 【dwServiceState】, | //枚举的服务状态 |
LPENUM_SERVICE_STATUS 【lpServices】, | //指向服务状态缓冲区的指针 |
DWORD 【cbBufSize】, | //服务状态缓冲区的大小 |
LPDWORD 【pcbBytesNeeded】, | //指向需要字节的变量的指针 |
LPDWORD 【lpServicesReturned】 | //指向返回的数字的变量的指针 |
); |
参数
【hService】
处理标识服务。该句柄由OpenService或CreateService函数返回,并且必须具有SERVICE_ENUMERATE_DEPENDENTS访问权限。
【dwServiceState】
根据运行状态指定要枚举的服务。它必须是以下值之一或两者:
值 | 含义 |
SERVICE_ACTIVE | 枚举以下状态的服务:SERVICE_START_PENDING,SERVICE_STOP_PENDING,SERVICE_RUNNING,SERVICE_CONTINUE_PENDING,SERVICE_PAUSE_PENDING和SERVICE_PAUSED。 |
SERVICE_INACTIVE | 枚举处于SERVICE_STOPPED状态的服务。 |
【lpServices】
指向ENUM_SERVICE_STATUS结构的数组。每个结构接收依赖服务的名称和服务状态信息。此阵列中的服务顺序与服务的启动顺序相反。换句话说,数组中的第一个依赖服务是最后一个服务,数组中的最后一个服务是首先启动的服务。
【cbBufSize】
指定【lpServices】参数指向的缓冲区的大小(以字节为单位)。
【pcbBytesNeeded】
指向一个变量的指针,该变量接收存储服务条目数组所需的字节数。如果【lpServices】指向的缓冲区太小,变量仅接收该值,由功能故障和ERROR_MORE_DATA错误指示;否则,* 【pcbBytesNeeded】的内容未定义。
【lpServicesReturned】
指向返回的服务条目数的变量的指针。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
错误
服务控制管理器可以设置以下错误代码。其他错误代码可以由服务控制管理器调用的注册表函数设置。
值 | 含义 | ||||
ERROR_ACCESS_DENIED | |||||
指定的句柄未被打开,并且已经被SERVICE_ENUMERATE_DEPENDENTS访问。 | |||||
ERROR_INVALID_HANDLE | |||||
指定的句柄无效。 | |||||
ERROR_INVALID_PARAMETER | |||||
指定的参数无效。 | |||||
ERROR_MORE_DATA | |||||
【lpServices】指向的缓冲区不够大。该函数将【lpServicesReturned】指向的变量设置为存储到缓冲区中的实际服务条目数。该函数将【pcbBytesNeeded】指向的变量设置为存储所有服务条目所需的字节数。 |
备注
返回的服务条目按照起始订单的相反顺序排列,并考虑组顺序。如果您需要停止依赖服务,您可以使用写入【lpServices】缓冲区的条目顺序以适当的顺序停止依赖服务。
也可以看看
CreateService, ENUM_SERVICE_STATUS, EnumServicesStatus, OpenService