若要建立從即時來源或記錄檔收集效能數據的新查詢,請呼叫 PdhOpenQuery 函式。 函式會返回您在之後的 PDH 函數調用中使用的查詢句柄。
建立查詢之後,請針對您要新增至查詢的每個計數器呼叫 PdhAddCounter 函式。 您可以使用下列其中一種方法來提供完整限定的計數器路徑。
- 將計數器路徑定義為靜態字串。 如果您一律監視相同的計數器,而且熟悉計數器路徑的正確語法,請使用此方法。 如需指定計數器的正確語法資訊,請參閱 指定計數器路徑。
- 使用計算機、物件、計數器和實例的名稱,初始化 PDH_COUNTER_PATH_ELEMENTS 結構。 將此結構傳遞至 PdhMakeCounterPath,以傳回指定元素的計數器路徑。
- 指定包含通配符的計數器路徑,並呼叫 PdhExpandWildCardPath,以取得符合路徑中通配符的計數器名稱清單。 瀏覽計數器名稱清單,然後將您想要的計數器從此清單新增至查詢。
- 呼叫 PdhBrowseCounters 函式以顯示對話框,讓使用者瀏覽並選取性能計數器。 如需詳細資訊,請參閱 瀏覽計數器。
請注意,如果指定不存在的計數器實例,PdhAddCounter 不會報告錯誤狀況。 相反地,它會傳回ERROR_SUCCESS。 此行為的原因是,目前尚不清楚是否指定了不存在的計數器實例,或是指定了尚未建立的計數器實例。
遺漏的計數器實例會由 PdhCollectQueryData、PdhGetRawCounterValue或 PdhGetFormattedCounterValue來報告。 僅針對一個計數器實例呼叫 PdhCollectQueryData,而且計數器實例仍然不存在時,假設計數器實例不存在,且函式會傳回PDH_NO_DATA。 不過,如果查詢多個計數器,即使其中一個計數器實例不存在,PdhCollectQueryData 仍可能會傳回ERROR_SUCCESS。 在此情況下,請針對感興趣的每個計數器實例呼叫 PdhGetRawCounterValue 或 PdhGetFormattedCounterValue。 如果呼叫 PdhGetRawCounterValue時實例不存在,此函式會傳回 ERROR_SUCCESS,並將 PDH_RAW_COUNTER的 CStatus 成員設定為 PDH_STATUS_NO_INSTANCE。 如果呼叫 PdhGetFormattedCounterValue時,實例不存在,此函式會傳回PDH_INVALID_DATA,並將 PDH_FMT_COUNTERVALUE成員 CStatus 設定為PDH_CSTATUS_NO_INSTANCE。
請注意,PdhAddCounter 函式中指定的計數器路徑必須當地語系化。 PdhAddEnglishCounter 函式提供一種不受地區影響的方法,將效能計數器新增至查詢。 建議使用此函式將不受地區設定影響的計數器新增至查詢操作。
若要從查詢中移除計數器,請呼叫 PdhRemoveCounter 函式。
完成查詢數據收集之後,請呼叫 PdhCloseQuery 函式來關閉查詢並釋放所有配置的系統資源。 PdhCloseQuery 關閉與查詢相關聯的所有計數器句柄。