Форум: "WinAPI";
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c