次の方法で共有


FunctionIDMapper 関数

関数の特定の識別子が、その関数の FunctionEnter2FunctionLeave2FunctionTailcall2 のコールバックで使用される代替 ID に再マップされる可能性があることをプロファイラーに通知します。 また FunctionIDMapper により、プロファイラーはその関数のコールバックを受信するかどうかを示すことができます。

構文

UINT_PTR __stdcall FunctionIDMapper (  
    [in]  FunctionID  funcId,
    [out] BOOL       *pbHookFunction  
);  

パラメーター

funcId [in] 再マップされる関数識別子。

pbHookFunction [out] プロファイラーで FunctionEnter2FunctionLeave2FunctionTailcall2 の各コールバックを受信する場合に true に設定される値へのポインター。それ以外の場合、この値は false に設定されます。

戻り値

プロファイラーは、実行エンジンが代替関数識別子として使用する値を返します。 falsepbHookFunction を返さない限り、戻り値を null にすることはできません。 これ以外の状況で戻り値を null にすると、プロセスの中止など、予測できない結果が発生します。

解説

FunctionIDMapper 関数はコールバックです。 これは、プロファイラーにとってより役に立つ他の識別子に関数 ID を再マッピングするためにプロファイラーによって実装されます。 FunctionIDMapper は、指定された関数に使用される代替 ID を返します。 次に、実行エンジンは、従来の関数 ID に加えて、この代替 ID を FunctionEnter2FunctionLeave2FunctionTailcall2 の各フックの clientData パラメーターでプロファイラーに渡して、フックが呼び出されている関数を識別することで、プロファイラーの要求を受け入れます。

ICorProfilerInfo::SetFunctionIDMapper メソッドを使用して、FunctionIDMapper 関数の実装を指定できます。 ICorProfilerInfo::SetFunctionIDMapper メソッドを呼び出すことができるのは 1 回だけです。このメソッドは、ICorProfilerCallback::Initialize コールバックで呼び出すことをお勧めします。

既定では、ICorProfilerInfo::SetEventMask を使用して COR_PRF_MONITOR_ENTERLEAVE フラグを設定し、ICorProfilerInfo::SetEnterLeaveFunctionHooks または ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 を介してフックを設定するプロファイラーでは、すべての関数に対して FunctionEnter2FunctionLeave2FunctionTailcall2 のコールバックを受信する必要があると想定されています。 ただし、pbHookFunctionfalse に設定して、特定の関数についてこれらのコールバックを選択的に受信しないようにするために、プロファイラーで FunctionIDMapper を実装する場合があります。

プロファイラーでは、プロファイルされたアプリケーションの複数のスレッドによって同じメソッドまたは関数が同時に呼び出されるようなケースを許容する必要があります。 そのようなケースで、プロファイラーでは同じ FunctionID について複数の FunctionIDMapper コールバックを受信することがあります。 プロファイラーでは、同じ FunctionID を使用して複数回呼び出された場合に、必ずこのコールバックから同じ値が返されるようにする必要があります。

必要条件

:システム要件」を参照してください。

ヘッダー: CorProf.idl

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 1.0 以降で使用可能

関連項目