Is there a difference between TerminateExtension() and the extensions destructor? Obviously both are used to cleanup resources but what kind of cleanup should be in one function and not the other?
The TerminateExtension
function takes a DWORD dwFlags. If this is HSE_TERM_ADVISORY_UNLOAD, you can return FALSE or TRUE to either allow or block the unloading from happening.
There's no such option in your class's destructor of course.