RtlVirtualUnwind 函数 (winnt.h)

检索指定函数上下文之前的函数的调用上下文。

注意

 此函数并非在所有处理器平台上实现,并且每个支持它的平台上的实现都不同。 以下原型列出了所有可能的参数及其应用程序。 进一步阅读特定于处理器的函数原型。

语法

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

参数

[in] HandlerType

处理程序类型。 此参数的取值可为下列值之一:

此参数仅在 x64 上存在。

含义
UNW_FLAG_NHANDLER
0x0
函数没有处理程序。
UNW_FLAG_EHANDLER
0x1
函数具有应调用的异常处理程序。
UNW_FLAG_UHANDLER
0x2
函数具有一个终止处理程序,应在展开异常时调用该处理程序。
UNW_FLAG_CHAININFO
0x4
FunctionEntry 成员是上一个函数表条目的内容。

[in] ImageBase

函数所属模块的基址。

[in] ControlPc

控件离开指定函数的虚拟地址。

[in] FunctionEntry

指定函数的函数表条目的地址。 若要获取函数表条目,请调用 RtlLookupFunctionEntry 函数。

[in, out] ContextRecord

指向表示上一帧上下文的 CONTEXT 结构的指针。

[out] HandlerData

电脑的位置。 如果此参数为 0,则电脑位于函数的序言、尾声或空帧区域中。 如果此参数为 1,则电脑位于函数主体中。

x64 上不存在此参数。

[out] EstablisherFrame

指向接收建立器帧指针值的 FRAME_POINTERS 结构的指针。 仅当 InFunction1时,才会定义实际帧指针。

在 x64 上,此参数的类型 PULONG64

[in, out, optional] ContextPointers

指向上下文指针结构的可选指针。

返回值

此函数返回指向EXCEPTION_ROUTINE回调函数 指针。

注解

x64 尾声标记的完整列表如下所示:

  • Ret
  • ret n
  • rep ret
  • jmp imm8 | imm32 ,其中目标位于正在解开的函数之外
  • jmp qword ptr imm32
  • rex.w jmp reg

要求

   
目标平台 Windows
标头 winnt.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

CONTEXT

EXCEPTION_RECORD

RtlLookupFunctionEntry

VBS enclave 中可用的 Vertdll API