· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Драйвер-фильтр мыши в win2k

Посл.отвђт Сообщен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