Поделиться через


Функция 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 и вызывает функцию OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME, тип которой POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK. Дополнительные сведения см. в определениях этих элементов в WinNT.h.

Возвращаемое значение

Если функция выполнена успешно, возвращается значение TRUE. Если функция завершается сбоем, возвращается значение FALSE.

Комментарии

Таблицы функций используются в 64-разрядной версии Windows для определения способа очистки или обхода стека. Эти таблицы обычно создаются компилятором и хранятся как часть образа. Однако приложения должны предоставлять таблицу функций для динамически создаваемого кода. Дополнительные сведения о таблицах функций см. в руководстве по архитектуре системы.

Эта функция полезна для очень динамического кода. Приложение задает диапазон памяти для созданного кода, но ему не нужно создавать таблицу, пока она не потребуется для запроса очистки. В это время система вызывает функцию обратного вызова с контекстом и адресом элемента управления. Функция обратного вызова должна возвращать запись функции среды выполнения для указанного адреса. Не создавайте взаимоблокировку между функцией обратного вызова и генератором кода.

Для кода, созданного на основе шаблона или созданного только один раз в течение всего процесса, используйте функцию RtlAddFunctionTable .

Требования

Требование Значение
Целевая платформа Windows
Header winnt.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

RtlAddFunctionTable

RtlDeleteFunctionTable