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 上存在。
值 | 含义 |
---|---|
|
函数没有处理程序。 |
|
函数具有应调用的异常处理程序。 |
|
函数具有一个终止处理程序,应在展开异常时调用该处理程序。 |
|
FunctionEntry 成员是上一个函数表条目的内容。 |
[in] ImageBase
函数所属模块的基址。
[in] ControlPc
控件离开指定函数的虚拟地址。
[in] FunctionEntry
指定函数的函数表条目的地址。 若要获取函数表条目,请调用 RtlLookupFunctionEntry 函数。
[in, out] ContextRecord
指向表示上一帧上下文的 CONTEXT 结构的指针。
[out] HandlerData
电脑的位置。 如果此参数为 0,则电脑位于函数的序言、尾声或空帧区域中。 如果此参数为 1,则电脑位于函数主体中。
x64 上不存在此参数。
[out] EstablisherFrame
指向接收建立器帧指针值的 FRAME_POINTERS 结构的指针。 仅当 InFunction 为 1
时,才会定义实际帧指针。
在 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 |