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。
返回值
探查器返回一个值,执行引擎使用该值作为备选函数标识符。 返回值不能为 null,除非 pbHookFunction 中返回了 false。 否则,Null 返回值将产生不可预知的结果,包括可能会使进程停止这样的结果。
备注
FunctionIDMapper 函数为回调。 它由探查器实现,用以将函数 ID 重新映射到对于探查器更有用的某个其他标识符。 FunctionIDMapper 返回要用于任何给定函数的备选 ID。 然后,执行引擎将考虑探查器的请求,方法是将此备选 ID 以及传统的函数 ID 在 FunctionEnter2、FunctionLeave2 和 FunctionTailcall2 挂钩的 clientData 参数中传递回探查器,用以确定为正在其调用挂钩的函数。
您可以使用 ICorProfilerInfo::SetFunctionIDMapper 方法指定 FunctionIDMapper 函数的实现。 您只能调用 ICorProfilerInfo::SetFunctionIDMapper 方法一次,并且,建议您在 ICorProfilerCallback::Initialize 回调中调用该方法。
默认情况下,假定通过使用 ICorProfilerInfo::SetEventMask 设置 COR_PRF_MONITOR_ENTERLEAVE 标志并且通过 ICorProfilerInfo::SetEnterLeaveFunctionHooks 或 ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 设置挂钩的探查器应为每个函数接收 FunctionEnter2、FunctionLeave2 和 FunctionTailcall2 回调。 但是,探查器可以实现 FunctionIDMapper,通过将 pbHookFunction 设置为 false 来有选择地避免为某些函数接收这些回调。
探查器应容许所分析的应用程序的多个线程同时调用同一个方法/函数的情况。 在这些情况下,探查器可能会为同一 FunctionID 接收多个 FunctionIDMapper 回调。 在使用同一 FunctionID 多次调用时,探查器应确保从此回调中返回相同的值。
要求
**平台:**请参见 .NET Framework 系统要求。
**头文件:**CorProf.idl
**库:**CorGuids.lib
**.NET Framework 版本:**4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1、1.0
请参见
参考
ICorProfilerInfo::SetFunctionIDMapper 方法