Freigeben über


RtlRestoreContext-Funktion (winnt.h)

Stellt den Kontext des Aufrufers für den angegebenen Kontextdatensatz wieder her.

Syntax

NTSYSAPI VOID __cdecl RtlRestoreContext(
  PCONTEXT          ContextRecord,
  _EXCEPTION_RECORD *ExceptionRecord
);

Parameter

[in] ContextRecord

Ein Zeiger auf eine CONTEXT-Struktur .

[in] ExceptionRecord

Ein Zeiger auf eine EXCEPTION_RECORD-Struktur . Dieser Parameter ist optional und sollte in der Regel NULL sein.

Ein Ausnahmedatensatz wird in erster Linie mit Der Unterstützung von Weitsprung und C++-Catch-Throw verwendet. Wenn das ExceptionCode-Element STATUS_LONGJUMP ist, enthält das ExceptionInformation-Element einen Zeiger auf einen Sprungpuffer. RtlRestoreContext kopiert den nicht flüchtigen Zustand aus dem Sprungpuffer in den Kontextdatensatz, bevor der Kontextdatensatz wiederhergestellt wird.

Wenn das ExceptionCode-Element STATUS_UNWIND_CONSOLIDATE ist, enthält das ExceptionInformation-Element einen Zeiger auf eine Rückruffunktion, z. B. einen Catch-Handler. RtlRestoreContext konsolidiert die Aufrufframes zwischen seinem Frame und dem im Kontextdatensatz angegebenen Frame, bevor die Rückruffunktion aufgerufen wird. Dadurch werden Frames vor allen Ausnahmebehandlungen ausgeblendet, die in der Rückruffunktion auftreten können. Der Unterschied zwischen diesem und einer typischen Entladung besteht darin, dass die Daten auf dem Stapel noch vorhanden sind, sodass Framedaten wie ein Throwobjekt noch verfügbar sind. Die Rückruffunktion gibt einen neuen Programmzähler zurück, der im Kontextdatensatz aktualisiert werden soll, der dann in einem normalen Wiederherstellungskontext verwendet wird.

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Anforderungen

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

Siehe auch

CONTEXT

RtlCaptureContext