![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехват клавиатуры [D7, WinXP]
Dmitry_177 © (2007-05-28 20:11:00)Вот интересно.. перехват клавиатуры можно осуществить хуком сообщений WH_KEYBOARD или WH_KEYBOARD_LL..
А если нужно перехватывать клавиатуру путем перехвата API функции? Какую функцию следует перехватывать?
(2007-06-12 16:52:00) [1]Удалено модератором
(2007-06-12 16:52:00) [2]Удалено модератором
(2007-06-12 16:51:00) [3]Удалено модератором
Rouse_ (2007-05-30 21:21:00) [4]
> Dmitry_177 (30.05.07 20:22) [29]
> А что насчет этого?
WH_KEYBOARD_LL даст тебе то-же...
Dmitry_177 (2007-05-30 20:22:00) [5]А что насчет этого?
> Или еще лучше, сделать перехват PeekMessage и GetMessage,
> а там смотреть WM_KEYDOWN?
Rouse_ (2007-05-30 19:53:00) [6]
> IRP_MJ_READ и не забыть про IoSetCompletionRoutine?
какие еще умные слова ты знаешь?:)
Dmitry_177 (2007-05-30 19:42:00) [7]Или еще лучше, сделать перехват PeekMessage и GetMessage, а там смотреть WM_KEYDOWN =)
Dmitry_177 (2007-05-30 18:19:00) [8]
> Назначить обработчик на IRP_MJ_INTERNAL_DEVICE_CONTROL.
Я так подумал.. может лучше IRP_MJ_READ и не забыть про IoSetCompletionRoutine?
oxffff (2007-05-30 15:51:00) [9]Открывай DDK и Соломона,Руссиновича. Там есть все.
Или Oney, Walter Programming the Microsoft Windows Driver Model
Rouse_ (2007-05-30 15:50:00) [10]Следующий ответ будет отправкой в район DDK :)
oxffff (2007-05-30 15:47:00) [11]To Rouse_ ©
Следующий вопрос будет, что такое IRP пакет, IRP стек, ISR, IRQL, Spinlock и т.д.
Rouse_ (2007-05-30 15:42:00) [12]
> Неужели никто не знает как перехватывать клавиатуру в Ring0?
Назначить обработчик на IRP_MJ_INTERNAL_DEVICE_CONTROL. в нем по приходу IOCTL_INTERNAL_KEYBOARD_CONNECT в IRP стеке придет структура CONNECT_DATA в (Parameters.DeviceIoControl.Type3InputBuffer), в ней переназначаешь ClassService на свой KeyboardClassServiceCallback вида
VOID KeyboardClassServiceCallback (.
IN PDEVICE_OBJECT DeviceObject,
IN PKEYBOARD_INPUT_DATA InputDataStart,
IN PKEYBOARD_INPUT_DATA InputDataEnd,
IN OUT PULONG InputDataConsumed );
После чего к тебе пойдет IOCTL_INTERNAL_I8042_HOOK_KEYBOARD. Теперь в Type3InputBuffer будет идти структура INTERNAL_I8042_HOOK_KEYBOARD.
Тебе нужно переопределить контекст устройства на свой и заменить InitializationRoutine (которе будет отвечать за инициализацию - что не обязательно, но вдруг тебе понадобится создавать выделять допбуффера или т.п.) и непосредственно IsrRoutine в который будут приходить данные.
В DDK идет пример простого клавиатурного фильтра.
oxffff (2007-05-30 15:30:00) [13]Смотри в сторону HID
oxffff (2007-05-30 15:28:00) [14]
> Dmitry_177 (30.05.07 15:07) [16]
> Если я спросил значит мне это интересно.. И зачем отговаривать
> меня это делать.. Неужели никто не знает как перехватывать
> клавиатуру в Ring0?
Открой дружок DDK и почитай про драйвера для клав и мышь.
Сергей М. (2007-05-30 15:14:00) [15]
> Dmitry_177 (30.05.07 15:07) [16]
> Если я спросил значит мне это интересно
Ну раз тебе интересно, то иди на wasm.ru - там найдешь то что ищешь.
Германн (2007-05-30 15:14:00) [16]
> Т.е. RtlInitUnicodeString() уже перестало быть апи?
Значит мой опиньен слишком хамблистый :)
Rouse_ (2007-05-30 15:11:00) [17]
> Германн © (30.05.07 03:06) [9]
> В нулевом кольце, имхо, такое можно реализовать только драйвером.
> И API-функции тут, имхо, "идут лесом".
Т.е. RtlInitUnicodeString() уже перестало быть апи?
Dmitry_177 (2007-05-30 15:07:00) [18]Если я спросил значит мне это интересно.. И зачем отговаривать меня это делать.. Неужели никто не знает как перехватывать клавиатуру в Ring0?
Сергей М. (2007-05-30 14:58:00) [19]
> Dmitry_177 (30.05.07 14:39) [14]
>
>
Бородатый анекдот про неуловимого Джо, надеюсь, знаешь ?)
Dmitry_177 (2007-05-30 14:39:00) [20]
> Он расчитывает, что его не увидят
и это тоже =)