次の方法で共有


CTRPPの

CTRPP ツールは、V2 プロバイダーのマニフェストを解析して検証するプリプロセッサです。 このツールは、プロバイダーのコンシューマーが必要とする文字列を含む .rc リソースを生成し、カウンター データを提供するために使用するコードを含む .h ヘッダーを生成します。 プロバイダーのビルド中に CTRPP ツールを実行する必要があります。 プロバイダーを開発するときは、このコードを自分で生成しようとするのではなく、生成されたコードを出発点として使用する必要があります。

ctrpp -o codeFile -rc rcFile [-legacy] [-MemoryRoutines] [-NotificationCallback] [-prefix prefix] [-ch symFile] [-backcompat] inputFile

論争

選択肢 説明
入力ファイル 必須: カウンタを定義する .man (XML マニフェスト) ファイルの名前を指定します。
-oコードファイル 必須: CTRPP によって生成される .h コード・ファイルの名前を指定します。 このファイルには、プロバイダーの初期化と初期化解除を簡略化する C/C++ インライン ヘルパー関数が含まれています。
-rcrcファイル 必須: CTRPP によって生成される .rc (リソース ファイル) の名前を指定します。 このファイルには、プロバイダーの文字列テーブルが含まれます。
-chsymFile CTRPP によって生成されるオプションの .h シンボル ファイルの名前を指定します。 このファイルには、プロバイダー内の各カウンターセットの名前と GUID の C/C++ シンボルが含まれます。
-プレフィックスプレフィックス 生成されたヘッダー ファイルで定義されている変数と関数に使用するプレフィックスを指定します。
-通知コールバック CounterInitialize 関数の既定のシグネチャを変更して、ControlCallbackAllocateMemory、および FreeMemory コールバック関数の名前を指定するためのパラメーターを含めます。 この引数は、provider 要素に callback 属性を含めるのと同じ効果があります。
-outputFileを移行する .h ファイルと .rc ファイルを生成する代わりに、inputFile マニフェストを最新バージョンにアップグレードし、outputFile に保存します。 このスイッチは、他のスイッチと併用することはできません。 使用法: CTRPP -migrate NewFile.man OldFile.man
-バックコンパット 廃止: カーネル モード プロバイダーのサポートは、Windows 7 で追加されました。 既定では、カーネル モード プロバイダーの CTRPP によって生成されるコードは、以前のバージョンの Windows と互換性がありません ( Pcw*** API がないため、ドライバーの読み込みに失敗します)。 以前のバージョンの Windows との互換性を有効にするには、 -BackCompat を設定します。 ドライバーは必要な API を動的に読み込み、API が使用できない場合は、生成されたコードによってプロバイダーがサイレントに無効になります。
-メモリルーチン 廃止:-Legacy スイッチと共に使用すると、生成されたコードにメモリ ルーチンのテンプレートが含まれます。 それ以外の場合、この引数は -NotificationCallback スイッチと同じ効果を持ちます。
-遺産 廃止: Windows Vista コード テンプレートを使用して、 *.h*.c*.rc、および *_r.h ファイルを生成します (CounterInitialize と CounterCleanup の代わりに PerfAutoInitialize と PerfAutoCleanup を生成します)。 このスイッチは 、-MemoryRoutines-NotificationCallback と共に使用できますが、他のスイッチと共に使用することはできません。 このスイッチでは 、-o または -rc スイッチを使用しないでください。 生成されたファイルには、マニフェストの名前に基づいて名前が付けられ、マニフェストが含まれていたディレクトリに書き込まれます。 使用法: CTRPP -legacy OldFile.man

注釈

CTRPP ツールは、 .h コード ファイル、 .rc リソース ファイルを生成し、必要に応じて .h シンボル ファイルを生成します。

生成されたリソース・ファイルの使用

CTRPP ツールは、プロバイダーのカウンターセットのコンシューマーが必要とするローカライズ可能な文字列を含む .rc リソース ファイルを生成します。

Von Bedeutung

このファイルのリソースはプロバイダー バイナリに含める必要があり、プロバイダー バイナリへの完全なパスは、プロバイダーのマニフェストのインストール中に登録する必要があります。 リソースを見つけて読み込むことができないコンシューマーは、プロバイダーのカウンターセットを使用できません。

文字列リソースは、次のように処理する必要があります。

  • 開発者は、プロバイダー マニフェスト (.man) ファイルを編集して、プロバイダーの applicationIdentity 属性を、プロバイダーの文字列リソースを含み、プロバイダー コンポーネントの一部としてインストールされるプロバイダー バイナリ (.DLL、.SYS、または .EXE) の名前に設定します。
  • CTRPP ツールは、プロバイダー マニフェストを読み取り、 .rc ファイルを生成します。
  • RC (リソース コンパイラ) ツールは、CTRPP で生成された .rc ファイルのデータをコンパイルして、バイナリ リソースを含む .res ファイルを生成します。 これを行うには、CTRPP で生成された .rc ファイルを直接コンパイルするか、#include ディレクティブを使用して CTRPP で生成された .rc ファイルを含む別の .rc ファイルをコンパイルします。
  • リンカーは、RC で生成された .res ファイルのデータをプロバイダー バイナリに埋め込みます。
  • インストール中に、プロバイダー バイナリがユーザーのシステムにコピーされ、プロバイダー マニフェストが lodctr ツールを使用して登録されます。 lodctr ツールは、プロバイダー マニフェストの applicationIdentity 属性を完全なパスに変換し、プロバイダー バイナリへの完全なパスをレジストリに記録します。
    • プロバイダバイナリがマニフェストと同じディレクトリにある場合は、 lodctr.exe /m:"C:\full\manifest\path\manifest.man" を使用します。 lodctr は、指定されたマニフェスト パスとマニフェストの applicationIdentity 属性を組み合わせて、完全なパスを形成します。
    • それ以外の場合は、lodctr.exe /m:"C:\full\manifest\path\manifest.man" "c:\full\binary\path" を使用します。 lodctr は、指定されたバイナリ パスとマニフェストの applicationIdentity 属性を組み合わせて、完全なパスを形成します。
    • 診断目的で、レジストリ キー HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\_V2Providers\{<ProviderGuid>}ApplicationIdentity値を確認することで、記録された完全なパスを検査できます。
    • バイナリがローカリゼーションに MUI を使用している場合は、バイナリと共に MUI ファイルを必ずコピーしてください。
  • カウンターセット コレクション中、コンシューマーは、プロバイダー バイナリに記録された完全なパスを使用して、プロバイダー バイナリのリソースから必要な文字列を見つけて読み込みます。

生成されたコード ファイルをユーザー モード プロバイダーで使用する

CTRPP ツールは、 .h C/C++ コード ファイルを生成します。 プロバイダー マニフェストの providerType 属性が userMode に設定されている場合、生成されたコード ファイルには、ユーザー モード プロバイダーのコーディングに役立つ次の定義が含まれます。

  • n プロバイダ初期化関数で 、プレフィックスCounterInitialize という名前が付けられます。
  • プレフィックスCounterCleanup という名前のプロバイダー クリーンアップ関数。
  • プレフィックスCounterInitialize 関数によって開かれたプロバイダー ハンドルを格納するグローバル プロバイダー変数。 変数の名前は、マニフェストの provider 要素の symbol 属性の値です。 この変数は、プロバイダーのデータを制御するために、 PerfCreateInstancePerfDeleteInstance、およびその他の API の呼び出しで使用する必要があります。
  • カウンターセットごとに、カウンターセット GUID を持つグローバル カウンターセットGUID 変数。 変数の名前は、 counterSet 要素の symbol 属性の値にサフィックス "GUID" (例: MyCounterSetGUID) を加えたものです。 この変数は、プロバイダーのデータを制御するために、 PerfCreateInstancePerfDeleteInstance、およびその他の API の呼び出しで使用する必要があります。
  • 各カウンターについて、カウンターのid値を持つカウンター マクロ。 マクロの名前は、 counter 要素の symbol 属性の値です。 このマクロは、プロバイダーのデータを設定するための PerfSetCounterRefValuePerfSetULongLongCounterValue、およびその他の API の呼び出しで使用する必要があります。

関数名では、 prefix-prefix コマンドラインパラメータの値を指します。 -prefix パラメーターを使用しない場合、関数の名前は CounterInitializeCounterCleanup になります。

カーネル モード プロバイダーで生成されたコード ファイルを使用する

CTRPP ツールは、 .h C/C++ コード ファイルを生成します。 プロバイダー マニフェストの providerType 属性が kernelMode に設定されている場合、生成されたコード ファイルには、カーネル モード プロバイダーのカウンターセットのコーディングに役立つ次の定義が含まれます。

  • prefixRegisterCounterset という名前のカウンターセット初期化関数。 この関数は、 RegInfo 構造体に入力し、 PcwRegister を呼び出し、結果のカウンターセット登録ハンドルをグローバル Counterset 変数に格納します。
  • prefixUnregister Counterset という名前のカウンターセットのクリーンアップ関数。 この関数は、グローバル Counterset 変数のカウンターセット登録ハンドルで PcwUnregister を呼び出します。
  • プレフィックスCreateCounterset という名前のインスタンス作成関数。 この関数は、PcwData 構造体の配列を埋め、グローバル Counterset 変数のカウンターセット登録ハンドルを使用して PcwCreateInstance を呼び出します。
  • プレフィックスCloseCounterset という名前のインスタンス クリーンアップ関数。 この関数は PcwCloseInstance を呼び出します。
  • カウンターセット コールバック関数から使用される プレフィックスAddCounterset という名前のインスタンス レポート関数。 この関数は、 PcwData 構造体の配列を格納し、 PcwAddInstance を呼び出します。
  • Windows SDK 20H1 以降: 高度なシナリオで使用するための プレフィックスInitRegistrationInformationCounterset という名前の RegInfo 初期化関数。 この関数は、 RegInfo 構造体に入力します。 この関数は、生成された プレフィックスRegisterCounterset がニーズを満たさない場合、たとえば、RegInfo 構造体の値をカスタマイズする場合や、返されたハンドルを別の変数に格納する場合に使用できます。

関数名では、 prefix-prefix コマンドラインパラメータの値を指します。 -prefix パラメータを使用しない場合、関数にはプレフィックスが付きません。

生成された プレフィックスAddCounterset 関数は、カウンターセット コールバックがある場合に使用されます。 生成されたプレフィックスCreateCounterset 関数と CloseCounterset 関数は、カウンターセット コールバックがない場合に使用されます。

生成されたシンボルファイルの使用

コマンドラインで -ch パラメータを指定すると、CTRPP ツールは .h シンボルファイルを生成します。 このファイルには、プロバイダー内の各カウンターセットの名前と GUID の C/C++ シンボルが含まれています。 シンボルは、 PerfLib V2 コンシューマー関数を使用して、このカウンターセットからのデータを使用するようにハードコーディングされたプログラムを作成するときに使用できます。

要求事項

要件 価値
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]