共用方式為


EnumServicesStatusA 函式 (winsvc.h)

列舉指定服務控制管理員資料庫中的服務。 會提供每個服務的名稱和狀態。

此函式已由 EnumServicesStatusEx 函式取代。 它會傳回相同的資訊 EnumServicesStatus 傳回,以及服務的進程標識碼和其他資訊。 此外,EnumServicesStatusEx 可讓您列舉屬於指定群組的服務。

語法

BOOL EnumServicesStatusA(
  [in]                SC_HANDLE              hSCManager,
  [in]                DWORD                  dwServiceType,
  [in]                DWORD                  dwServiceState,
  [out, optional]     LPENUM_SERVICE_STATUSA 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 緩衝區中還要多。 lpServicesReturned 參數中傳回寫入 lpServices 的實際服務項目數目。 取得其餘專案所需的位元組數目會在 參數中傳回。 其餘服務可藉由其他呼叫 EnumServicesStatus 列舉,其中 lpResumeHandle 參數,指出要讀取的下一個服務。

言論

注意

winsvc.h 標頭會將 EnumServicesStatus 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
支援的最低伺服器 Windows Server 2003 [僅限傳統型應用程式]
目標平臺 窗戶
標頭 winsvc.h (包括 Windows.h)
連結庫 Advapi32.lib
DLL Advapi32.dll

另請參閱

ENUM_SERVICE_STATUS

EnumDependentServices

EnumServicesStatusEx

OpenSCManager

Service Functions

服務安裝、移除和列舉