EnumServicesStatusW 函数 (winsvc.h)

枚举指定的服务控制管理器数据库中的服务。 提供每个服务的名称和状态。

此函数已被 EnumServicesStatusEx 函数取代。 它返回 EnumServicesStatus 返回的相同信息,以及服务的进程标识符和其他信息。 此外, 使用 EnumServicesStatusEx 可以枚举属于指定组的服务。

语法

BOOL EnumServicesStatusW(
  [in]                SC_HANDLE              hSCManager,
  [in]                DWORD                  dwServiceType,
  [in]                DWORD                  dwServiceState,
  [out, optional]     LPENUM_SERVICE_STATUSW lpServices,
  [in]                DWORD                  cbBufSize,
  [out]               LPDWORD                pcbBytesNeeded,
  [out]               LPDWORD                lpServicesReturned,
  [in, out, optional] LPDWORD                lpResumeHandle
);

参数

[in] hSCManager

服务控制管理器数据库的句柄。 此句柄由 OpenSCManager 函数返回,并且必须具有SC_MANAGER_ENUMERATE_SERVICE访问权限。 有关详细信息,请参阅 服务安全性和访问权限

[in] dwServiceType

要枚举的服务的类型。 此参数可使用以下一个或多个值。

含义
SERVICE_DRIVER
0x0000000B
SERVICE_KERNEL_DRIVER 和 SERVICE_FILE_SYSTEM_DRIVER 类型的服务。
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
文件系统驱动程序服务。
SERVICE_KERNEL_DRIVER
0x00000001
驱动程序服务。
SERVICE_WIN32
0x00000030
SERVICE_WIN32_OWN_PROCESS 和 SERVICE_WIN32_SHARE_PROCESS 类型的服务。
SERVICE_WIN32_OWN_PROCESS
0x00000010
在其自己的进程中运行的服务。
SERVICE_WIN32_SHARE_PROCESS
0x00000020
与一个或多个其他服务共享进程的服务。 有关详细信息,请参阅 服务程序

[in] dwServiceState

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

含义
SERVICE_ACTIVE
0x00000001
枚举处于以下状态的服务:SERVICE_START_PENDING、SERVICE_STOP_PENDING、SERVICE_RUNNING、SERVICE_CONTINUE_PENDING、SERVICE_PAUSE_PENDING和SERVICE_PAUSED。
SERVICE_INACTIVE
0x00000002
枚举处于SERVICE_STOPPED状态的服务。
SERVICE_STATE_ALL
0x00000003
合并以下状态:SERVICE_ACTIVE和SERVICE_INACTIVE。

[out, optional] lpServices

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

此数组的最大大小为 256K 字节。 若要确定所需的大小,请为此参数指定 NULL,为 cbBufSize 参数指定 0。 函数将失败, GetLastError 将返回ERROR_INSUFFICIENT_BUFFER。 “线路板”参数将接收所需大小。

Windows Server 2003 和 Windows XP: 此数组的最大大小为 64K 字节。 自 Windows Server 2003 SP1 和 Windows XP SP2 起,此限制已提高。

[in] cbBufSize

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

[out] pcbBytesNeeded

指向变量的指针,该变量接收返回剩余服务条目所需的字节数(如果缓冲区太小)。

[out] lpServicesReturned

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

[in, out, optional] lpResumeHandle

指向变量的指针,该变量在输入时指定枚举的起点。 首次调用此函数时,必须将此值设置为零。 在输出中,如果函数成功,则此值为零。 但是,如果函数返回零, 而 GetLastError 函数返回ERROR_MORE_DATA,则此值用于指示在调用函数以检索其他数据时要读取的下一个服务条目。

返回值

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

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

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

返回代码 说明
ERROR_ACCESS_DENIED
句柄没有SC_MANAGER_ENUMERATE_SERVICE访问权限。
ERROR_INVALID_HANDLE
指定的句柄无效。
ERROR_INVALID_PARAMETER
指定的参数无效。
ERROR_MORE_DATA
lpServices 缓冲区中容纳的服务条目数多。 写入 lpServices 的服务条目的实际数目在 lpServicesReturned 参数中返回。 获取剩余条目所需的字节数在 板字节Needed 参数中返回。 剩余的服务可以通过对 EnumServicesStatus 的附加调用来枚举,并使用 lpResumeHandle 参数来指示要读取的下一个服务。

注解

注意

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

要求

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

另请参阅

ENUM_SERVICE_STATUS

EnumDependentServices

EnumServicesStatusEx

OpenSCManager

服务函数

服务安装、删除和枚举