Freigeben über


FunctionIDMapper-Funktion

Benachrichtigt den Profiler, dass der angegebene Bezeichner einer Funktion möglicherweise einer alternativen ID zugeordnet werden kann, die in den Rückrufen FunctionEnter2, FunctionLeave2 und FunctionTailcall2 für diese Funktion verwendet werden soll. Mit FunctionIDMapperkann der Profiler auch angeben, ob er Rückrufe für diese Funktion empfangen will.

Syntax

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

Parameter

funcId [in] Der Funktionsbezeichner, der neu zugeordnet werden soll.

pbHookFunction [out] Ein Zeiger auf einen Wert, den der Profiler auf true festlegt, wenn er die Rückrufe FunctionEnter2, FunctionLeave2 und FunctionTailcall2 empfangen möchte. Andernfalls wird dieser Wert auf false festgelegt.

Rückgabewert

Der Profiler gibt einen Wert zurück, den die Ausführungs-Engine als alternativen Funktionsbezeichner verwendet. Der Rückgabewert darf nicht NULL sein, es sei denn, in false wird pbHookFunction zurückgegeben. Andernfalls führt ein Rückgabewert von NULL zu unvorhersehbaren Ergebnissen, einschließlich des möglichen Anhaltens des Prozesses.

Bemerkungen

Die FunctionIDMapper-Funktion ist ein Rückruf. Es wird vom Profiler implementiert, um eine Funktions-ID einem anderen Bezeichner neu zuzuordnen, der für den Profiler nützlicher ist. Die FunctionIDMapper-Funktion gibt die alternative ID zurück, die für eine bestimmte Funktion verwendet werden soll. Die Ausführungs-Engine berücksichtigt dann die Anforderung des Profilers, indem sie diese alternative ID zusätzlich zur herkömmlichen Funktions-ID zurück an den Profiler im Parameter clientData der Hooks FunctionEnter2, FunctionLeave2 und FunctionTailcall2 übergibt, um die Funktion zu identifizieren, für die der Hook aufgerufen wird.

Sie können die Methode ICorProfilerInfo::SetFunctionIDMapper verwenden, um die Implementierung der FunctionIDMapper-Funktion festzulegen. Die ICorProfilerInfo::SetFunctionIDMapper-Methode kann nur einmal aufgerufen werden. Es empfiehlt sich, dies im Rückruf ICorProfilerCallback::Initialize zu tun.

Standardmäßig wird davon ausgegangen, dass ein Profiler, der das COR_PRF_MONITOR_ENTERLEAVE-Flag mithilfe von ICorProfilerInfo::SetEventMask festlegt und Hooks über ICorProfilerInfo::SetEnterLeaveFunctionHooks oder ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 festlegt, die Rückrufe FunctionEnter2, FunctionLeave2 und FunctionTailcall2 für jede Funktion erhält. Profiler können jedoch FunctionIDMapper implementieren, um den Empfang dieser Rückrufe für bestimmte Funktionen selektiv zu vermeiden, indem sie pbHookFunction auf false festlegen.

Profiler sollten in Fällen tolerant sein, in denen mehrere Threads einer profilierten Anwendung dieselbe Methode/Funktion gleichzeitig aufrufen. In solchen Fällen erhält der Profiler möglicherweise mehrere FunctionIDMapper-Rückrufe für dieselbe FunctionID-Funktion. Der Profiler sollte sicher sein, die gleichen Werte aus diesem Rückruf zurückzugeben, wenn er mehrmals mit derselben FunctionID-Funktion aufgerufen wird.

Anforderungen

Plattformen: Informationen finden Sie unter Systemanforderungen.

Header: CorProf.idl

Bibliothek: CorGuids.lib

.NET Framework-Versionen: Seit Version 1.0 verfügbar.

Siehe auch