Обнаруживать, когда модуль (DLL) выгружен

Есть ли способ программно определить, когда модуль - в частности, DLL - был выгружен из процесса?

У меня нет источника DLL, поэтому я не могу Измени это' s Точка входа в DLL. Я также не могу опросить, загружена ли DLL в настоящее время, потому что DLL может быть выгружена, а затем перезагружена между опросами.

РЕЗУЛЬТАТЫ :

В итоге я использовал решение jimharks для обхода точки входа dll и перехвата DLL_PROCESS_DETACH. Я обнаружил, что обход FreeLibrary () также работает, но необходимо добавить код, чтобы определить, когда модуль фактически выгружен или просто уменьшается счетчик ссылок. Ссылка Necrolis о нахождении счетчика ссылок была удобна для этого метода.

Я должен отметить, что у меня были проблемы с MSDetours, которые фактически не выгружали модуль из памяти, если в нем существовал обходной путь.

11
задан jay.lee 28 November 2010 в 20:47
поделиться