Freigeben über


RtlVirtualUnwind-Funktion (winnt.h)

Ruft den Aufrufkontext der Funktion ab, die dem angegebenen Funktionskontext vorangestellt ist.

Hinweis

 Diese Funktion ist nicht auf allen Prozessorplattformen implementiert, und die Implementierung unterscheidet sich auf jeder Plattform, die sie unterstützt. Der folgende Prototyp listet alle potenziellen Parameter und deren Anwendung auf. Weitere Informationen zu prozessorspezifischen Funktionsprototypen.

Syntax

NTSYSAPI PEXCEPTION_ROUTINE RtlVirtualUnwind(
  [in]                DWORD                          HandlerType,
  [in]                DWORD64                        ImageBase,
  [in]                DWORD64                        ControlPc,
  [in]                PRUNTIME_FUNCTION              FunctionEntry,
  [in, out]           PCONTEXT                       ContextRecord,
  [out]               PVOID                          *HandlerData,
  [out]               PDWORD64                       EstablisherFrame,
  [in, out, optional] PKNONVOLATILE_CONTEXT_POINTERS ContextPointers
);

Parameter

[in] HandlerType

Der Handlertyp. Dieser Parameter kann einen der folgenden Werte annehmen.

Dieser Parameter ist nur in x64 vorhanden.

Wert Bedeutung
UNW_FLAG_NHANDLER
0x0
Die Funktion verfügt über keinen Handler.
UNW_FLAG_EHANDLER
0x1
Die Funktion verfügt über einen Ausnahmehandler, der aufgerufen werden sollte.
UNW_FLAG_UHANDLER
0x2
Die Funktion verfügt über einen Beendigungshandler, der beim Entladen einer Ausnahme aufgerufen werden sollte.
UNW_FLAG_CHAININFO
0x4
Das FunctionEntry-Element ist der Inhalt eines vorherigen Funktionstabelleneintrags.

[in] ImageBase

Die Basisadresse des Moduls, zu dem die Funktion gehört.

[in] ControlPc

Die virtuelle Adresse, an der das Steuerelement die angegebene Funktion verlassen hat.

[in] FunctionEntry

Die Adresse des Funktionstabelleneintrags für die angegebene Funktion. Rufen Sie zum Abrufen des Funktionstabelleneintrags die RtlLookupFunctionEntry-Funktion auf.

[in, out] ContextRecord

Ein Zeiger auf eine CONTEXT-Struktur , die den Kontext des vorherigen Frames darstellt.

[out] HandlerData

Der Speicherort des PCs. Wenn dieser Parameter 0 ist, befindet sich der PC im Prolog, Epilog oder in einem NULL-Framebereich der Funktion. Wenn dieser Parameter 1 ist, befindet sich der PC im Textkörper der Funktion.

Dieser Parameter ist in x64 nicht vorhanden.

[out] EstablisherFrame

Ein Zeiger auf eine FRAME_POINTERS-Struktur , die den Wert des Einrichtungsrahmenzeigers empfängt. Der echte Framezeiger wird nur definiert, wenn InFunction ist 1.

Dieser Parameter ist vom Typ PULONG64 auf x64.

[in, out, optional] ContextPointers

Ein optionaler Zeiger auf eine Kontextzeigerstruktur.

Rückgabewert

Diese Funktion gibt einen Zeiger auf eine EXCEPTION_ROUTINE Rückruffunktion zurück.

Hinweise

Die vollständige Liste der Epilogmarker für x64 lautet wie folgt:

  • Ret
  • ret n
  • rep ret
  • jmp imm8 | imm32 , wobei sich das Ziel außerhalb der zu lösenden Funktion befindet
  • jmp qword ptr imm32
  • rex.w jmp reg

Anforderungen

   
Zielplattform Windows
Kopfzeile winnt.h (windows.h einschließen)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

CONTEXT

EXCEPTION_RECORD

RtlLookupFunctionEntry

In VBS-Enclaves verfügbare Vertdll-APIs