Re[3]: запуск таймера из хуковой процедуры
От: Dr_Sh0ck Беларусь  
Дата: 21.03.02 04:32
Оценка: +1
Здравствуйте Tagus, Вы писали:

T>Здравствуйте SergH, Вы писали:


SH>>Я думаю, проблема в том, что происходит попытка вызвать TimerProc, когда DLL уже выгружена. Почему не помогает KillTimer не знаю. Можно поместить TimerProc в другую dll, загружать её при загрузке в новый процесс, а потом не выгружать.


T>Вряд-ли. DLL не выгружается вызовом UnhookWindowsHookEx.

T>Для выгрузки DLL нужно вызвать FreeLibrary, чего не делается.
T>Кроме того, в случае глобального хука, который имеет место
T>быть, DLL не выгрузится даже после FreeLibrary, поскольку
T>глобальный хук привязывается ко всем запущенным в системе
T>процессам, соответственно, DLL должна висеть в памяти
T>пока все процессы не завершатся.

Дело в том, что ты ведь явно ДЛЛ не загружаешь by LoadLibrary. Как только ты ставишь хук (в частности на события от мыши), и когда такое событие происходит, система проверяет, не установлен ли хук. Если установлен, то далее система проверяет, находится ли ДЛЛ с нужной хуковой процедурой в памяти — если да, то она просто отображается на адресное пространство соответствующего процесса, если нет, то ДЛЛ в память загружается и затем отображается. Затем происходит вызов хуковой процедуры. Когда система определит, что хуков нет (UnhookWindowsHookEx), то никакого смысла держать в памяти ДЛЛ с хуковой процедурой нет и она (ДЛЛ) будет выгружена.
Do not fake yourself ;)
ICQ#: 198114726
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.