хуки и длл

Тема в разделе "WASM.BEGINNERS", создана пользователем Vic, 5 янв 2009.

  1. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Нет, именно во все процессы, запущенные в системе. Точнее, во все треды всех процесов, ассоциированные с тем же десктопом, что и тред, устанавливающий хук.
    Естественно это касается только глобальных хуков.
     
  2. perez

    perez Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    502
    Адрес:
    Moscow city
    В процессе дискуссии порылся в инете и узнал, что dll хука подключается к процессу только во время обращения к хуку. Тоесть, как я понял, если процесс блокнота свернут, и ни одно окно не получает сообщений с клавы, созданный dll с хуком на нажатия кнопок не будет подгружаться к нему. А подгрузится, только при необходимости, когда юзер ткнет кнопку. Вроде так.
     
  3. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Не так.
     
  4. Vic

    Vic New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    75
    эм, а помоему perez тут прав...
    в длл храниться процедура обработки хука, к тому треду который попадает под тип хука (допутим все, если последним параметром в SetWindowsHookEx стоит "0") подгружается та самая длл, а потом вызывается процедура инициализации библиотеки (если есть) и соответствующая функция обработки хука...
    то есть загрузка библиотекив АП процесса будет неявной и только после того как сработает ловушка для потока этого процесса ...
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    При установке хука, в цепочку хуков встраивается процедура-обработчик из ДЛЛ. Если ДЛЛ не загружена, то как можно получить адрес этой процедуры ?
     
  6. Vic

    Vic New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    75
    так в том то и дело...
    процесс А ставит хук с процедурой обработки в 1.dll хук этот действует до тех пор пока процесс А жив... адрес процедуры обработчика передается в качестве параметра ф-ции SetWindowsHookEx().

    далее как только хук срабатывает на другом потоке (процесса В) в АП процесса В подгружается библиотека (адрес длл также передается в параметрах SetWindowsHookEx())

    таким образом пока хук жив он хранит информацию об адресе длл и адресе функции обработчика в этой длл...

    разве не так??
     
  7. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Partner
    да да, ДЛЛ подгружается только при срабатывании хука.
     
  8. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Не буду спорить. Может я и не прав.
    Надо будет разобраться с вопросом поподробнее.
     
  9. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Хук цепляется не ко всем потокам, а только к тем, которые связанны с тем же десктопом (SetThreadDesktop), что и устанавливающий хук тред.
    Как правило, это потоки, имеющие очередь сообщений.
     
  10. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    В цепочку хуков встраивается структура хука, а не процедура-обработчик. Структура tagHOOK содержит смещение процедуры-обработчика относительно базового адреса загрузки dll.
    Если не загружена, то подгружается (вызов идет из недр xxxCallNextHook()), к базовому адресу прибавляется то смещение, о котором я говорил выше и вуаля! Адрес готов.
    Не спорь - ты не прав. ;)
    Уже разобрались - читай статью и этот топик.
     
  11. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    ОК, спасибо. Буду считать, что разобрался.