enumServicesStatusExA 函式 (winsvc.h)

列舉指定之服務控制管理員資料庫中的服務。 系統會根據指定的資訊層級提供每個服務的名稱和狀態,以及其他資料。

語法

BOOL EnumServicesStatusExA(
  [in]                SC_HANDLE    hSCManager,
  [in]                SC_ENUM_TYPE InfoLevel,
  [in]                DWORD        dwServiceType,
  [in]                DWORD        dwServiceState,
  [out, optional]     LPBYTE       lpServices,
  [in]                DWORD        cbBufSize,
  [out]               LPDWORD      pcbBytesNeeded,
  [out]               LPDWORD      lpServicesReturned,
  [in, out, optional] LPDWORD      lpResumeHandle,
  [in, optional]      LPCSTR       pszGroupName
);

參數

[in] hSCManager

服務控制管理員資料庫的控制碼。 這個控制碼是由 OpenSCManager 函式傳回,而且必須具有 SC_MANAGER_ENUMERATE_SERVICE 存取權限。 如需詳細資訊,請參閱 服務安全性和存取權限

[in] InfoLevel

要傳回的服務屬性。 使用 SC_ENUM_PROCESS_INFO 擷取資料庫中每個服務的名稱和服務狀態資訊。 lpServices參數是接收ENUM_SERVICE_STATUS_PROCESS結構陣列之緩衝區的指標。 緩衝區必須夠大,才能保存結構及其成員指向的字串。

目前未定義其他資訊層級。

[in] dwServiceType

要列舉的服務類型。 此參數可以是下列一或多個值。

意義
SERVICE_DRIVER
0x0000000B
類型為 SERVICE_KERNEL_DRIVERSERVICE_FILE_SYSTEM_DRIVER 的服務
SERVICE_FILE_SYSTEM_DRIVER
0x00000002
檔案系統驅動程式服務。
SERVICE_KERNEL_DRIVER
0x00000001
驅動程式服務。
SERVICE_WIN32
0x00000030
類型為 SERVICE_WIN32_OWN_PROCESSSERVICE_WIN32_SHARE_PROCESS的服務。
SERVICE_WIN32_OWN_PROCESS
0x00000010
在自己的進程中執行的服務。
SERVICE_WIN32_SHARE_PROCESS
0x00000020
與一或多個其他服務共用進程的服務。 如需詳細資訊,請參閱 服務程式

[in] dwServiceState

要列舉的服務狀態。 此參數可以是下列其中一個值。

意義
SERVICE_ACTIVE
0x00000001
列舉處於下列狀態的服務:SERVICE_START_PENDINGSERVICE_STOP_PENDING、SERVICE_RUNNINGSERVICE_CONTINUE_PENDINGSERVICE_PAUSE_PENDINGSERVICE_PAUSED
SERVICE_INACTIVE
0x00000002
列舉 處於SERVICE_STOPPED 狀態的服務。
SERVICE_STATE_ALL
0x00000003
結合 SERVICE_ACTIVESERVICE_INACTIVE 狀態。

[out, optional] lpServices

接收狀態資訊的緩衝區指標。 此資料的格式取決於 InfoLevel 參數的值。

此陣列的大小上限為 256K 個位元組。 若要判斷所需的大小,請為此參數指定 Null ,並針對 cbBufSize 參數指定 0。 函式將會失敗,而且 GetLastError傳回ERROR_MORE_DATA其會接收所需的大小。

Windows Server 2003 和 Windows XP: 此陣列的大小上限為 64K 個位元組。 此限制已從 SP1 的 Windows Server 2003 和 WINDOWS XP SP2 增加。

[in] cbBufSize

lpServices參數所指向的緩衝區大小,以位元組為單位。

[out] pcbBytesNeeded

如果緩衝區太小,則為變數的指標,接收傳回剩餘服務專案所需的位元組數目。

[out] lpServicesReturned

接收傳回之服務專案數目之變數的指標。

[in, out, optional] lpResumeHandle

在輸入上指定列舉起點的變數指標。 第一次呼叫 EnumServicesStatusEx 函 式時,您必須將此值設定為零。 在輸出中,如果函式成功,這個值會是零。 不過,如果函式傳回零,而且 GetLastError 函 式傳回 ERROR_MORE_DATA,則此值表示呼叫 EnumServicesStatusEx 函 式以擷取其他資料時要讀取的下一個服務專案。

[in, optional] pszGroupName

載入順序組名。 如果此參數是字串,唯一列舉的服務就是屬於字串所指定名稱之群組的服務。 如果此參數是空字串,則只會列舉不屬於任何群組的服務。 如果此參數為 Null,則會忽略群組成員資格,並列舉所有服務。

傳回值

如果函式成功,則傳回非零的值。

如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。 可能會傳回下列錯誤。

傳回碼 描述
ERROR_ACCESS_DENIED
控制碼沒有 SC_MANAGER_ENUMERATE_SERVICE 存取權限。
ERROR_MORE_DATA
緩衝區太小。 並非所有使用中資料庫的資料都可以傳回。 此參數包含接收剩餘專案所需的位元組數目。
ERROR_INVALID_PARAMETER
使用了不合法的參數值。
ERROR_INVALID_HANDLE
控制代碼無效。
ERROR_INVALID_LEVEL
InfoLevel參數包含不支援的值。
ERROR_SHUTDOWN_IN_PROGRESS
系統正在關閉;無法呼叫此函式。

備註

如果呼叫端沒有服務SERVICE_QUERY_STATUS存取權限,則會從傳回給用戶端的服務清單中以無 訊息 方式省略服務。

注意

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

規格需求

   
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
目標平台 Windows
標頭 winsvc.h (包含 Windows.h)
程式庫 Advapi32.lib
Dll Advapi32.dll

另請參閱

ENUM_SERVICE_STATUS_PROCESS

服務函式

服務安裝、移除和列舉