使用 WdbgExts 扩展回调

编写 WdbgExts 扩展 DLL 时,可以导出某些函数:

  • 必须导出名为 WinDbgExtensionDllInit 的函数。 当调试器加载扩展 DLL 时,它首先调用 WinDbgExtensionDllInit 并传递三个参数。

    • 指向 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 的版本与调试器略有不同,但差异不大,无法阻止其运行,则可以使用此来输出版本不匹配警告。