Столкнулся со следующей проблемой и не могу пока решить.
В своей программе, я использую две dll с хуками (внутри себя они вызывают WIN API — SetWindowsHookEx). По отдельности они подгружаются и работают хорошо, а когда запускаешь сначала один dll с hook, а потом другую dll с hook, нормально работать перестают.
На сколько я понимаю, последняя dll с hook становится поверх предыдущей и не даёт ей нормально работать.
Вопрос в том как мне тогда корректно обрабатывать данные от двух загруженных библиотек с hook-ами. Как их загружать и выгружать что бы они не мешали друг другу.
dll написаны правильно и вопросов не вызывают всё по теории. А вот совместная работа таких dll уже не получается.
Если кто-то что-то подобное делал напишите, пожалуйста.
Здравствуйте, c0deC, Вы писали:
C>Доброго времени суток!
C>Столкнулся со следующей проблемой и не могу пока решить.
C>В своей программе, я использую две dll с хуками (внутри себя они вызывают WIN API — SetWindowsHookEx). По отдельности они подгружаются и работают хорошо, а когда запускаешь сначала один dll с hook, а потом другую dll с hook, нормально работать перестают. C>На сколько я понимаю, последняя dll с hook становится поверх предыдущей и не даёт ей нормально работать.
Понтятие "поверх предыдущей" к DLL неприменимо. А вот к хукам — очень даже. Хуки-то одного и того же типа ? Если да, и в той, которая загрузилась позже, не всегда вызывается CallNextHookEx, то так и должно быть — все более ранние хуки этого же типа управление не получат.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Понтятие "поверх предыдущей" к DLL неприменимо. А вот к хукам — очень даже. Хуки-то одного и того же типа ? Если да, и в той, которая загрузилась позже, не всегда вызывается CallNextHookEx, то так и должно быть — все более ранние хуки этого же типа управление не получат.
В данном случае одного типа — WH_GETMESSAGE. А что, если сделать другого типа, то будут работать нормально?
Почему спрашиваю? Недавно возился с hook-ами разных типов и опять таки в одном процессе они нормально не работали, симптомы те же что и сейчас (то глючит что то, то вообще не отвечает) по отдельности отлично работает. Так что выход только один, создавать для кажlой dll с hook отдельный процесс?
Здравствуйте, c0deC, Вы писали:
C>В данном случае одного типа — WH_GETMESSAGE. А что, если сделать другого типа, то будут работать нормально?
Я не вижу ответа на мой вопрос — всегда ли там вызывается CallNextHookEx. Это самое существенное. Делать другого типа незачем, у каждого типа хуков свое назначение. Надо ошибку найти.
C>Почему спрашиваю? Недавно возился с hook-ами разных типов и опять таки в одном процессе они нормально не работали, симптомы те же что и сейчас (то глючит что то, то вообще не отвечает) по отдельности отлично работает. Так что выход только один, создавать для кажlой dll с hook отдельный процесс?
Хуки общесистемные или потоковые ? Общесистемные хуки работют в системе, им до процессов дела нет, поэтому какие процессы их ставят — несущественно. Потоковые хуки работают в потоке, им до процесса тоже дела нет, но если в процессе один поток, то как бы и в процессе
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Я не вижу ответа на мой вопрос — всегда ли там вызывается CallNextHookEx. Это самое существенное. Делать другого типа незачем, у каждого типа хуков свое назначение. Надо ошибку найти.
Вызывается везде, как по мне.
Вот первая dll
--------------------------------------------------------------------
PD>Хуки общесистемные или потоковые ? Общесистемные хуки работют в системе, им до процессов дела нет, поэтому какие процессы их ставят — несущественно. Потоковые хуки работают в потоке, им до процесса тоже дела нет, но если в процессе один поток, то как бы и в процессе
Хуки общесистемные. И ещё попробовал пока ждал ответа, сделать запуск этих хуков из разных процессов — работают хорошо не глючат и не мешают друг другу. Если вызываю SetHook1 SetHook2 из одной программы начинаются глюки — пишет то стек переполнен то системные ошибки вылетают то ещё что то. Значит всё таки как то процесс влияет но то откуда hook запущен.