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_KERNEL_DRIVER 和 SERVICE_FILE_SYSTEM_DRIVER的服務。 |
|
檔系統驅動程式服務。 |
|
驅動程式服務。 |
|
類型為 SERVICE_WIN32_OWN_PROCESS 和 SERVICE_WIN32_SHARE_PROCESS的服務。 |
|
在自己的進程中執行的服務。 |
|
與一或多個其他服務共用進程的服務。 如需詳細資訊,請參閱 服務程式。 |
[in] dwServiceState
要列舉的服務狀態。 此參數可以是下列其中一個值。
[out, optional] lpServices
接收狀態信息的緩衝區指標。 此數據的格式取決於 InfoLevel 參數的值。
此陣列的大小上限為256K個字節。 若要判斷所需的大小,請為此參數指定 NULL,併為 cbBufSize 參數指定 0。 函式將會失敗,GetLastError 會傳回 ERROR_MORE_DATA。 參數將會收到所需的大小。
Windows Server 2003 和 Windows XP:此陣列的大小上限為 64K 個字節。 從 WINDOWS Server 2003 SP1 和 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。 可能會傳回下列錯誤。
傳回碼 | 描述 |
---|---|
|
句柄沒有 SC_MANAGER_ENUMERATE_SERVICE 訪問許可權。 |
|
緩衝區太小。 並非所有使用中資料庫中的數據都可以傳回。 |
|
使用了不合法的參數值。 |
|
句柄無效。 |
|
InfoLevel 參數包含不支援的值。 |
|
系統正在關閉;無法呼叫此函式。 |
言論
如果呼叫端沒有服務的 SERVICE_QUERY_STATUS 訪問許可權,則會從傳回給客戶端的服務清單中以無訊息方式省略服務。
注意
winsvc.h 標頭會根據 UNICODE 預處理器常數的定義,將 EnumServicesStatusEx 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
支援的最低伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平臺 | 窗戶 |
標頭 | winsvc.h (包括 Windows.h) |
連結庫 | Advapi32.lib |
DLL | Advapi32.dll |