RtlInstallFunctionTableCallback 函数 (winnt.h)

将动态函数表添加到动态函数表列表。

语法

NTSYSAPI BOOLEAN RtlInstallFunctionTableCallback(
  [in] DWORD64                        TableIdentifier,
  [in] DWORD64                        BaseAddress,
  [in] DWORD                          Length,
  [in] PGET_RUNTIME_FUNCTION_CALLBACK Callback,
  [in] PVOID                          Context,
  [in] PCWSTR                         OutOfProcessCallbackDll
);

参数

[in] TableIdentifier

动态函数表回调的标识符。 必须设置两个低序位。 例如 ,BaseAddress|0x3。

[in] BaseAddress

回调函数管理的内存区域的基址。

[in] Length

回调函数管理的内存区域的大小(以字节为单位)。

[in] Callback

指向回调函数的指针,调用该函数以检索指定内存区域中函数的函数表条目。 有关 PGET_RUNTIME_FUNCTION_CALLBACK 类型的定义,请参阅 WinNT.h。

[in] Context

指向要传递给回调函数的用户定义数据的指针。

[in] OutOfProcessCallbackDll

指向字符串的可选指针,该字符串指定 DLL 的路径,该 DLL 提供进程外部的函数表条目。

当调试器展开到回调函数管理的地址范围内的函数时,它将加载此 DLL 并调用 OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME 函数,其类型为 POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK。 有关详细信息,请参阅 WinNT.h 中这些项的定义。

返回值

如果函数成功,则返回值为 TRUE。 如果函数失败,则返回值为 FALSE

注解

函数表在 64 位 Windows 上使用,以确定如何展开或遍查堆栈。 这些表通常由编译器生成,并存储为映像的一部分。 但是,应用程序必须为动态生成的代码提供函数表。 有关函数表的详细信息,请参阅系统的体系结构指南。

此函数适用于非常动态的代码。 应用程序指定生成的代码的内存范围,但在展开请求需要表之前,不需要生成表。 此时,系统使用 Context 和控件地址调用回调函数。 回调函数必须返回指定地址的运行时函数条目。 请务必避免在回调函数和代码生成器之间造成死锁。

对于从模板生成或在进程生命周期内仅生成一次的代码,请使用 RtlAddFunctionTable 函数。

要求

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

另请参阅

RtlAddFunctionTable

RtlDeleteFunctionTable