Нет, именно во все процессы, запущенные в системе. Точнее, во все треды всех процесов, ассоциированные с тем же десктопом, что и тред, устанавливающий хук. Естественно это касается только глобальных хуков.
В процессе дискуссии порылся в инете и узнал, что dll хука подключается к процессу только во время обращения к хуку. Тоесть, как я понял, если процесс блокнота свернут, и ни одно окно не получает сообщений с клавы, созданный dll с хуком на нажатия кнопок не будет подгружаться к нему. А подгрузится, только при необходимости, когда юзер ткнет кнопку. Вроде так.
эм, а помоему perez тут прав... в длл храниться процедура обработки хука, к тому треду который попадает под тип хука (допутим все, если последним параметром в SetWindowsHookEx стоит "0") подгружается та самая длл, а потом вызывается процедура инициализации библиотеки (если есть) и соответствующая функция обработки хука... то есть загрузка библиотекив АП процесса будет неявной и только после того как сработает ловушка для потока этого процесса ...
При установке хука, в цепочку хуков встраивается процедура-обработчик из ДЛЛ. Если ДЛЛ не загружена, то как можно получить адрес этой процедуры ?
так в том то и дело... процесс А ставит хук с процедурой обработки в 1.dll хук этот действует до тех пор пока процесс А жив... адрес процедуры обработчика передается в качестве параметра ф-ции SetWindowsHookEx(). далее как только хук срабатывает на другом потоке (процесса В) в АП процесса В подгружается библиотека (адрес длл также передается в параметрах SetWindowsHookEx()) таким образом пока хук жив он хранит информацию об адресе длл и адресе функции обработчика в этой длл... разве не так??
Хук цепляется не ко всем потокам, а только к тем, которые связанны с тем же десктопом (SetThreadDesktop), что и устанавливающий хук тред. Как правило, это потоки, имеющие очередь сообщений.
В цепочку хуков встраивается структура хука, а не процедура-обработчик. Структура tagHOOK содержит смещение процедуры-обработчика относительно базового адреса загрузки dll. Если не загружена, то подгружается (вызов идет из недр xxxCallNextHook()), к базовому адресу прибавляется то смещение, о котором я говорил выше и вуаля! Адрес готов. Не спорь - ты не прав. Уже разобрались - читай статью и этот топик.