Uso dei callback dell'estensione WdbgExts
Quando si scrive una DLL di estensione WdbgExts, è possibile esportare determinate funzioni:
È necessario esportare una funzione denominata WinDbgExtensionDllInit. Quando il debugger carica la DLL dell'estensione, chiama prima WinDbgExtensionDllInit e lo passa tre argomenti.
- Puntatore a una struttura WINDBG_EXTENSION_APIS64 , che contiene puntatori a funzioni implementate dal debugger e dichiarate in Wdbgexts.h. È necessario copiare l'intera struttura in una variabile globale creata nella DLL.
- Numero di versione principale. È necessario copiare il numero di versione principale in una variabile globale creata nella DLL.
- Numero di versione secondaria. È necessario copiare il numero di versione secondaria in una variabile globale creata nella DLL.
Ad esempio, è possibile creare variabili globali denominate ExtensionApis, SavedMajorVersion e SavedMinorVersion, come illustrato nell'esempio seguente.
WINDBG_EXTENSION_APIS64 ExtensionApis; USHORT SavedMajorVersion; USHORT SavedMinorVersion; VOID WinDbgExtensionDllInit(PWINDBG_EXTENSION_APIS64 lpExtensionApis, USHORT MajorVersion, USHORT MinorVersion) { ExtensionApis = *lpExtensionApis; SavedMajorVersion = MajorVersion; SavedMinorVersion = MinorVersion; ... }
È necessario esportare una funzione denominata ExtensionApiVersion. Il debugger chiama questa funzione e prevede di ripristinare un puntatore a una struttura EXT_API_VERSION che contiene il numero di versione della DLL di estensione. Il debugger usa questo numero di versione durante l'esecuzione di comandi come .chain e versione che visualizzano il numero di versione dell'estensione.
Facoltativamente, è possibile esportare una funzione denominata CheckVersion. Il debugger chiama questa routine ogni volta che si usa un comando di estensione. È possibile usare questa opzione per stampare avvisi di mancata corrispondenza della versione quando la DLL è di una versione leggermente diversa rispetto al debugger, ma non abbastanza diversa per impedire l'esecuzione.