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