Хуки windows
От: netie Украина  
Дата: 13.06.05 19:14
Оценка:
Здравствуйте!
Вот такая вот проблема... Предположим, мне нужно отлавливать сообщения в системе и уведомлять о них свою программу. Как установить hook и правильно написать эту функцию, я знаю, но как организовать взаимодействие между hook-процедурой и моей программой? Если я правильно понимаю, при отображении dll в адресное пространство другого процесса все переменные и адреса функции настраиваются в адрасное пространство этого процесса и для двух разных процессов могут иметь разные значения. Значит нельзя просто сохранить, например, адрес функции моей программы и вызывать ее при получении сообщения, т.е. это не будет работать для процессов кроме моего собственного. Так как тогда дать знать моей программе, что было получено какое-то сообщение?
Re: Хуки windows
От: Ignoramus  
Дата: 13.06.05 20:26
Оценка:
Здравствуйте, netie, Вы писали:

N>Здравствуйте!

N>Вот такая вот проблема... Предположим, мне нужно отлавливать сообщения в системе и уведомлять о них свою программу. Как установить hook и правильно написать эту функцию, я знаю, но как организовать взаимодействие между hook-процедурой и моей программой? Если я правильно понимаю, при отображении dll в адресное пространство другого процесса все переменные и адреса функции настраиваются в адрасное пространство этого процесса и для двух разных процессов могут иметь разные значения. Значит нельзя просто сохранить, например, адрес функции моей программы и вызывать ее при получении сообщения, т.е. это не будет работать для процессов кроме моего собственного. Так как тогда дать знать моей программе, что было получено какое-то сообщение?

Можно через PostMessage какому-либо окну из твоего процесса. Хендлы окон уникальны для всех процессов в пределах сессии. (Только не передавай указатели через lParam )

Или зажечь какой-нибудь именованный объект синхронизации (event, mutex etc.). Эти имена тоже уникальны.
Re: Хуки windows
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 14.06.05 02:26
Оценка:
Hello netie, you wrote:

> Вот такая вот проблема...


Здесь пример хука на Delphi.
Общие данные размещаются в именованном Memory Mapped File.

--
Всего хорошего, Слава
Posted via RSDN NNTP Server 1.9
Re[2]: Хуки windows
От: Ignoramus  
Дата: 14.06.05 06:30
Оценка:
Здравствуйте, Ignoramus, Вы писали:

Если же кроме нотификации нужно передать данные, то тут опять же стандартные средства: файлы, меппинги файлов в памяти, пайпы и пр.

Ковыряться в памяти чужого процесса не рекомендую, хотя возможность тоже есть.
Re: Хуки windows
От: Maxim.UA Украина  
Дата: 14.06.05 08:44
Оценка:
для VC можно в библиотеке указать общий для все Dll блок памяти
для Builder и Delphi я не знаю т.к. у них свой менеджер памяти,
а для VC вот:

#pragma data_seg("Shared")

бла-бла тут типа переменные

#pragma data_seg()
#pragma comment(linker, "/Section:Shared,rws")
Re: Хуки windows
От: Игорь Вартанов Ниоткуда  
Дата: 14.06.05 11:56
Оценка:
Здравствуйте, netie, Вы писали:

N>Если я правильно понимаю, при отображении dll в адресное пространство другого процесса все переменные и адреса функции настраиваются в адрасное пространство этого процесса и для двух разных процессов могут иметь разные значения.

Разные значения адресов — это не главное препятствие. Главным является то, что каждый процесс изолирован от всех остальных, т.е. вызвать функцию в другом процессе можно только через специальные механизмы. Поскольку хуковая длль внедряется в чужой процесс, с родным процессом она может общаться только посредством этих механизмов.
N>Значит нельзя просто сохранить, например, адрес функции моей программы и вызывать ее при получении сообщения, т.е. это не будет работать для процессов кроме моего собственного. Так как тогда дать знать моей программе, что было получено какое-то сообщение?
Есть такой класс задач — Interprocess Communications (IPC). Почитай MSDN — узнаешь много интересного.

The following IPC mechanisms are supported by Windows:


Clipboard
COM
Data Copy
DDE
File Mapping
Mailslots
Pipes
RPC
Windows Sockets
---
С уважением,
Игорь
Re: Хуки windows
От: netie Украина  
Дата: 14.06.05 20:47
Оценка:
Спасибо всем за ответы!
Я нашел то, что мне подходит. Если кому-то интересно, описано здесь — http://www.codeproject.com/dll/hooks.asp. На мой взгляд просто и эффективно, и именно то, что нужно для хуков.
Re[2]: Хуки windows
От: Аноним  
Дата: 15.06.05 07:29
Оценка:
Здравствуйте, netie, Вы писали:

N>Я нашел то, что мне подходит. Если кому-то интересно, описано здесь — http://www.codeproject.com/dll/hooks.asp. На мой взгляд просто и эффективно, и именно то, что нужно для хуков.


Гы. Здесь
Автор(ы): Dr. Joseph M. Newcomer
Дата: 25.04.2001
Статья посвящена реализации глобальных хуков. В ней рассматриваются типичные проблемы, связанные
с различием виртуальных адресов перехватывающей DLL в адресных пространствах различных процессов, описывается
способ создания разделяемого сегмента данных, приводится пример DLL, реализующей глобальный хук.
лежит русскоязычный вариант той же статьи. И, осмелюсь заметить, очень давно лежит...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.