Win32 API 日本語リファレンス
ホーム › System.Performance › PM_COLLECT_PROC

PM_COLLECT_PROC

コールバック

シグネチャ

DWORD PM_COLLECT_PROC(
    LPWSTR pValueName,
    void** ppData,
    DWORD* pcbTotalBytes,
    DWORD* pNumObjectTypes
);

パラメーター

フィールド型
pValueNameLPWSTR
ppDatavoid**
pcbTotalBytesDWORD*
pNumObjectTypesDWORD*

公式ドキュメント

パフォーマンスデータを収集し、コンシューマーに返します。パフォーマンスデータを提供するパフォーマンス DLL を作成する場合は、この関数を実装してエクスポートします。システムは、コンシューマーがレジストリにパフォーマンスデータを照会するたびに、この関数を呼び出します。

CollectPerformanceData 関数は、アプリケーション定義の関数名のプレースホルダーです。

戻り値

次のいずれかの値を返します。

戻り値 説明
ERROR_MORE_DATA lpcbTotalBytes で指定された pData バッファー(pData は lppData が指すポインターを表します)のサイズが、データを格納するのに十分ではありません。pData は変更せず、lpcbTotalBytes と lpNumObjectTypes を 0 に設定してください。必要なバッファーサイズは次回の呼び出しまでに変化する可能性があるため、そのサイズを示すことは行いません。
ERROR_SUCCESS ERROR_MORE_DATA の場合以外は、データを返さなかった場合やエラーが発生した場合でも、この値を返します。バッファーサイズ不足以外のエラーを報告するには、アプリケーションイベントログを使用してください。

解説(Remarks)

lpValueName パラメーターで指定された要求オブジェクトが、パフォーマンス DLL がサポートするオブジェクトインデックスのいずれにも該当しない場合は、pData パラメーター(pData は lppData が指すポインターを表します)を変更せず、lpcbTotalBytes パラメーターと lpNumObjectTypes パラメーターを 0 に設定してください。これは、データが返されなかったことを示します。

照会されたオブジェクトを 1 つ以上サポートする場合は、lpcbTotalBytes で指定された pData バッファーのサイズが、データを格納するのに十分かどうかを判断します。十分でない場合は、pData は変更せず、lpcbTotalBytes と lpNumObjectTypes を 0 に設定します。必要なバッファーサイズは次回の呼び出しまでに変化する可能性があるため、そのサイズを示すことは行いません。そして ERROR_MORE_DATA を返します。

データの収集に時間がかかる場合は、特定のオブジェクトに対する照会、またはコストの高い照会にのみ応答するようにしてください。また、システムのパフォーマンスに悪影響を与えないように、データを収集するスレッドの優先度を下げてください。照会文字列の形式については、Using the Registry Functions to Consume Counter Data を参照してください。

コンシューマーが別のコンピューター上で(リモートで)実行されている場合、OpenPerformanceData、ClosePerformanceData、および CollectPerformanceData の各関数は、リモート接続のサーバー側を処理する Winlogon プロセスのコンテキストで呼び出されます。この違いは、リモートの場合にのみ発生する問題をトラブルシューティングする際に重要です。

この関数が正常に復帰した後、システムはデータの整合性を確認するための基本的なテストを実行することがあります。既定では、テストは実行されません。テストに失敗した場合、システムはイベントログメッセージを生成し、無効なポインターによるさらなる問題を防ぐためにデータを破棄します。テストレベルは次のレジストリ値で制御します: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Perflib\ExtCounterTestLevel。

ExtCounterTestLevel に指定できるテストレベルは次のとおりです。

レベル 意味
1 信頼されたカウンター DLL のポインターとバッファーをテストします。ユーザーのバッファーのコピーを渡します。
2 ポインターとバッファー長はテストしますが、ポインターの参照先やバッファーの内容はテストしません。ユーザーのバッファーのコピーを渡します。
3 ポインターもバッファーもテストしません。ユーザーのバッファーのコピーを渡します。
4 ポインターもバッファーもテストしません。コピーではなく、ユーザーのバッファーそのものを渡します。これが既定値です。

レベル 1 および 2 では、次のテストが実行されます。

次のテストは、テストレベル 1 が使用されている場合にのみ実行されます。

例

Implementing CollectPerformanceData を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)