Utilisation des rappels d’extension WdbgExts
Lorsque vous écrivez une DLL d’extension WdbgExts, vous pouvez exporter certaines fonctions :
Vous devez exporter une fonction nommée WinDbgExtensionDllInit. Lorsque le débogueur charge votre DLL d’extension, il appelle d’abord WinDbgExtensionDllInit et lui transmet trois arguments.
- Pointeur vers une structure WINDBG_EXTENSION_APIS64 , qui contient des pointeurs vers des fonctions implémentées par le débogueur et déclarées dans Wdbgexts.h. Vous devez copier l’ensemble de la structure dans une variable globale que vous créez dans votre DLL.
- Numéro de version majeure. Vous devez copier le numéro de version principale dans une variable globale que vous créez dans votre DLL.
- Numéro de version secondaire. Vous devez copier le numéro de version mineure dans une variable globale que vous créez dans votre DLL.
Par exemple, vous pouvez créer des variables globales nommées ExtensionApis, SavedMajorVersion et SavedMinorVersion, comme illustré dans l’exemple suivant.
WINDBG_EXTENSION_APIS64 ExtensionApis; USHORT SavedMajorVersion; USHORT SavedMinorVersion; VOID WinDbgExtensionDllInit(PWINDBG_EXTENSION_APIS64 lpExtensionApis, USHORT MajorVersion, USHORT MinorVersion) { ExtensionApis = *lpExtensionApis; SavedMajorVersion = MajorVersion; SavedMinorVersion = MinorVersion; ... }
Vous devez exporter une fonction appelée ExtensionApiVersion. Le débogueur appelle cette fonction et attend un pointeur vers une structure EXT_API_VERSION qui contient le numéro de version de la DLL d’extension. Le débogueur utilise ce numéro de version lors de l’exécution de commandes telles que .chain et version qui affichent le numéro de version de l’extension.
Vous pouvez éventuellement exporter une fonction appelée CheckVersion. Le débogueur appelle cette routine chaque fois que vous utilisez une commande d’extension. Vous pouvez l’utiliser pour imprimer des avertissements d’incompatibilité de version lorsque votre DLL est d’une version légèrement différente du débogueur, mais pas assez différente pour l’empêcher de s’exécuter.