PSYMBOL_FUNCENTRY_CALLBACK
コールバックシグネチャ
void* PSYMBOL_FUNCENTRY_CALLBACK(
HANDLE hProcess,
DWORD AddrBase,
void* UserContext
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| hProcess | HANDLE | 元々 StackWalk64 関数に渡されたプロセスのハンドルです。 |
| AddrBase | DWORD | コールバック関数が関数テーブルエントリを返す対象となる命令のアドレスです。 |
| UserContext | void* | SymRegisterFunctionEntryCallback64 で指定されたユーザー定義の値、または NULL です。通常このパラメーターは、コールバック関数が何らかのコンテキストを確立できるようにするデータ構造へのポインターを、アプリケーションが渡すために使用します。 |
公式ドキュメント
SymRegisterFunctionEntryCallback64 関数とともに使用されるアプリケーション定義のコールバック関数です。この関数は、スタックウォーク処理から呼び出されます。
PSYMBOL_FUNCENTRY_CALLBACK64 型は、このコールバック関数へのポインターを定義します。 SymRegisterFunctionEntryCallbackProc64 は、アプリケーション定義の関数名を表すプレースホルダーです。
戻り値
使用できる関数テーブルエントリがない場合は、値 NULL を返してください。
成功した場合は、IMAGE_RUNTIME_FUNCTION_ENTRY 構造体へのポインターを返してください。この構造体の定義については、ヘッダーファイル WinNT.h を参照してください。
解説(Remarks)
構造体は、デバッグ対象のプロセス内に存在するのとまったく同じ形式で返す必要があります。一部のメンバーは、プロセスのアドレス空間内の別の場所を指すポインターである場合があります。これらの場所にある情報を取得するために、 ReadProcessMemoryProc64 コールバック関数が呼び出されることがあります。
呼び出し元のアプリケーションは、 StackWalk64 関数の呼び出しの結果として、登録されたコールバック関数を通じて呼び出されます。呼び出し元のアプリケーションは、これによって生じ得る副作用に備えておく必要があります。アプリケーションが 1 つのコールバック関数だけを複数のスレッドで使用している場合は、コールバック関数のコンテキスト内で一部の種類のデータアクセスを同期する必要が生じることがあります。
この関数は FunctionTableAccessProc64 コールバック関数に似ています。違いは、 FunctionTableAccessProc64 が IMAGE_FUNCTION_ENTRY 構造体を返すのに対し、この関数は IMAGE_RUNTIME_FUNCTION_ENTRY 構造体を返す点です。
このコールバック関数は、PSYMBOL_FUNCENTRY_CALLBACK コールバック関数に代わるものです。 PSYMBOL_FUNCENTRY_CALLBACK は、Dbghelp.h で次のように定義されています。
#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64
#endif
typedef
PVOID
(CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(
__in HANDLE hProcess,
__in DWORD AddrBase,
__in_opt PVOID UserContext
);
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)