Share via


PdhEnumObjectItemsHA 函式 (pdh.h)

傳回存在於指定計算機或指定記錄檔中的指定物件的計數器和實例名稱。

此函式與 PdhEnumObjectItems 函式相同,不同之處在於它支援使用數據源的句柄。

語法

PDH_FUNCTION PdhEnumObjectItemsHA(
  [in]      PDH_HLOG hDataSource,
  [in]      LPCSTR   szMachineName,
  [in]      LPCSTR   szObjectName,
  [out]     PZZSTR   mszCounterList,
  [in, out] LPDWORD  pcchCounterListLength,
  [out]     PZZSTR   mszInstanceList,
  [in, out] LPDWORD  pcchInstanceListLength,
  [in]      DWORD    dwDetailLevel,
  [in]      DWORD    dwFlags
);

參數

[in] hDataSource

PdhBindInputDataSource 函式所傳回數據源的句柄。

[in] szMachineName

以 Null 結尾的字串,指定包含您要列舉之計數器和實例名稱的電腦名稱。

在計算機名稱中包含前置斜線,例如 \computername。

如果 szDataSource 參數為 NULL,您可以將 szMachineName 設定為 NULL 以指定本機電腦。

[in] szObjectName

以 Null 結束的字串,指定您要列舉其計數器和實例名稱的物件名稱。

[out] mszCounterList

呼叫端配置的緩衝區,接收指定物件所提供的 Null 終止計數器名稱清單。 清單包含唯一的計數器名稱。 清單會以兩 個NULL 字元終止。 如果pcchCounterListLength 參數為零,則設定為NULL

[in, out] pcchCounterListLength

mszCounterList 緩衝區的大小,以 TCHAR 為單位。 如果輸入和物件存在零,函式會傳回PDH_MORE_DATA,並將此參數設定為所需的緩衝區大小。 如果緩衝區大於所需的大小,函式會將此參數設定為所使用緩衝區的實際大小。 如果輸入上的指定大小大於零,但小於所需的大小,您就不應該依賴傳回的大小來重新配置緩衝區。

[out] mszInstanceList

呼叫端配置的緩衝區,接收指定物件所提供的 Null 終止實例名稱清單。 清單包含唯一的實例名稱。 清單會以兩 個NULL 字元終止。 如果pcchInstanceListLength 參數為零,則設定為NULL

[in, out] pcchInstanceListLength

mszInstanceList 緩衝區的大小,以 TCHAR 為單位。 如果輸入和物件存在零,函式會傳回PDH_MORE_DATA,並將此參數設定為所需的緩衝區大小。 如果緩衝區大於所需的大小,函式會將此參數設定為所使用緩衝區的實際大小。 如果輸入上的指定大小大於零,但小於所需的大小,您就不應該依賴傳回的大小來重新配置緩衝區。

如果指定的物件不支援變數實例,則傳回的值會是零。 如果指定的物件支援變數實例,但目前沒有任何實例,則傳回的值會是 2,這是空白MULTI_SZ清單字串的大小。

[in] dwDetailLevel

要傳回之效能項目的詳細數據層級。 所有屬於指定詳細數據層級的項目都會傳回, (層級會依遞增順序列出) 。 此參數可以是下列其中一個值。

意義
PERF_DETAIL_NOVICE
用戶詳細數據層級的新手。
PERF_DETAIL_ADVANCED
進階使用者詳細數據層級。
PERF_DETAIL_EXPERT
專家使用者詳細數據層級。
PERF_DETAIL_WIZARD
系統設計工具的詳細數據層級。

[in] dwFlags

此參數必須是零。

傳回值

如果函式成功,則會傳回ERROR_SUCCESS。

如果函式失敗,傳回值為 系統錯誤碼PDH 錯誤碼。 以下是可能的值。

傳回碼 Description
PDH_MORE_DATA
其中一個緩衝區太小,無法包含名稱清單。 如果 輸入上的pcchCounterListLengthpcchInstanceListLength 為零,則預期傳回值。 如果輸入上的指定大小大於零,但小於所需的大小,您就不應該依賴傳回的大小來重新配置緩衝區。
PDH_INVALID_ARGUMENT
參數無效。 例如,在某些版本中,如果輸入上的指定大小大於零,但小於所需的大小,您可能會收到此錯誤。
PDH_MEMORY_ALLOCATION_FAILURE
無法配置記憶體以支援此函式。
PDH_CSTATUS_NO_MACHINE
指定的電腦離線或無法使用。
PDH_CSTATUS_NO_OBJECT
在指定的電腦上或指定的記錄檔中找不到指定的物件。

備註

您應該呼叫此函式兩次,第一次取得所需的緩衝區大小, (將緩衝區設定為 NULL ,並將大小設定為 0) ,第二次取得數據。

此函式的連續呼叫會傳回相同的計數器和實例清單,因為 PdhEnumObjectItemsH 一律會查詢 最後呼叫 PdhEnumObjectsHPdhEnumObjectItemsH 所定義的性能物件清單。 若要重新整理性能物件清單,請先以 bRefresh 旗標值為 TRUE 呼叫 PdhEnumObjectSH,然後再再次呼叫 PdhEnumObjectItemsH

實例和計數器名稱的順序未決定。

注意

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

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
目標平台 Windows
標頭 pdh.h
程式庫 Pdh.lib
Dll Pdh.dll

另請參閱

PdhBindInputDataSource

PdhEnumObjectsH