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


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

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