クエリを作成する

リアルタイムソースまたはログ ファイルからパフォーマンス データを収集する新しいクエリを作成するには、 PdhOpenQuery 関数を呼び出します。 関数は、後続の PDH 関数呼び出しで使用するクエリにハンドルを返します。

クエリを作成したら、クエリに追加するカウンターごとに PdhAddCounter 関数を呼び出します。 次のいずれかの方法を使用して、完全修飾カウンター パスを指定できます。

  • カウンター パスを静的文字列として定義します。 常に同じカウンターを監視し、カウンター パスの正しい構文を理解している場合は、このメソッドを使用します。 カウンターの指定に使用される正しい構文については、「カウンター パスの指定」を参照してください。
  • コンピューター、オブジェクト、カウンター、およびインスタンスの名前を使用して、 PDH_COUNTER_PATH_ELEMENTS 構造体を初期化します。 この構造体を PdhMakeCounterPath に渡します。これにより、指定した要素のカウンター パスが返されます。
  • ワイルドカード文字を含むカウンター パスを指定し、 PdhExpandWildCardPath を呼び出して、パス内のワイルドカード文字と一致するカウンター名の一覧を取得します。 カウンター名の一覧をスキャンし、この一覧から必要なカウンターをクエリに追加します。
  • PdhBrowseCounters 関数を呼び出して、ユーザーがパフォーマンス カウンターを参照して選択できるようにするダイアログ ボックスを表示します。 詳細については、「カウンターの 参照」を参照してください。

存在しないカウンター インスタンスが指定されている場合、 PdhAddCounter はエラー状態を報告しないことに注意してください。 代わりに、ERROR_SUCCESSを返します。 この動作の理由は、存在しないカウンター インスタンスが指定されているか、存在していてもまだ作成されていない場合は不明です。

不足しているカウンター インスタンスは、 PdhCollectQueryDataPdhGetRawCounterValue、または PdhGetFormattedCounterValue によって報告されます。 1 つのカウンター インスタンスに対してのみ PdhCollectQueryData を呼び出し、カウンター インスタンスがまだ存在しない場合、カウンター インスタンスは存在せず、関数はPDH_NO_DATAを返すと見なされます。 ただし、複数のカウンターがクエリされる場合、 PdhCollectQueryData は、カウンター インスタンスの 1 つがまだ存在しない場合でも、ERROR_SUCCESSを返す可能性があります。 この場合は、対象のカウンター インスタンスごとに PdhGetRawCounterValue または PdhGetFormattedCounterValue を呼び出します。 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 は、 クエリに関連付けられているすべてのカウンター ハンドルを閉じます。