Share via


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.