Librerie di estensioni EngExtCpp

Una libreria di estensioni EngExtCpp è una DLL che usa il framework di estensione EngExtCpp disponibile in EngExtCpp.h. Quando questa libreria viene caricata dal motore del debugger, i relativi metodi e funzioni possono fornire funzionalità aggiuntive o automazione delle attività durante l'esecuzione di debug in modalità utente o in modalità kernel in Microsoft Windows.

Il framework di estensione EngExtCpp si basa sul framework di estensione DbgEng. Offre la stessa API del motore di debugger per l'interazione con il motore del debugger. ma offre anche funzionalità aggiuntive per semplificare le attività comuni.

Se è stata eseguita un'installazione completa di Strumenti di debug per Windows, un'estensione EngExtCpp di esempio denominata "extcpp" è disponibile nella sottodirectory sdk\samples\extcpp della directory di installazione.

EXT_CLASS e ExtExtension

Al centro di una libreria di estensioni EngExtCpp è una singola istanza della classe EXT_CLASS . Una libreria di estensioni EngExtCpp fornirà l'implementazione di questa classe, che contiene tutti i comandi di estensione e i metodi per la formattazione delle strutture esportate dalla libreria.

EXT_CLASS è una sottoclasse di ExtExtension. La singola istanza di questa classe viene creata utilizzando la macro EXT_DECLARE_GLOBALS che deve essere visualizzata esattamente una volta nei file di origine per la libreria di estensioni.

Quando viene caricata la libreria di estensioni, il metodo Initialize della classe viene chiamato dal motore e il metodo Uninitialize viene chiamato prima di scaricare la classe. Inoltre, i metodi OnSessionActive, OnSessionInactive, OnSessionAccessible e OnSessionInaccessible vengono chiamati dal motore per notificare alla libreria di estensioni lo stato della sessione di debug.

Comandi di estensione

La classe EXT_CLASS può contenere diversi metodi usati per eseguire i comandi di estensione. Ogni comando di estensione viene dichiarato nella classe EXT_CLASS usando la macro EXT_COMMAND_METHOD . L'implementazione di un comando viene definita utilizzando la macro EXT_COMMAND .

Strutture note

La classe EXT_CLASS può contenere diversi metodi che usano il prototipo ExtKnownStructMethod . I metodi possono essere utilizzati dal motore per formattare le istanze di determinati tipi di struttura per l'output.

Valori forniti

La classe EXT_CLASS può contenere diversi metodi che usano il prototipo ExtProvideValueMethod . I metodi possono essere usati dal motore per valutare alcuni pseudoregistri forniti dall'estensione.