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 |