次の方法で共有


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 構造体へのポインターを返します。 デバッガーは、拡張機能のバージョン番号を表示する .chainversion などのコマンドを実行するときに、このバージョン番号を使用します。

  • 必要に応じて、CheckVersion という名前の関数をエクスポートすることもできます。 デバッガーは、拡張機能コマンドを使用するたびにこのルーチンを呼び出します。 DLL のバージョンがデバッガーのバージョンとわずかに異なるが、実行を妨げるほどではない場合、この機能を使用してバージョン不一致の警告を出力できます。