次の方法で共有


カーネル モードのパフォーマンス カウンターの使用

カーネル モード コンポーネントは、Windows (PCW) API のパフォーマンス カウンターを使用してパフォーマンス カウンターを提供します。

新しいカウンター データ プロバイダーを開発するには、次の手順に従います。

  1. プロバイダーとそのカウンターセットを記述するカウンター マニフェスト を記述します。 カウンター マニフェストは、パフォーマンス カウンター プロバイダーとそのカウンターセットを定義する XML 形式のファイルです。

    • カーネル モード コンポーネントの一部としてインストールされ、パフォーマンス データ コンシューマーが必要とする文字列リソースを含むバイナリの名前にapplicationIdentity属性を設定します。
    • providerType 属性を kernelMode に設定します。
    • コンポーネントから PCW API にカウンター値を渡すときに使用される C/C++ 構造体の名前を持つ少なくとも 1 つの struct 要素 (counterSet/structsの下) を定義します。
    • それぞれのcounterで、PCW がカウンター値を読み取る場所となるstructfieldを定義します。
  2. コンポーネントのビルド プロセスの一環として、CTRPP ツールを使用してカウンター マニフェストをコンパイルします。 (カウンター プリプロセッサ (CTRPP) ツールは WDK に含まれており、「ctrpp」と入力して開発者コマンド プロンプト を表示 します。) CTRPP ツールは、.rcファイルと.hファイルを生成します。

    • CTRPP で生成された.rcファイルは、リソース コンパイラ (RC.exe) ツールでコンパイルする必要があり、結果の.resファイルはapplicationIdentity属性で指定されたバイナリにリンクされている必要があります。 CTRPP で生成された.rcファイルを直接コンパイルするか、CTRPP で生成された.rcファイルを、バイナリにコンパイルされている既存の.rcファイルにコンパイル#includeできます。
    • CTRPP で生成された.hファイルには、基になる PCW API をラップするヘルパー関数が含まれています。 たとえば、CTRPP で生成された.hファイルには、ユーザーに代わってPcwRegisterを呼び出す RegisterXxx 関数が含まれます。 ほとんどの場合、PCW API を直接呼び出すのではなく、CTRPP で生成されたヘルパー関数を呼び出しますが、PCW API のドキュメントを参照して、対応する CTRPP 生成関数が何を行っているかを理解できます。 ヘルパー関数は、コンポーネントのカウンター データ レイアウトを PCW API で想定されるレイアウトに PCW_DATA 変換する処理を管理します。
  3. コンポーネントの初期化時に、CTRPP によって生成された RegisterXxx 関数を呼び出します。この関数は PcwRegister を呼び出します。 コンポーネントのシャットダウン時に、CTRPP によって生成された UnregisterXxx 関数を呼び出します。この関数は PcwUnregister を呼び出します。

  4. カウンター データを提供するコードを追加します。 これを行うには、PCW_CALLBACK コールバック関数を実装するか、各インスタンスのカウンター値を持つデータ構造をメインし、インスタンスの作成と破棄時に CTRPP で生成された CreateInstanceXxx 関数と CloseInstanceXxx 関数を呼び出します。

  5. コンポーネントのインストール時に、プロバイダーのインストールにlodctr /m:<CounterManifest> <InstallPath>を使用します。 コンポーネントのアンインストール時に、(/mまたは/gパラメーターで)unlodctrを使用してプロバイダーをアンインストールします。 プロバイダーをインストールすると、使用可能なカウンターセットのシステム全体のリポジトリにプロバイダーのカウンターセットが追加され、パフォーマンス データ コンシューマー (perfmon、typeperf、WMI など) がカウンターセットを使用できるようになります。 特に、プロバイダーをインストールすると、プロバイダーの文字列テーブルを含むバイナリ (DLL、SYS、または EXE ファイル) への完全なパスが記録されます。 バイナリへの完全なパスは、マニフェストのapplicationIdentity属性とlodctrコマンド ラインで使用される<CounterManifest>および<InstallPath>値を次のように組み合わせることによって決定されます。

    • applicationIdentity属性が完全なパスの場合は、その属性が使用されます。
    • それ以外の場合、<InstallationPath>パラメーターが完全なパスの場合はこれが使用されます。
    • それ以外の場合、<CounterManifest>パラメーターが完全なパスの場合、<CounterManifest>からのディレクトリはapplicationIdentity属性のファイル名と組み合わされます。
    • それ以外の場合、現在の作業ディレクトリはapplicationIdentity属性のファイル名と組み合わされます。

カーネル モード PCW プロバイダーの例については、GitHub の Windows ドライバー サンプル リポジトリカーネル カウンター サンプル (Kcs) を参照してください。

関連項目

カーネル モードのパフォーマンスの監視

PcwRegister

PCW_CALLBACK

パフォーマンス カウンター スキーマ

CTRPP ツール