Функция 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 |