Поделиться через


Использование обратных вызовов расширения WdbgExts

При записи библиотеки DLL расширения WdbgExts можно экспортировать определенные функции:

  • Необходимо экспортировать функцию с именем 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. Отладчик вызывает эту функцию и ожидает, что она вернет указатель на структуру EXT_API_VERSION, содержащую номер версии библиотеки расширения DLL. Отладчик использует этот номер версии при выполнении таких команд, как цепочка и версия , отображающая номер версии расширения.

  • При необходимости можно экспортировать функцию с именем CheckVersion. Отладчик вызывает эту подпрограмму каждый раз, когда вы используете команду расширения. Это можно использовать для вывода предупреждений о несоответствии версий, если версия вашей библиотеки DLL немного отличается от версии вашего отладчика, но недостаточно, чтобы помешать его выполнению.