本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:
http://blog.csdn.net/zuishikonghuan/article/details/47808805
在上一篇博文“[Win32] SCManager 服务控制管理器API(1)”中(地址:
http://blog.csdn.net/zuishikonghuan/article/details/47803033),讲到了打开服务控制管理器、创建服务、打开服务、删除服务、获取服务状态、启动服务、发送控制码,这一篇继续。
9。EnumServicesStatus 枚举服务
BOOL WINAPI EnumServicesStatus(
_In_ SC_HANDLE hSCManager,
_In_ DWORD dwServiceType,
_In_ DWORD dwServiceState,
_Out_opt_ LPENUM_SERVICE_STATUS lpServices,
_In_ DWORD cbBufSize,
_Out_ LPDWORD pcbBytesNeeded,
_Out_ LPDWORD lpServicesReturned,
_Inout_opt_ LPDWORD lpResumeHandle
);
hSCManager:服务控制管理器句柄。此句柄是OpenSCManager函数返回的,并且必须具有 SC_MANAGER_ENUMERATE_SERVICE 访问权限。
dwServiceType:要枚举的服务类型。
SERVICE_DRIVER:SERVICE_KERNEL_DRIVER 和 SERVICE_FILE_SYSTEM_DRIVER。
SERVICE_FILE_SYSTEM_DRIVER:文件系统驱动程序服务。
SERVICE_KERNEL_DRIVER:驱动程序服务。
SERVICE_WIN32:SERVICE_WIN32_OWN_PROCESS 和 SERVICE_WIN32_SHARE_PROCESS。
SERVICE_WIN32_OWN_PROCESS:在他们自己的进程中运行的服务。
SERVICE_WIN32_SHARE_PROCESS:与一个或多个其他服务共享一个进程的服务。
一般为SERVICE_WIN32
dwServiceState:服务要枚举的状态。此参数可以是下列值之一:
SERVICE_ACTIVE:枚举是处于以下状态的服务: SERVICE_START_PENDING、 SERVICE_STOP_PENDING、 SERVICE_RUNNING、SERVICE_CONTINUE_PENDING、 SERVICE_PAUSE_PENDING 和 SERVICE_PAUSED。
SERVICE_INACTIVE:枚举服务处于 SERVICE_STOPPED 状态。
SERVICE_STATE_ALL:SERVICE_ACTIVE 和 SERVICE_INACTIVE。
lpServices:指向包含数组的 ENUM_SERVICE_STATUS 结构,它接收名称服务数据库中的每个服务的状态信息的缓冲区的指针。缓冲区必须足够大以容纳结构,再加上他们的成员所指向的字符串。此数组的最大大小为 256 K 字节。若要确定所需的大小,请为此参数与 cbBufSize 参数置 0。该函数将失败,时出错将返回 ERROR_INSUFFICIENT_BUFFER。PcbBytesNeeded 参数将收到所需的大小。
ENUM_SERVICE_STATUS 结构:
typedef struct _ENUM_SERVICE_STATUS { LPTSTR lpServiceName; LPTSTR lpDisplayName; SERVICE_STATUS ServiceStatus; } ENUM_SERVICE_STATUS, *LPENUM_SERVICE_STATUS;
lpServiceName:服务名称
lpDisplayName:显示名称
ServiceStatus:服务状态
SERVICE_STATUS结构见 上一篇 和