Freigeben über


Verwenden von WdbgExts-Erweiterungsrückrufen

Wenn Sie eine WdbgExts-Erweiterungs-DLL schreiben, können Sie bestimmte Funktionen exportieren:

  • Sie müssen eine Funktion mit dem Namen WinDbgExtensionDllInit exportieren. Wenn der Debugger Ihre Erweiterungs-DLL lädt, ruft er zuerst WinDbgExtensionDllInit auf und übergibt drei Argumente.

    • Ein Zeiger auf eine WINDBG_EXTENSION_APIS64-Struktur , die Zeiger auf Funktionen enthält, die vom Debugger implementiert und in Wdbgexts.h deklariert werden. Sie müssen die gesamte Struktur in eine globale Variable kopieren, die Sie in Ihrer DLL erstellen.
    • Eine Hauptversionsnummer. Sie müssen die Hauptversionsnummer in eine globale Variable kopieren, die Sie in Ihrer DLL erstellen.
    • Eine Nebenversionsnummer. Sie müssen die Nebenversionsnummer in eine globale Variable kopieren, die Sie in Ihrer DLL erstellen.

    Sie können beispielsweise globale Variablen mit den Namen ExtensionApis, SavedMajorVersion und SavedMinorVersion erstellen, wie im folgenden Beispiel gezeigt.

    WINDBG_EXTENSION_APIS64 ExtensionApis;
    USHORT SavedMajorVersion;
    USHORT SavedMinorVersion;
    
    VOID WinDbgExtensionDllInit(PWINDBG_EXTENSION_APIS64 lpExtensionApis,
        USHORT MajorVersion, USHORT MinorVersion)
    {
       ExtensionApis = *lpExtensionApis;
       SavedMajorVersion = MajorVersion;
       SavedMinorVersion = MinorVersion;
        ...
    }
    
  • Sie müssen eine Funktion namens ExtensionApiVersion exportieren. Der Debugger ruft diese Funktion auf und erwartet einen Zeiger auf eine EXT_API_VERSION-Struktur , die die Versionsnummer der Erweiterungs-DLL enthält. Der Debugger verwendet diese Versionsnummer, wenn Befehle wie .chain und version ausgeführt werden, die die Versionsnummer der Erweiterung anzeigen.

  • Optional können Sie eine Funktion namens CheckVersion exportieren. Der Debugger ruft diese Routine bei jeder Verwendung eines Erweiterungsbefehls auf. Sie können dies verwenden, um Versionskonfliktwarnungen auszudrucken, wenn Ihre DLL eine etwas andere Version als der Debugger aufweist, aber nicht ausreichend anders ist, um die Ausführung zu verhindern.