Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.21;
Скачать: CL | DM;

Вниз

Memory maped files, hooks, DLL s, global heap - помогите разобраться.   Найти похожие ветки 

 
Latspell   (2001-12-21 16:39) [0]

Здравствуйте, коллеги !
Возникла такая ситуация: на моём компьютере при загрузке одна из программ (не моя) устанавливает глобальный hook на нажатие правой кнопки мыши.
Раньше всё было прекрастно - при щелчке на клиентскую область окна Explorer-а содержащего, к примеру, вид папок и файлов на диске С hook срабатывал и после его срабатывания выпадала стандартная менюшка.
Сейчас мне понадобилось поставить ещё один hook на это же событие. Моя программа ставит hook и пересылает сообщение дальше по цепочке.
Но проблема оказалось в том, что мой hook, находящийся в конце очереди hook-ов выполняется, но процедура передачи сообщения дальше не происходит или происходит не правильно.
После прочтения литературы выяснил, что т.к. мой hook запускается из DLL, то данные к нему относящиеся необходимо объявлять как глобальные и использовать для этого надо механизм Windows, - файлы отображённые в память.
При попытке разобраться в структуре работы с этими файлами с помощью SDK зашёл в тупик и мало того, в голове моей образовался сумбур, даже относительно того, что знал.
Итак - если у вас хватит терпения,- помогите мне.
Мои соображения: при загрузке DLL, её код физически помещается в кучу (т.е. всё что есть в DLL по битикам переносится в оперативную память). При попытке других приложений воспользоваться уже загруженной DLL на АП процесса, который загружает DLL, проецируются данные, находящиеся в кучи, т.е.
в АП этого процесса передаются адреса ф-ий и процедур имеющихся в DLL, а так же в АП отводится свой сегмент под данные загруженной DLL. Таким образом, при обращении из моей программы к ф-ии DLL, обработка данных, хранящихся в "моём" АП производится кодом, находящимся в куче - это верно ?
Теперь не могли бы вы объяснить мне каким образом hook поставленный не моей программой "узнает" о том сегменте памяти в куче, которая будет хранить данные после того как сработает мой hook и передаст сообщение дальше ? (это относительно механизма файлов отражённых в память).
Если я храню какие-то данные в куче (а именно это, как я понял, позволяет делать механизм отражения в память), то при завершении работы моего процесса эти данные будут уничтожены или останутся там, если я сам не позабочусь о их удалении.

Хотелось бы получить квалифицированный ответ на данные темы.
Если не сложно - приведите примеры или вышлите исходники.

Всем заранее благодарен.


 
Latspell   (2001-12-21 16:44) [1]

Прошу прощения, забыл ещё один вопрос:
не секрет, что последней в очереди hook-ов стоит системная ловушка, т.е. когда я нажимаю на правую кнопку мышы, то все ловушки делают своё дело, передавая полученное сообщение дальше вплоть до конца.
Я попробывал намерено не передавать сообщение о нажатии кнопки, но всё равно меню при нажатии кнопки выпадает, ведь показ меню - это и есть реакция системной ловушки на нажатие правой кнопки мыши в клиентской области окна, или я не прав ?
В таком случае получается, то системная ловука срабатывает всегда ?


 
Юрий Зотов ©   (2001-12-21 21:00) [2]

http://delphi.mastak.com/cgi-bin/forum.pl?look=1&id=992616736&n=2



Страницы: 1 вся ветка

Текущий архив: 2002.02.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
14-66680
ЗЛОБНЫЙ КАРЛИК
2002-01-04 20:58
2002.02.21
Перекодирование :-(


3-66496
RAVEN
2002-01-28 15:29
2002.02.21
Глюки ADO часть 1-ая


1-66562
Eduard
2002-02-05 12:05
2002.02.21
Установка компонентов в Delphi6


3-66451
ed
2002-01-21 08:39
2002.02.21
Несколько запросов и временные таблицы в ADO


1-66538
Марина
2002-02-04 13:51
2002.02.21
WordApplication