QueryServiceStatusEx 函数 (winsvc.h)

根据指定的信息级别检索指定服务的当前状态。

语法

BOOL QueryServiceStatusEx(
  [in]            SC_HANDLE      hService,
  [in]            SC_STATUS_TYPE InfoLevel,
  [out, optional] LPBYTE         lpBuffer,
  [in]            DWORD          cbBufSize,
  [out]           LPDWORD        pcbBytesNeeded
);

参数

[in] hService

服务的句柄。 此句柄由 CreateServiceOpenService 函数返回,并且它必须具有SERVICE_QUERY_STATUS访问权限。 有关详细信息,请参阅 服务安全性和访问权限

[in] InfoLevel

要返回的服务属性。 使用 SC_STATUS_PROCESS_INFO 检索服务状态信息。 lpBuffer 参数是指向SERVICE_STATUS_PROCESS结构的指针。

目前,未定义其他信息级别。

[out, optional] lpBuffer

指向接收状态信息的缓冲区的指针。 此数据的格式取决于 InfoLevel 参数的值。

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

[in] cbBufSize

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

[out] pcbBytesNeeded

指向变量的指针,该变量接收存储所有状态信息所需的字节数(如果函数失败并ERROR_INSUFFICIENT_BUFFER)。

返回值

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

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

返回代码 说明
ERROR_INVALID_HANDLE
该句柄无效。
ERROR_ACCESS_DENIED
句柄没有SERVICE_QUERY_STATUS访问权限。
ERROR_INSUFFICIENT_BUFFER
缓冲区太小, 无法 SERVICE_STATUS_PROCESS结构。 结构中未写入任何内容。
ERROR_INVALID_PARAMETER
SERVICE_STATUS_PROCESScbSize 成员无效。
ERROR_INVALID_LEVEL
InfoLevel 参数包含不受支持的值。
ERROR_SHUTDOWN_IN_PROGRESS
系统正在关闭;无法调用此函数。

注解

QueryServiceStatusEx 函数返回报告给服务控制管理器的最新服务状态信息。 如果服务刚刚更改其状态,则它可能尚未更新服务控制管理器。

如果服务的状态是SERVICE_RUNNING、SERVICE_PAUSE_PENDING、SERVICE_PAUSED或SERVICE_CONTINUE_PENDING之一,则SERVICE_STATUS_PROCESS结构中返回的进程标识符是有效的。 但是,如果服务处于SERVICE_START_PENDING或SERVICE_STOP_PENDING状态,则进程标识符可能无效,并且如果服务处于SERVICE_STOPPED状态,则它永远不会有效。

示例

有关示例,请参阅 启动服务停止服务

要求

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

另请参阅

SERVICE_STATUS_PROCESS

服务函数

服务启动