|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 11, 2004 21:45:06 · Поправил: tigsid Прощу прощения за глупый вопрос: Как мне перехватывать мышь в Kernel-mode driver? То есть отключить, включить, отслеживать перемещение мыши. Если можно ссылку где об этом прочитать или пример кода. |
|
|
Дата: Июн 11, 2004 22:51:10 В DDK по этому поводу ничего не написано, так что напрашивается перехват IRQ мыши. Может кто что-нибудь получше предложит. |
|
|
Дата: Июн 11, 2004 23:51:24 Можно предложить. Точнее занимался клавиатурой, но это один чёрт. Можно написать PnP драйвер, приаттачится к драйверу мыши, ну и по очереди пускать IRP. Тута особо грамотно сказать ничё не могу, т.к. писал это когда только всё начинал, да и со структурами, стеками там мутновато. Но, помню работало точно. Только вот там Ты будешь получать всё после кого-то... Есть и другой вариант. Более варворский, и многие вправе осудить этот способ, но... он имеет право на существование. Идея заключается в том, чтобы перехватить IoCompleteRequest и читать тип драйвера из IRP. Если это мышь, то смотришь ntddmou.h и ищешь структуру, которая мыша будет передавать по буферу. Ну а дальше с этим оперируешь... Хотя по-моему немного погеморнее и поопаснее, но работает, и на данный момент сбоев не давало. P.S. Кстати, коль уж про это вопрос, то и мне тоже хотелось бы узнать, как можно еще это сделать. Восхищаться заставляет SoftIce, т.к. при обнулении буфера ни одна прога не видит действий от устройства, а вот он видит. Как это ??? |
|
|
Дата: Июн 12, 2004 08:40:59 Насчёт перехвата IoCompleteRequest(т.е. IofCompleteRequest) - самый легкий способ, но он будет слегка систему тормозить, если много кода напихать в перехваченную функцию. А вот SoftIce как раз перехватывает IRQ, например прерывание int 31h - клавиатуры. |
|
|
Дата: Июн 12, 2004 13:29:34 А какое IRQ нужно перехватывать для мыши и как его "обрабатывать". |
|
|
Дата: Июн 12, 2004 20:23:36 Это я поторопился. Насколько я знаю, для большинства PC мыши предназначен IRQ 12, хотя может я и не прав. Но позволит W2k установить свой обработчик? И если позволит, то как он должен выглядеть? |
|
|
Дата: Июн 12, 2004 22:06:17 Если всё же через IRQ делать, то действительно IRQ 12. W2K в kernel-mode всё прекрасно позволит, надо всего-лишь поменять дескриптор в IDT. Только придёться ещё и документацию искать. Кстати в XP'шном DDK лежит папка \src\input\moufiltr, погляди что там, может как раз то что надо. |
|
|
Дата: Июн 15, 2004 22:55:22 Помогите пожалуйста разобратся с прерываниями в защищенном режимe. можно ли поставить свой обработчик при загрузке драйвера вот так: mh dw 0, 0, 8E00h, 0 sidt idtr1 mov bx, cs mov word ptr [mh + 2], bx mov ebx, Offset hook mov word ptr [mh], bx shr ebx, 16 mov word ptr [mh + 6], bx mov ecx, idtr1.Base add ecx, 8 * 09h cli mov ebx, dword ptr [mh] mov dword ptr [ecx], ebx mov ebx, dword ptr [mh + 4] mov dword ptr [ecx + 4], ebx sti или мне нужно создавать свою таблицу и загружать ее линейный адрес в IDTR. А может я поторопился и мне нужно читать статьи про создания драйвера внимательней. |
|
|
Дата: Июн 16, 2004 09:51:08 Я же говорю, посмотри пример в папке \src\input\moufiltr, если его нет, могу скинуть. Да, перехват IRQ мыши надёжнее, но это и сложнее. |
|
|
Дата: Июн 16, 2004 10:06:28 скинь пожалуйста на tigsid_125@Mail.ru или еще лучше приаттач, а то у меня DDK не полный. |
|
|
Дата: Июн 17, 2004 13:20:06 Большое спасибо dragon. Но, к сожалению, там не перехват IRQ. Хотя я еще не до конца разобрался с кодом и может там как раз перехват. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.102 |