Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.006 c
3-66501
Dinara
2002-01-25 11:49
2002.02.21
Упаковка БД


1-66610
foxbad
2002-02-06 12:47
2002.02.21
Help !!! Как использовать TADO в своей DLL !!!


1-66614
antoniz
2002-02-06 12:16
2002.02.21
Как сохранить ветку системного реестр в файл


14-66671
DmitryA
2001-12-15 16:54
2002.02.21
Проблема с индексом - MDX формат


1-66514
vic_774N
2002-02-03 05:14
2002.02.21
DDE Client - кто знает подскажите





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский