PSYMBOL_FUNCENTRY_CALLBACK64
コールバックシグネチャ
void* PSYMBOL_FUNCENTRY_CALLBACK64(
HANDLE hProcess,
ULONGLONG AddrBase,
ULONGLONG UserContext
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| hProcess | HANDLE | 元々 StackWalk64 関数に渡されたプロセスのハンドル。 |
| AddrBase | ULONGLONG | コールバック関数が関数テーブルエントリを返すべき命令のアドレス。 |
| UserContext | ULONGLONG | 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)