Re[4]: Детектив под названием «Залипание DLL-хуков». Я сдаюс
От: CEMb  
Дата: 22.09.09 10:51
Оценка: 1 (1)
Здравствуйте, Inversion, Вы писали:

I>> То есть если батник уже был запущен и стоял на ожидании, когда устанавливается глобальный хук, то хук к этому батнику не цепляется вообще.

CEM>>Какой именно хук? И как проводилось зацепление?
I>Глобальный типа WH_CALLWNDPROC, через SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)dllHookProc, g_hDLL, 0) из .exe

Ну да, выходит, функция обработки в паузе. (могу врать).

CEM>>Это надо спаем проверить, опять же, если получится

I>«спаем проверить» — это как?
Это ms spy++ или любое приложение, которое может отлавливать сообщения. Кстати да, если спай не заработает на консольном, то: 1. или нет сообщений, 2. или нельзя просто так хуком цепануться на консольное приложение.

I>SetTimer(NULL, t_watchForMainApp, 4000, (TIMERPROC)tf_watchForMainApp)

I>Вроде так и делал (ставил NULL вместо окна), иначе таймер и не хотел работать.
Ого. Вот это уже интереснее Т.е. даже такой таймер не работает? На вский случай спрошу, в курсе, что оконные и неоконные таймеры различаются по параметрам, возвращаемым значениям и принципу запуска при одной и той же сигнатуре SetTimer?

I>А я почитал, что они служат для того, чтобы позволять определённому хуку срабатывать или нет. Об управлении установкой хуков речи не нашел.

Ну я читал, что это хуки для отладки хуков.

I>Попробовал в DLL_PROCESS_ATTACH.

I>И FreeLibraryAndExitThread(hDllInst, 0) и FreeLibrary(hDllInst) завершают тот процесс, из которого вызываются Не подходит.
Хмм... не уверен, но если хэндл получить из GetModuleHandle ("<тут_имя_dll>"); ?
Т.е. я делал Free на хэндл, который получал сам, на не тот который в DllMain (hDllInst — это же про него речь?)

CEM>>Проблема в том, что хук опять повесится. Но тут надо поэкспериментировать. Если это будет не накладно, то можно так и оставить, чтобы он сам автоматически снимался.

I>Попробовал — накладно, то есть ощутимо (Пробовал на процессе Total Commander'a, так он постоянно продолжал пробовать подцепиться и при этом как-то подтормаживал)
Так Тотал Коммандер же не консольное окно. Там событий сыпется тысячи штук в секунду. Вся заточка на отцепление именно на _консольность_ с надеждой, что они меньше крутят функцию обработки окна.

... блин, где знающие люди, которые подскажут про консольное окно сюда нам?...

I>Тоже думал об таком… очень геморно

Так, а какая задача вообще стоит, если не секрет? А то может и не нужны хуки вовсе?

PS. Посмотрел spy++, он вообще отказывается включать перехват на консольных окнах!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.