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
服务的句柄。 此句柄由 CreateService 或 OpenService 函数返回,并且它必须具有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。 可能会返回以下错误。
返回代码 | 说明 |
---|---|
|
该句柄无效。 |
|
句柄没有SERVICE_QUERY_STATUS访问权限。 |
|
缓冲区太小, 无法 SERVICE_STATUS_PROCESS结构。 结构中未写入任何内容。 |
|
SERVICE_STATUS_PROCESS的 cbSize 成员无效。 |
|
InfoLevel 参数包含不受支持的值。 |
|
系统正在关闭;无法调用此函数。 |
注解
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 |