次の方法で共有


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

動的関数テーブル コールバックの識別子。 2 つの下位ビットを設定する必要があります。 たとえば、 BaseAddress|0x3。

[in] BaseAddress

コールバック関数によって管理されるメモリ領域のベース アドレス。

[in] Length

コールバック関数によって管理されるメモリ領域のサイズ (バイト単位)。

[in] Callback

指定したメモリ領域の関数の関数テーブル エントリを取得するために呼び出されるコールバック関数へのポインター。 PGET_RUNTIME_FUNCTION_CALLBACK型の定義については、「WinNT.h」を参照してください。

[in] Context

コールバック関数に渡されるユーザー定義データへのポインター。

[in] OutOfProcessCallbackDll

プロセスの外部にある関数テーブル エントリを提供する DLL のパスを指定する文字列への省略可能なポインター。

デバッガーは、コールバック関数によって管理されるアドレスの範囲内の関数にアンワインドすると、この DLL を読み込み、型がPOUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME関数を呼び出します。 詳細については、WinNT.h のこれらの項目の定義を参照してください。

戻り値

関数が成功した場合、戻り値は TRUE になります。 関数が失敗した場合、戻り値は FALSE になります

注釈

関数テーブルは、スタックをアンワインドまたはウォークする方法を決定するために、64 ビット Windows で使用されます。 これらのテーブルは通常、コンパイラによって生成され、イメージの一部として格納されます。 ただし、アプリケーションでは、動的に生成されたコードの関数テーブルを提供する必要があります。 関数テーブルの詳細については、システムのアーキテクチャ ガイドを参照してください。

この関数は、非常に動的なコードに役立ちます。 アプリケーションは、生成されたコードのメモリ範囲を指定しますが、アンワインド要求で必要になるまでテーブルを生成する必要はありません。 その時点で、システムは Context とコントロール アドレスを使用してコールバック関数を呼び出します。 コールバック関数は、指定されたアドレスのランタイム関数エントリを返す必要があります。 コールバック関数とコード ジェネレーターの間にデッドロックが発生しないようにしてください。

テンプレートから生成されるコード、またはプロセスの有効期間中に 1 回だけ生成されるコードの場合は、 RtlAddFunctionTable 関数を使用します。

要件

要件
対象プラットフォーム Windows
ヘッダー winnt.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

RtlAddFunctionTable

RtlDeleteFunctionTable