Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2005-03-08

Protection in component

Здравствуйте!
Все девушек с праздником! Остовайтесь молодыми!
*******************************************************************
Вот, вчерась накропал -смотрите в атаче.
Собственно это компонент регистрирующий запуски программы в реестре .
количество запусков устанавливается в инспекторе объектов. тамже можно
задать message и ключи реестра. Не реализовано получение
userID. Хотелось чтобы он формировался в файл в виде перемешанных знаков
на основе первичных данных.Вот как перемешать чтобы потом это можно было
у себя расшифровать пока не ясно.
С благодарностью приму любые советы
С уважением Валерий.

Номер выпуска : 4127
Возраст листа : 534 (дней)
Количество подписчиков : 521
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/329466
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-03-08 18:33:11 (#329466)

Re[3]: Global hook

Hello, NEON!

Отвлекся на некоторое время от форума, sorry.

> Так вот на эти исключения и надо поставить хук. Только как?

Чтобы не было недоразумений, сначала уточним терминологию.

Под hook в Windows подразумевается вполне определенная вещь.
Цитирую Microsoft Platform SDK (User Interface Services ->
Windows User Interface -> Windowing -> Hooks):
"A hook is a point in the system message-handling mechanism
where an application can install a subroutine to monitor
the message traffic in the system and process certain types of
messages before they reach the target window procedure."

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

Хукинг, конечно, достаточно мощная техника, но к перехвату
необработанных исключений (unhandled exceptions) имеет,
увы, отдаленное отношение.
В этом случае, скорее всего, прийдется осуществить перехват
вызовов функции UnhandledExceptionFilter в kernel32.dll.
Существует различные способы сделать это (и один из них
использует глобальный хукинг, для того чтобы спроецировать
свою dll на все процессы, имеющие оконные процедуры), но ни один
не является универсальным и зависит от используемой ОС
(подробная информация о перехвате вызовов функций в dll
есть в сети, но все что попадалось - с примерами на C или
Asm'е; если не пугает перспектива копаться в низкоуровневом
коде - могу кинуть ссылки).
Перехват unhandled exception в этом месте позволит произвести
регистрацию исключительного события в процессе уровня ring-3 перед
тем как система прибьет этот процесс или передаст его JIT-отладчику,
но если требуется более серьёзно вмешиваться в работу ОС -
прийдется всерьез подружиться с отладчиком уровня ядра.
Кроме того, если произойдет ошибка во время работы в ring-0,
управление никогда не будет передано обратно в ring-3,
система просто остановит свою работу, покажет BSOD и
сделает crash-dump (упрощенно, конечно).

Так ли уж необходимы все эти мучения?

P.S. Я вел к тому, что, может быть, есть готовые
разработки для Delphi, ведь перехват вызовов довольно широко
используется - стоит поискать/поспрашивать в сети.

   Hagen 2005-03-08 18:32:58 (#329465)