Función RtlVirtualUnwind (winnt.h)

Recupera el contexto de invocación de la función que precede al contexto de función especificado.

Nota

 Esta función no se implementa en todas las plataformas de procesador y la implementación es diferente en cada plataforma que la admita. En el siguiente prototipo se enumeran todos los parámetros potenciales y su aplicación. Lea más información sobre los prototipos de función específicos del procesador.

Sintaxis

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
);

Parámetros

[in] HandlerType

Tipo de controlador. Este parámetro puede ser uno de los valores siguientes.

Este parámetro solo está presente en x64.

Valor Significado
UNW_FLAG_NHANDLER
0x0
La función no tiene ningún controlador.
UNW_FLAG_EHANDLER
0x1
La función tiene un controlador de excepciones al que se debe llamar.
UNW_FLAG_UHANDLER
0x2
La función tiene un controlador de finalización que se debe llamar al desenredar una excepción.
UNW_FLAG_CHAININFO
0x4
El miembro FunctionEntry es el contenido de una entrada de tabla de función anterior.

[in] ImageBase

Dirección base del módulo al que pertenece la función.

[in] ControlPc

Dirección virtual donde el control dejó la función especificada.

[in] FunctionEntry

Dirección de la entrada de la tabla de funciones para la función especificada. Para obtener la entrada de la tabla de funciones, llame a la función RtlLookupFunctionEntry .

[in, out] ContextRecord

Puntero a una estructura CONTEXT que representa el contexto del marco anterior.

[out] HandlerData

Ubicación del equipo. Si este parámetro es 0, el equipo se encuentra en el prólogo, el epílogo o una región de marco null de la función. Si este parámetro es 1, el equipo se encuentra en el cuerpo de la función.

Este parámetro no está presente en x64.

[out] EstablisherFrame

Puntero a una estructura FRAME_POINTERS que recibe el valor del puntero del marco de establecimiento. El puntero de marco real solo se define si InFunction es 1.

Este parámetro es de tipo PULONG64 en x64.

[in, out, optional] ContextPointers

Puntero opcional a una estructura de punteros de contexto.

Valor devuelto

Esta función devuelve un puntero a una función de devolución de llamada EXCEPTION_ROUTINE.

Comentarios

La lista completa de marcadores de epílogo para x64 es la siguiente:

  • Ret
  • ret n
  • rep ret
  • jmp imm8 | imm32 donde el destino está fuera de la función que se desenlazado
  • jmp qword ptr imm32
  • rex.w jmp reg

Requisitos

   
Plataforma de destino Windows
Encabezado winnt.h (incluya Windows.h)
Library Kernel32.lib
Archivo DLL Kernel32.dll

Vea también

CONTEXT

EXCEPTION_RECORD

RtlLookupFunctionEntry

API de Vertdll disponibles en enclaves de VBS