WdbgExts 拡張機能コールバックの使用
WdbgExts 拡張 DLL を作成すると、特定の関数をエクスポートできます。
WinDbgExtensionDllInit という名前の関数をエクスポートする必要があります。 デバッガーが拡張 DLL を読み込むとき、最初に WinDbgExtensionDllInit を呼び出し、3 つの引数を渡します。
- WINDBG_EXTENSION_APIS64 構造体へのポインター。これには、デバッガーによって実装され Wdbgexts.h で宣言された関数へのポインターが含まれます。 この構造体全体は、DLL 内に作成するグローバル変数にコピーする必要があります。
- メジャー バージョン番号。 メジャー バージョン番号は、DLL 内に作成するグローバル変数にコピーする必要があります。
- マイナー バージョン番号。 マイナー バージョン番号は、DLL 内に作成するグローバル変数にコピーする必要があります。
たとえば、次の例に示すように、ExtensionApis、SavedMajorVersion、SavedMinorVersion という名前のグローバル変数を作成できます。
WINDBG_EXTENSION_APIS64 ExtensionApis; USHORT SavedMajorVersion; USHORT SavedMinorVersion; VOID WinDbgExtensionDllInit(PWINDBG_EXTENSION_APIS64 lpExtensionApis, USHORT MajorVersion, USHORT MinorVersion) { ExtensionApis = *lpExtensionApis; SavedMajorVersion = MajorVersion; SavedMinorVersion = MinorVersion; ... }
ExtensionApiVersion という名前の関数をエクスポートする必要があります。 デバッガーはこの関数を呼び出し、拡張 DLL のバージョン番号を含む EXT_API_VERSION 構造体へのポインターを返します。 デバッガーは、拡張機能のバージョン番号を表示する .chain や version などのコマンドを実行するときに、このバージョン番号を使用します。
必要に応じて、CheckVersion という名前の関数をエクスポートすることもできます。 デバッガーは、拡張機能コマンドを使用するたびにこのルーチンを呼び出します。 DLL のバージョンがデバッガーのバージョンとわずかに異なるが、実行を妨げるほどではない場合、この機能を使用してバージョン不一致の警告を出力できます。