EnumServicesStatus函数枚举指定的服务控制管理器数据库中的服务。提供每个服务的名称和状态。
BOOL EnumServicesStatus(
SC_HANDLE 【hSCManager】, | //处理服务控制管理器数据库 |
DWORD 【dwServiceType】, | //枚举类型的服务 |
DWORD 【dwServiceState】, | //枚举的服务状态 |
LPENUM_SERVICE_STATUS 【lpServices】, | //指向服务状态缓冲区的指针 |
DWORD 【cbBufSize】, | //服务状态缓冲区的大小 |
LPDWORD 【pcbBytesNeeded】, | //指向需要字节的变量的指针 |
LPDWORD 【lpServicesReturned】, | //指向返回的数字的变量的指针 |
LPDWORD 【lpResumeHandle】 | //指向下一个条目的变量的指针 |
); |
参数
【hSCManager】
标识服务控制管理器数据库。OpenSCManager函数返回此句柄,该句柄必须具有SC_MANAGER_ENUMERATE_SERVICE访问权限。
【dwServiceType】
指定要枚举的服务类型。它必须是以下值之一或两者:
值 | 含义 |
SERVICE_WIN32 | 枚举SERVICE_WIN32_OWN_PROCESS和SERVICE_WIN32_SHARE_PROCESS类型的服务。 |
SERVICE_DRIVER | 列举SERVICE_KERNEL_DRIVER和SERVICE_FILE_SYSTEM_DRIVER类型的服务。 |
【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】
指向一个变量,它接收返回剩余服务条目所需的字节数。
【lpServicesReturned】
指向接收返回的服务条目数的变量。
【lpResumeHandle】
指向一个32位变量,在输入时,指定枚举的起始点。第一次调用此函数时,变量的值设置为零。在输出中,如果函数成功,变量的值为零。如果函数返回FALSE,并且GetLastError函数返回ERROR_MORE_DATA,则当再次调用函数以检索附加数据时,该变量的值用于指示下一个未读服务条目。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
错误
服务控制管理器可以设置以下错误代码。其他错误代码可以由服务控制管理器调用的注册表函数设置。
值 | 含义 | ||||
ERROR_ACCESS_DENIED | |||||
没有使用SC_MANAGER_ENUMERATE_SERVICE访问来打开指定的句柄。 | |||||
ERROR_INVALID_HANDLE | |||||
指定的句柄无效。 | |||||
ERROR_INVALID_PARAMETER | |||||
指定的参数无效。 | |||||
ERROR_MORE_DATA | |||||
有更多的服务条目比适合【lpServices】缓冲区。在【lpServicesReturned】参数中返回写入【lpServices】的实际服务条目数。在【pcbBytesNeeded】参数中返回获取剩余条目所需的字节数。剩余的服务可以通过额外的EnumServicesStatus呼叫进行枚举,【lpResumeHandle】参数指示下一个要读取的服务。 |
也可以看看