Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Уведомляет профилировщика о том, что указанный идентификатор функции может быть переназначен с альтернативным идентификатором для использования в обратных вызовах 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 , чтобы определить функцию, для которой вызывается перехватчик.
Для указания реализации FunctionIDMapper функции можно использовать метод ICorProfilerInfo::SetFunctionIDMapper. Метод можно вызвать ICorProfilerInfo::SetFunctionIDMapper только один раз, и мы рекомендуем сделать это в обратном вызове ICorProfilerCallback::Initialize .
По умолчанию предполагается, что профилировщик, который задает флаг COR_PRF_MONITOR_ENTERLEAVE с помощью ICorProfilerInfo::SetEventMask и устанавливает перехватчики через ICorProfilerInfo::SetEnterLeaveFunctionHooks или ICorProfilerInfo2::SetEnterLeaveFunctionHooks2, должен получать FunctionEnter2обратные вызовы , FunctionLeave2и FunctionTailcall2 для каждой функции. Однако профилировщики могут реализовать FunctionIDMapper , чтобы выборочно избежать получения этих обратных вызовов для определенных функций, задав для значение pbHookFunctionfalse.
Профилировщики должны быть терпимыми к случаям, когда несколько потоков профилированного приложения одновременно вызывает один и тот же метод или функцию. В таких случаях профилировщик может получать несколько обратных FunctionIDMapper вызовов для одного и того же FunctionID. Профилировщик должен с уверенностью возвращать одни и те же значения из этого обратного вызова, если он вызывается несколько раз с одинаковым FunctionID.
Требования
Платформы: см. раздел Требования к системе.
Заголовка: CorProf.idl
Библиотека: CorGuids.lib
версии платформа .NET Framework: доступно с версии 1.0.