使用 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 结构的指针。 调试器在执行显示扩展版本号的 .chain 和 version 等命令时使用此版本号。
可以选择导出名为 CheckVersion 的函数。 每次使用扩展命令时,调试器都会调用此例程。 如果 DLL 的版本与调试器略有不同,但差异不大,无法阻止其运行,则可以使用此来输出版本不匹配警告。