Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Уведомляет профилировщика о том, что указанный идентификатор функции может быть переназначен с альтернативным идентификатором для использования в обратных вызовах 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.