次の方法で共有


パフォーマンス拡張 DLL の作成

重要

パフォーマンスと信頼性の大幅な制限により、このトピックで説明するパフォーマンス カウンター データを提供する方法は、今後変更または使用できなくなる可能性があります。 代わりに、新しいパフォーマンス カウンターを作成 するためにバージョン 2.0 を使用したカウンター データの提供 に関するページで説明されている方法を使用し、既存のパフォーマンス カウンターもその方法を使用するように移行することをお勧めします。

V1 プロバイダーは、コンシューマーにカウンター データを提供するパフォーマンス DLL を使用します。 パフォーマンス DLL は、 OpenPerformanceDataCollectPerformanceDataおよび ClosePerformanceData 関数を エクスポートする必要があります。 通常、モジュール定義 (.def) ファイルを使用して、DLL から関数をエクスポートします。 システムは、コンシューマーがパフォーマンス データを照会するときに、これらの関数を呼び出します。

コンシューマーが初めて RegQueryValueEx を呼び出す場合、またはコンシューマーが RegOpenKey 関数または RegConnectRegistry 関数を使用してを開くHKEY_PERFORMANCE_DATA場合、システムは、コンピューターに登録されているプロバイダーごとに OpenPerformanceData 関数を呼び出します。 例外は、プロバイダーが .INI ファイルの セクションで [objects] サポートするオブジェクトの一覧を指定する場合です。 この場合、クエリ対象オブジェクトの 1 つがリストのオブジェクトと一致する場合にのみ、システムはプロバイダーを呼び出します。

OpenPerformanceData 関数は、各プロバイダーにパフォーマンス データ構造を初期化する機会を提供します。 その後、 OpenPerformanceData 関数が正常に返された場合、システムはプロバイダーの CollectPerformanceData 関数を 呼び出します。 RegQueryValueEx を後続で呼び出すと、システムは CollectPerformanceData 関数を呼び出します。

コンシューマーがパフォーマンス データの収集を完了すると、RegCloseKey 関数の呼び出しで を指定HKEY_PERFORMANCE_DATAします。 これにより、システムは各プロバイダーの ClosePerformanceData 関数を呼び出します。 その後、プロバイダーはアンロードされます。

複数のコンシューマーが同時にパフォーマンス データを収集できます。 システムは、DLL が読み込まれるかアンロードされるたびに、 OpenPerformanceData 関数と ClosePerformanceData 関数を 1 回だけ呼び出します。

注意

コンパイラが関数名に装飾を追加しないように、C++ コードに extern "C" を含めるようにしてください。そうしないと、システムが関数を見つけることができない可能性があります。

注意

パフォーマンス DLL の読み込み中、関数の検索中、または関数の呼び出し中にエラーが発生した場合、システムは、同じプロセス内の後続のコレクションのプロバイダーを無効にします。 また、特権プロセスで実行中にこれが発生した場合、システムはパフォーマンス キーに[パフォーマンス カウンターの無効化] 値を追加して、プロバイダーが将来読み込まれるのを防ぎます。

パフォーマンス DLL の記述の詳細については、次のトピックを参照してください。