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

 WASM Phorum —› WASM.ELECTRONICS —› Драйвер kbdfiltr ???

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Июл 14, 2004 22:16:18

Собсна, в полном отупении пребываю :((
Тема, значицца такая: надо фильтр на клаву поставить, чтоб рубить нехорошие комбинации клавишьЪ. Хук 3-го кольца не катит. Надо драйвер писать :) А я дальше использования ipfilterdriver не ходил... Ну да ладно лезу в ДДК. Там есть такой сэмпл "kbdfiltr". Ладна, читаем доки... Есть такая функция там "KbFilter_IsrHook". Ага! Это, как я понял, нечто похожее на обработчик прерывания от клавы. Значит, здесь и надо контролировать нажатия кнопок...

KbFilter_IsrHook(
IN PDEVICE_OBJECT DeviceObject,
IN PKEYBOARD_INPUT_DATA CurrentInput,
IN POUTPUT_PACKET CurrentOutput,
IN OUT UCHAR StatusByte,
IN PUCHAR DataByte,
OUT PBOOLEAN ContinueProcessing,
IN PKEYBOARD_SCAN_STATE ScanState
);

Как я понял, "CurrentInput"- отсюда брать скан- код нажатой клавиши: CurrentInput->MakeCode. Ладно, поверил. Но тут же M$ обещает, что в CurrentInput->Flags лежат флаги, указывающие на то, что произошло с клавишей:

KEY_MAKE The key was pressed.
KEY_BREAK The key was released.

Ладно, ставлю DbgPrint- распечатываю скан- код и параметр "Flags". И тут- то перестаю врубаться :((
При нажатии на клавиши Flags всегда равен 0, вне зависимости, нажимается ли клавиша, или отпускается.
Мало того, пори нажатии на следующую клавишу, печатается сначала сканкод предыдущей клавиши, а затем реално нажимаемой. Ничего не понял :(
Help please!!


Дата: Июл 14, 2004 22:48:29 · Поправил: rsrc

В твоем случае лучше всего юзать KbFilter_ServiceCallback() из kbdfiltr.sys
При нажатии, отпускании клавиш генерируются разные последовательности скан-кодов, это как раз последовательность пакетов от InputDataStart…. до (не включая) InputDataEnd

З.Ы. Как раз буквально на днях я закончил писать фильтр-драйвер для клавы :) Можешь заценить его, качать здесь


Дата: Июл 15, 2004 08:50:52

Спасибо, пошел смотреть.
:))


Дата: Июл 15, 2004 08:57:05

Слушай,rsrc, скинь мне пожалуйста сырец хотя бы своей
KbFilter_ServiceCallback(). Заценю. Если не хочешь здесь,
скинь на мыло 731@list.ru.
Очень надо.


Дата: Июл 15, 2004 09:12:38 · Поправил: rsrc

Только что выслал на мыло!


Дата: Июл 15, 2004 10:37:18

Спасиба! Пошел смотреть.


Дата: Июл 15, 2004 20:18:14

rsrc
А организация под win98 другая? Или поже прокатит?


Дата: Июл 15, 2004 20:25:41

.vxd - Win95/98
.sys - WinNT


Дата: Июл 15, 2004 21:31:34

А у тебя *.vxd. Нет?


Дата: Июл 16, 2004 09:03:25

А зачем он мне - Win98 ведь умерла :)


Дата: Июл 16, 2004 10:52:09

А если WDM писать, под 98 не пойдет?


Дата: Июл 16, 2004 11:07:58

Не знаю, даже и проверить мне негде - нету у меня Win98


Дата: Июл 16, 2004 11:29:55

{А зачем он мне - Win98 ведь умерла :)}

Умерла, в первый раз таке слышу. По статистике семейством 9* пользуются 25%. Про совместимость не забыл?


Дата: Июл 16, 2004 19:17:59 · Поправил: rsrc

drone
Как токо переделаешь KbFilter_ServiceCallback(), то сразу ее кинь сюда!
Может кому-нить потом пригодится!!!


Дата: Июл 16, 2004 22:01:57

Кинь мне свой исходник. Как будет время доделаю.
avalonec@mail.ru

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.120