Global Hook / Глобальный Хук

Информация по чистым файлам, как для Windows, так и для других программ
Аватара пользователя

Автор темы
CIS
Администратор
Администратор
Сообщения: 1754
Зарегистрирован: 12 фев 2011, 22:58
Репутация: 0
Поблагодарили: 1 раз
Контактная информация:

Global Hook / Глобальный Хук

Непрочитанное сообщение CIS » 21 мар 2012, 18:15

1. Хуки
Хук (hook; этот термин также часто переводят как "ловушка" или "фильтр") - это точка в механизме, обрабатывающем сообщения. В этой точке приложение может установить подпрограмму, чтобы контролировать передачу сообщений в системе и обрабатывать определенные типы сообщений прежде, чем их получит приложение, для которого они предназначены.

Хуки несколько замедляют работу системы, поскольку они увеличивают количество действий, которые производит система при обработке каждого сообщения. В связи с этим следует устанавливать хуки только при необходимости и удалять их, как только они становятся не нужны.

Подробнее
INFO
Изображение
Изображение
Изображение
Изображение
Только запуск в тестах покажет на что способен продукт! Александр Невский говорил: "Кто к нам с вирусом прийдет, тот в песочнице Comodo и погибнет!"


Аватара пользователя

Автор темы
CIS
Администратор
Администратор
Сообщения: 1754
Зарегистрирован: 12 фев 2011, 22:58
Репутация: 0
Поблагодарили: 1 раз
Контактная информация:

2. Цепочки хуков

Непрочитанное сообщение CIS » 21 мар 2012, 18:16

Windows содержит много различных типов хуков; они обеспечивают доступ к различным аспектам механизма, обрабатывающего сообщения. Например, хук WH_MOUSE позволяет контролировать передачу сообщений от мыши.

Windows позволяет строить цепочки из однотипных хуков. Цепочка хуков (hook chain) - это список указателей на определенные приложением функции обратного вызова, которые вызывают функции хука (hook procedures). Когда появляется сообщение, связанное с типом установленного хука, Windows передает это сообщение по очереди каждой функции хука, упомянутой в цепочке. Действие, которое может совершить функция хука, зависит от типа данного хука. Функции для некоторых типов хуков могут только просматривать сообщения; другие функции могут изменять сообщения или останавливать их продвижение по цепочке, не позволяя им достигнуть следующей функции хука или окна-адресата.
INFO
Изображение
Изображение
Изображение
Изображение
Только запуск в тестах покажет на что способен продукт! Александр Невский говорил: "Кто к нам с вирусом прийдет, тот в песочнице Comodo и погибнет!"


Аватара пользователя

Автор темы
CIS
Администратор
Администратор
Сообщения: 1754
Зарегистрирован: 12 фев 2011, 22:58
Репутация: 0
Поблагодарили: 1 раз
Контактная информация:

3. Функция хука

Непрочитанное сообщение CIS » 21 мар 2012, 18:21

Для того, чтобы использовать определенный тип хука, программист создает функцию хука. Затем с помощью функции SetWindowsHookEx() устанавливает созданную функцию хука в цепочку, связанную с данным хуком. Функция хука должна иметь следующий синтаксис:

LRESULT CALLBACK HookProc(
int nCode,
WPARAM wParam,
LPARAM lParam)


Вместо HookProc следует подставить имя функции хука, определенное приложением.

Параметр nCode - код хука. Функция хука использует его, чтобы определить действие, которое необходимо исполнить. Значение кода хука зависит от типа хука; каждый тип имеет свой набор кодов хука.
Значения параметров wParam и lParam зависят от кода хука, но обычно они содержат информацию об отправленном сообщении.

Функция SetWindowsHookEx() всегда устанавливает функцию хука в начало цепочки хуков. Когда происходит событие, которое отслеживается данным типом хука, Windows вызывает функцию, которая находится в начале цепочки, связанной с этим хуком. Каждая функция хука в цепочке решает, передавать ли событие следующей функции. Функция хука может передать событие следующей функции, используя функцию CallNextHookEx().

Обратите внимание, что функции хука для некоторых типов хуков могут только просматривать сообщения. Windows передает сообщения к каждой функции хука такого типа даже в том случае, если функции хука не используют функцию CallNextHookEx().

Функция хука может быть глобальной. В этом случае она просматривает сообщения для всех потоков в системе. Можно также определить функцию хука для одного потока, чтобы просматривать сообщения, предназначенные только этому потоку. Глобальная функция хука может быть вызвана в контексте любого приложения, поэтому она должна быть помещена в отдельный модуль библиотеки DLL. Функция хука, определенная для одного потока, вызывается только в контексте данного потока. Если приложение устанавливает функцию хука для одного из своих собственных потоков, она может находиться или в том же модуле, что и остальная часть кода приложения, или в DLL. Если приложение устанавливает функцию хука для потока другого приложения, ее надо поместить в DLL.

Примечание: Использовать глобальные хуки следует только в целях отладки, в противном случае лучше избегать их. Глобальные хуки снижают эффективность системы и вызывают конфликты с другими приложениями, которые используют такой же тип глобального хука.
INFO
Изображение
Изображение
Изображение
Изображение
Только запуск в тестах покажет на что способен продукт! Александр Невский говорил: "Кто к нам с вирусом прийдет, тот в песочнице Comodo и погибнет!"



Вернуться в «Windows File INFO»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость