EnumServicesStatusExA 函数 (winsvc.h)
枚举指定服务控制管理器数据库中的服务。 提供了每个服务的名称和状态,以及基于指定信息级别的其他数据。
语法
BOOL EnumServicesStatusExA(
[in] SC_HANDLE hSCManager,
[in] SC_ENUM_TYPE InfoLevel,
[in] DWORD dwServiceType,
[in] DWORD dwServiceState,
[out, optional] LPBYTE lpServices,
[in] DWORD cbBufSize,
[out] LPDWORD pcbBytesNeeded,
[out] LPDWORD lpServicesReturned,
[in, out, optional] LPDWORD lpResumeHandle,
[in, optional] LPCSTR pszGroupName
);
参数
[in] hSCManager
服务控制管理器数据库的句柄。 此句柄由 OpenSCManager 函数返回,并且必须具有 SC_MANAGER_ENUMERATE_SERVICE 访问权限。 有关详细信息,请参阅 服务安全和访问权限。
[in] InfoLevel
要返回的服务属性。 使用 SC_ENUM_PROCESS_INFO 检索数据库中每个服务的名称和服务状态信息。 lpServices 参数是指向接收 ENUM_SERVICE_STATUS_PROCESS 结构的数组的缓冲区的指针。 缓冲区必须足够大,才能容纳其成员指向的结构和字符串。
目前,未定义其他信息级别。
[in] dwServiceType
要枚举的服务的类型。 此参数可以是以下一个或多个值。
价值 | 意义 |
---|---|
|
SERVICE_KERNEL_DRIVER 和 SERVICE_FILE_SYSTEM_DRIVER类型的服务。 |
|
文件系统驱动程序服务。 |
|
驱动程序服务。 |
|
SERVICE_WIN32_OWN_PROCESS 和 SERVICE_WIN32_SHARE_PROCESS类型的服务。 |
|
在其自己的进程中运行的服务。 |
|
与一个或多个其他服务共享进程的服务。 有关详细信息,请参阅 服务程序。 |
[in] dwServiceState
要枚举的服务的状态。 此参数可以是下列值之一。
[out, optional] lpServices
指向接收状态信息的缓冲区的指针。 此数据的格式取决于 InfoLevel 参数的值。
此数组的最大大小为 256K 字节。 若要确定所需的大小,请为此参数指定 NULL,并为 cbBufSize 参数指定 0。 该函数将失败,GetLastError 将返回 ERROR_MORE_DATA。 参数将接收所需的大小。
Windows Server 2003 和 Windows XP:此数组的最大大小为 64K 字节。 从 SP1 和 SP2 的 Windows XP 增加到 Windows Server 2003 时,此限制已增加。
[in] cbBufSize
lpServices 参数指向的缓冲区的大小(以字节为单位)。
[out] pcbBytesNeeded
指向一个变量的指针,如果缓冲区太小,则接收返回剩余服务条目所需的字节数。
[out] lpServicesReturned
指向接收返回的服务条目数的变量的指针。
[in, out, optional] lpResumeHandle
指向一个变量的指针,该变量在输入中指定枚举的起点。 首次调用 EnumServicesStatusEx 函数时,必须将此值设置为零。 在输出中,如果函数成功,则此值为零。 但是,如果函数返回零,并且 GetLastError 函数返回 ERROR_MORE_DATA,则此值指示调用 EnumServicesStatusEx 函数以检索其他数据时要读取的下一个服务条目。
[in, optional] pszGroupName
加载顺序组名称。 如果此参数是字符串,则枚举的唯一服务是属于具有字符串指定名称的组的服务。 如果此参数为空字符串,则仅枚举不属于任何组的服务。 如果此参数 NULL,则忽略组成员身份并枚举所有服务。
返回值
如果函数成功,则返回值为非零。
如果函数失败,则返回值为零。 若要获取扩展的错误信息,请调用 GetLastError。 可能会返回以下错误。
返回代码 | 描述 |
---|---|
|
句柄没有 SC_MANAGER_ENUMERATE_SERVICE 访问权限。 |
|
缓冲区太小。 不能返回活动数据库中的所有数据。 |
|
使用了非法参数值。 |
|
句柄无效。 |
|
InfoLevel 参数包含不受支持的值。 |
|
系统正在关闭;无法调用此函数。 |
言论
如果调用方对服务没有 SERVICE_QUERY_STATUS 访问权限,则会从返回到客户端的服务列表中以无提示方式省略该服务。
注意
winsvc.h 标头将 EnumServicesStatusEx 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP [仅限桌面应用] |
支持的最低服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | 窗户 |
标头 | winsvc.h (包括 Windows.h) |
库 | Advapi32.lib |
DLL | Advapi32.dll |