Функция FunctionIDMapper
Уведомляет профилировщик о возможности повторного сопоставления данного идентификатора функции альтернативному ИД, который будет использоваться при обратных вызовах FunctionEnter2, FunctionLeave2 и FunctionTailcall2 для этой функции. FunctionIDMapper также позволяет профилировщику указать, хочет ли он получать обратные вызовы для этой функции.
UINT_PTR __stdcall FunctionIDMapper (
[in] FunctionID funcId,
[out] BOOL *pbHookFunction
);
Параметры
funcId
[in] Идентификатор функции для повторного сопоставления.pbHookFunction
[out] Указатель на величину, которой профилировщик присваивает значение true, если ему необходимо получить обратные вызовы FunctionEnter2, FunctionLeave2 и FunctionTailcall2; в противном случае он присваивает этой величине значение false.
Возвращаемое значение
Профилировщик возвращает значение, используемое ядром выполнения в качестве альтернативного идентификатора функции. Возвращаемое значение не может быть равным NULL, если в параметре pbHookFunction не возвращено значение false. В противном случае при возврате значения NULL будут получены непредсказуемые результаты, включая возможность прерывания процесса.
Заметки
Функция FunctionIDMapper является обратным вызовом. Она реализуется профилировщиком для повторного сопоставления идентификатора функции другому идентификатору, который лучше подходит для использования профилировщиком. Функция FunctionIDMapper возвращает альтернативный идентификатор, который будет использоваться для любой заданной функции. Затем ядро выполнения выполняет запрос профилировщика, передав этот альтернативный идентификатор в дополнение к традиционному Идентификатору функции назад профилировщику в параметре clientData обработчиков FunctionEnter2, FunctionLeave2 и FunctionTailcall2, обеспечивая идентификацию функции, для которой вызывается обработчик.
С помощью метода ICorProfilerInfo::SetFunctionIDMapper можно задать реализацию функции FunctionIDMapper. Метод ICorProfilerInfo::SetFunctionIDMapper можно вызвать только один раз, и вызывать его рекомендуется во время обратного вызова ICorProfilerCallback::Initialize.
По умолчанию предполагается, что профилировщик, задавший флаг COR_PRF_MONITOR_ENTERLEAVE с помощью метода ICorProfilerInfo::SetEventMask и установивший обработчик посредством метода ICorProfilerInfo::SetEnterLeaveFunctionHooks или ICorProfilerInfo2::SetEnterLeaveFunctionHooks2, должен получить обратные вызовы FunctionEnter2, FunctionLeave2 и FunctionTailcall2 для каждой функции. Однако профилировщики могут реализовать функцию FunctionIDMapper, чтобы выборочно избегать получения их обратных вызовов для определенных функций, задав для параметра pbHookFunction значение false.
Профилировщики должны допускать ситуации, в которых несколько потоков профилируемого приложения вызывают один и тот же метод или одну и ту же функцию одновременно. В таком случае профилировщик может получить множество обратных вызовов FunctionIDMapper для одного идентификатора FunctionID. Профилировщик должен в обязательном порядке возвращать одни и те же значения данного обратного вызова при его многократном выполнении с одним и тем же значением идентификатора FunctionID.
Требования
Платформы: см. раздел Требования к системе для .NET Framework.
Заголовок: CorProf.idl
Библиотека: CorGuids.lib
Версии платформы .NET Framework: 4, 3.5 с пакетом обновления 1 (SP1), 3.5, 3.0 с пакетом обновления 1 (SP1), 3.0, 2.0 с пакетом обновления 1 (SP1), 2.0, 1.1, 1.0
См. также
Ссылки
Метод ICorProfilerInfo::SetFunctionIDMapper