Função RtlVirtualUnwind (winnt.h)

Recupera o contexto de invocação da função que precede o contexto de função especificado.

Observação

 Essa função não é implementada em todas as plataformas de processador e a implementação é diferente em cada plataforma que dá suporte a ela. O protótipo a seguir lista todos os parâmetros potenciais e seu aplicativo. Leia mais sobre protótipos de função específicos do processador.

Sintaxe

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

O tipo de manipulador. Esse parâmetro pode usar um dos valores a seguir.

Esse parâmetro só está presente no x64.

Valor Significado
UNW_FLAG_NHANDLER
0x0
A função não tem nenhum manipulador.
UNW_FLAG_EHANDLER
0x1
A função tem um manipulador de exceção que deve ser chamado.
UNW_FLAG_UHANDLER
0x2
A função tem um manipulador de terminação que deve ser chamado ao desenrolar uma exceção.
UNW_FLAG_CHAININFO
0x4
O membro FunctionEntry é o conteúdo de uma entrada de tabela de funções anterior.

[in] ImageBase

O endereço base do módulo ao qual a função pertence.

[in] ControlPc

O endereço virtual em que o controle deixou a função especificada.

[in] FunctionEntry

O endereço da entrada da tabela de funções para a função especificada. Para obter a entrada da tabela de funções, chame a função RtlLookupFunctionEntry .

[in, out] ContextRecord

Um ponteiro para uma estrutura CONTEXT que representa o contexto do quadro anterior.

[out] HandlerData

O local do computador. Se esse parâmetro for 0, o computador estará no prólogo, epílogo ou uma região de quadro nulo da função. Se esse parâmetro for 1, o computador estará no corpo da função.

Esse parâmetro não está presente no x64.

[out] EstablisherFrame

Um ponteiro para uma estrutura FRAME_POINTERS que recebe o valor do ponteiro de quadro do estabelecidor. O ponteiro de quadro real será definido somente se InFunction for 1.

Esse parâmetro é do tipo PULONG64 em x64.

[in, out, optional] ContextPointers

Um ponteiro opcional para uma estrutura de ponteiros de contexto.

Retornar valor

Essa função retorna um ponteiro para uma função de retorno de chamada EXCEPTION_ROUTINE .

Comentários

A lista completa de marcadores de epílogo para x64 é a seguinte:

  • Ret
  • ret n
  • rep ret
  • jmp imm8 | imm32 em que o destino está fora da função sendo desenrolada
  • jmp qword ptr imm32
  • rex.w jmp reg

Requisitos

   
Plataforma de Destino Windows
Cabeçalho winnt.h (inclua Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

CONTEXTO

EXCEPTION_RECORD

RtlLookupFunctionEntry

APIs Vertdll disponíveis em enclaves de VBS