共用方式為


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。 可以傳回下列錯誤。

傳回碼 Description
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)
程式庫 Advapi32.lib
Dll Advapi32.dll

另請參閱

SERVICE_STATUS_PROCESS

服務函式

服務啟動