Compartir a través de


Uso de devoluciones de llamada de extensión WdbgExts

Al escribir un archivo DLL de extensión WdbgExts, puede exportar determinadas funciones:

  • Debe exportar una función denominada WinDbgExtensionDllInit. Cuando el depurador carga el archivo DLL de extensión, primero llama a WinDbgExtensionDllInit y lo pasa tres argumentos.

    • Puntero a una estructura de WINDBG_EXTENSION_APIS64 , que contiene punteros a funciones implementadas por el depurador y declaradas en Wdbgexts.h. Debe copiar toda la estructura en una variable global que cree en el archivo DLL.
    • Número de versión principal. Debe copiar el número de versión principal en una variable global que cree en el archivo DLL.
    • Número de versión secundaria. Debe copiar el número de versión secundaria en una variable global que cree en el archivo DLL.

    Por ejemplo, podría crear variables globales denominadas ExtensionApis, SavedMajorVersion y SavedMinorVersion, como se muestra en el ejemplo siguiente.

    WINDBG_EXTENSION_APIS64 ExtensionApis;
    USHORT SavedMajorVersion;
    USHORT SavedMinorVersion;
    
    VOID WinDbgExtensionDllInit(PWINDBG_EXTENSION_APIS64 lpExtensionApis,
        USHORT MajorVersion, USHORT MinorVersion)
    {
       ExtensionApis = *lpExtensionApis;
       SavedMajorVersion = MajorVersion;
       SavedMinorVersion = MinorVersion;
        ...
    }
    
  • Debe exportar una función denominada ExtensionApiVersion. El depurador llama a esta función y espera un puntero a una estructura de EXT_API_VERSION que contiene el número de versión del archivo DLL de extensión. El depurador usa este número de versión al ejecutar comandos como .chain y versión que muestran el número de versión de la extensión.

  • Opcionalmente, puede exportar una función denominada CheckVersion. El depurador llama a esta rutina cada vez que se usa un comando de extensión. Puede usarlo para imprimir advertencias de discrepancia de versión cuando el archivo DLL es de una versión ligeramente diferente que el depurador, pero no lo suficientemente diferente para evitar que se ejecute.