FunctionIDMapper 関数
関数の特定の識別子が、その関数の FunctionEnter2、FunctionLeave2、FunctionTailcall2 のコールバックで使用される代替 ID に再マップされる可能性があることをプロファイラーに通知します。 また FunctionIDMapper
により、プロファイラーはその関数のコールバックを受信するかどうかを示すことができます。
構文
UINT_PTR __stdcall FunctionIDMapper (
[in] FunctionID funcId,
[out] BOOL *pbHookFunction
);
パラメーター
funcId
[in] 再マップされる関数識別子。
pbHookFunction
[out] プロファイラーで FunctionEnter2
、FunctionLeave2
、FunctionTailcall2
の各コールバックを受信する場合に true
に設定される値へのポインター。それ以外の場合、この値は false
に設定されます。
戻り値
プロファイラーは、実行エンジンが代替関数識別子として使用する値を返します。 false
で pbHookFunction
を返さない限り、戻り値を null にすることはできません。 これ以外の状況で戻り値を null にすると、プロセスの中止など、予測できない結果が発生します。
解説
FunctionIDMapper
関数はコールバックです。 これは、プロファイラーにとってより役に立つ他の識別子に関数 ID を再マッピングするためにプロファイラーによって実装されます。 FunctionIDMapper
は、指定された関数に使用される代替 ID を返します。 次に、実行エンジンは、従来の関数 ID に加えて、この代替 ID を FunctionEnter2
、FunctionLeave2
、FunctionTailcall2
の各フックの clientData
パラメーターでプロファイラーに渡して、フックが呼び出されている関数を識別することで、プロファイラーの要求を受け入れます。
ICorProfilerInfo::SetFunctionIDMapper メソッドを使用して、FunctionIDMapper
関数の実装を指定できます。 ICorProfilerInfo::SetFunctionIDMapper
メソッドを呼び出すことができるのは 1 回だけです。このメソッドは、ICorProfilerCallback::Initialize コールバックで呼び出すことをお勧めします。
既定では、ICorProfilerInfo::SetEventMask を使用して COR_PRF_MONITOR_ENTERLEAVE フラグを設定し、ICorProfilerInfo::SetEnterLeaveFunctionHooks または ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 を介してフックを設定するプロファイラーでは、すべての関数に対して FunctionEnter2
、FunctionLeave2
、FunctionTailcall2
のコールバックを受信する必要があると想定されています。 ただし、pbHookFunction
を false
に設定して、特定の関数についてこれらのコールバックを選択的に受信しないようにするために、プロファイラーで FunctionIDMapper
を実装する場合があります。
プロファイラーでは、プロファイルされたアプリケーションの複数のスレッドによって同じメソッドまたは関数が同時に呼び出されるようなケースを許容する必要があります。 そのようなケースで、プロファイラーでは同じ FunctionID
について複数の FunctionIDMapper
コールバックを受信することがあります。 プロファイラーでは、同じ FunctionID
を使用して複数回呼び出された場合に、必ずこのコールバックから同じ値が返されるようにする必要があります。
必要条件
:「システム要件」を参照してください。
ヘッダー: CorProf.idl
ライブラリ: CorGuids.lib
.NET Framework のバージョン: 1.0 以降で使用可能
関連項目
.NET