Der sprachspezifische Handler

Aktualisiert: November 2007

Die relative Adresse des sprachspezifischen Handlers ist in UNWIND_INFO vorhanden, wenn die Flags UNW_FLAG_EHANDLER oder UNW_FLAG_UHANDLER festgelegt sind. Wie im vorherigen Abschnitt beschrieben, wird der sprachspezifische Handler als Teil der Suche nach einem Ausnahmehandler oder als Teil eines Entladevorgangs aufgerufen. Er besitzt folgenden Prototyp:

typedef EXCEPTION_DISPOSITION (*PEXCEPTION_ROUTINE) (
    IN PEXCEPTION_RECORD ExceptionRecord,
    IN ULONG64 EstablisherFrame,
    IN OUT PCONTEXT ContextRecord,
    IN OUT PDISPATCHER_CONTEXT DispatcherContext
);

ExceptionRecord gibt einen Zeiger auf einen Ausnahmedatensatz an, der die Standard-Win64-Definition aufweist.

EstablisherFrame ist die Adresse der Basis der festen Stapelzuweisung für diese Funktion.

ContextRecord verweist auf den Ausnahmekontext zur Zeit der Auslösung der Ausnahme (im Fall eines Ausnahmehandlers) oder auf den aktuellen Entladekontext (im Fall eines Beendigungshandlers).

DispatcherContext verweist auf den Verteilerkontext für diese Funktion. Er hat folgende Definition:

typedef struct _DISPATCHER_CONTEXT {
    ULONG64 ControlPc;
    ULONG64 ImageBase;
    PRUNTIME_FUNCTION FunctionEntry;
    ULONG64 EstablisherFrame;
    ULONG64 TargetIp;
    PCONTEXT ContextRecord;
    PEXCEPTION_ROUTINE LanguageHandler;
    PVOID HandlerData;
} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;

ControlPc ist der Wert des RIP innerhalb dieser Funktion. Dabei handelt es sich entweder um eine Ausnahmeadresse oder die Adresse, an der die Funktion verlassen wurde. Dieser RIP dient zur Feststellung, ob sich die Steuerung innerhalb eines überwachten Konstrukts in dieser Funktion befindet (z. B. __try-Block für __try/__except oder __try/__finally).

ImageBase ist die Anwendungsbasis (Ladeadresse) des Moduls, das diese Funktion enthält. Sie wird den 32-Bit-Offsets im Funktionseintrag und in den Entladeinformationen hinzugefügt, um relative Adressen aufzuzeichnen.

FunctionEntry enthält einen Zeiger auf den RUNTIME_FUNCTION-Funktionseintrag, der die auf die Anwendungsbasis bezogenen relativen Adressen der Funktion und der Entladeinformationen für diese Funktion enthält.

EstablisherFrame ist die Adresse der Basis der festen Stapelzuweisung für diese Funktion.

TargetIp enthält eine optionale Anweisungsadresse, die die Fortsetzungsadresse des Entladevorgangs angibt. Diese Adresse wird ignoriert, wenn EstablisherFrame nicht angegeben ist.

ContextRecord verweist auf den Ausnahmekontext, zur Verwendung durch den Systemausnahmeauslösungs-/Entladecode.

LanguageHandler verweist auf die sprachspezifische Sprachhandlerroutine, die aufgerufen wird.

HandlerData verweist auf die sprachspezifischen Handlerdaten für diese Funktion.

Siehe auch

Referenz

Ausnahmebehandlung (x64)