Share via


建立查詢

若要建立從即時來源或記錄檔收集效能資料的新查詢,請呼叫 PdhOpenQuery 函 式。 函式會傳回您在後續 PDH 函式呼叫中使用的查詢控制碼。

建立查詢之後,請針對要新增至查詢的每個計數器呼叫 PdhAddCounter 函 式。 您可以使用下列其中一種方法來提供完整的計數器路徑。

  • 將計數器路徑定義為靜態字串。 如果您一律監視相同的計數器,而且熟悉計數器路徑的正確語法,請使用這個方法。 如需用來指定計數器的正確語法資訊,請參閱 指定計數器路徑
  • 使用電腦、物件、計數器和實例的名稱,初始化 PDH_COUNTER_PATH_ELEMENTS 結構。 將此結構傳遞至 PdhMakeCounterPath ,這會傳回指定專案的計數器路徑。
  • 指定包含萬用字元的計數器路徑,並呼叫 PdhExpandWildCardPath 以取得符合路徑中萬用字元的計數器名稱清單。 掃描計數器名稱清單,並新增至查詢您要從此清單中取得的計數器。
  • 呼叫 PdhBrowseCounters 函 式以顯示對話方塊,讓使用者流覽並選取效能計數器。 如需詳細資訊,請參閱 流覽計數器

請注意,如果指定的計數器實例不存在, PdhAddCounter 就不會報告錯誤狀況。 相反地,它會傳回ERROR_SUCCESS。 此行為的原因是,如果已指定不存在的計數器實例,或尚未建立的計數器實例,則無法得知。

遺漏的計數器實例將由 PdhCollectQueryDataPdhGetRawCounterValuePdhGetFormattedCounterValue報告。 針對一個計數器實例呼叫 PdhCollectQueryData ,而且計數器實例仍然不存在時,會假設計數器實例不存在,而且函式會傳回PDH_NO_DATA。 不過,如果查詢多個計數器,即使其中一個計數器實例不存在, PdhCollectQueryData 仍可能會傳回ERROR_SUCCESS。 在此情況下,請針對感興趣的每個計數器實例呼叫 PdhGetRawCounterValuePdhGetFormattedCounterValue 。 如果呼叫PdhGetRawCounterValue時實例不存在,函式會傳回 ERROR_SUCCESS,並將PDH_RAW_COUNTERCStatus成員設定為 PDH_STATUS_NO_INSTANCE。 如果呼叫PdhGetFormattedCounterValue時實例不存在,函式會傳回PDH_INVALID_DATA,並將PDH_FMT_COUNTERVALUECStatus成員設定為 PDH_CSTATUS_NO_INSTANCE。

請注意, PdhAddCounter 函式中指定的計數器路徑必須當地語系化。 PdhAddEnglishCounter 函式提供地區設定中性的方式,可將效能計數器新增至查詢。 此函式是將地區設定中性計數器新增至查詢的建議方式。

若要從查詢中移除計數器,請呼叫 PdhRemoveCounter 函 式。

完成查詢資料收集之後,請呼叫 PdhCloseQuery 函式以關閉查詢並釋放所有配置的系統資源。 PdhCloseQuery 會關閉與查詢相關聯的所有計數器控制碼。