Usando retornos de chamada de extensão WdbgExts
Ao escrever uma DLL de extensão WdbgExts, você pode exportar determinadas funções:
Você deve exportar uma função chamada WinDbgExtensionDllInit. Quando o depurador carrega sua DLL de extensão, ele primeiro chama WinDbgExtensionDllInit e passa três argumentos.
- Um ponteiro para uma estrutura WINDBG_EXTENSION_APIS64 , que contém ponteiros para funções implementadas pelo depurador e declaradas em Wdbgexts.h. Você deve copiar toda a estrutura para uma variável global que você cria em sua DLL.
- Um número de versão principal. Você deve copiar o número de versão principal para uma variável global criada em sua DLL.
- Um número de versão secundária. Você deve copiar o número de versão secundária para uma variável global criada em sua DLL.
Por exemplo, você pode criar variáveis globais chamadas ExtensionApis, SavedMajorVersion e SavedMinorVersion, conforme mostrado no exemplo a seguir.
WINDBG_EXTENSION_APIS64 ExtensionApis; USHORT SavedMajorVersion; USHORT SavedMinorVersion; VOID WinDbgExtensionDllInit(PWINDBG_EXTENSION_APIS64 lpExtensionApis, USHORT MajorVersion, USHORT MinorVersion) { ExtensionApis = *lpExtensionApis; SavedMajorVersion = MajorVersion; SavedMinorVersion = MinorVersion; ... }
Você deve exportar uma função chamada ExtensionApiVersion. O depurador chama essa função e espera de volta um ponteiro para uma estrutura EXT_API_VERSION que contém o número de versão da DLL de extensão. O depurador usa esse número de versão ao executar comandos como .chain e versão que exibem o número da versão da extensão.
Opcionalmente, você pode exportar uma função chamada CheckVersion. O depurador chama essa rotina sempre que você usa um comando de extensão. Você pode usar isso para imprimir avisos de incompatibilidade de versão quando sua DLL é de uma versão ligeiramente diferente do depurador, mas não é diferente o suficiente para impedir que ela seja executada.