информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetSpanning Tree Protocol: недокументированное применениеВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Наверно все не так просто 03.03.05 12:45  Число просмотров: 3254
Автор: ValEG Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Можно и без inf-а обойтись

> Просто прописаться в подветке
> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class
> для этих классов в UpperFilters

Наверно все не так просто. Где-то в инете была программка ctrl2cap, там именно так инсталлировался драйвер меняющий клавишу caps на ctrl. Когда я переделал ту программку для инсталляции kbfilter из DDK, то ничего не заработало (то есть ctrl2cap использующий IRP_MJ_READ работает, а kbfilter использующий ServiceCallback нет).

Заработало только когда я установил через диспетчер устройств для клавиатуры свой драйвер, взяв kbfiltr.inf из DDK.
Я посмотрел что изменилось в реестре после kbfiltr.inf:
в подветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318} в UpperFilters ничего не добавилось,

появилась подветка HKEY_LOCAL_MACHINE\CurrentControlSet\Control\CriticalDeviceDatabase\*pnp0baad
(*pnp0baad прописан в kbfiltr.inf) в этой подветке есть параметры:
ClassGUID - {4D36E96B-E325-11CE-BFC1-08002BE10318}
Service - i8042prt
UpperFilters - kbfilter

Еще появилась подветка HKEY_LOCAL_MACHINE\ CurrentControlSet\Enum\ACPI\PNP0303\<номер>
в этой подветке тоже есть параметры:
ClassGUID - {4D36E96B-E325-11CE-BFC1-08002BE10318}
Service - i8042prt
UpperFilters - kbfilter

В подветке HKEY_LOCAL_MACHINE\ CurrentControlSet\Services\kbfilter есть раздел Enum содержащий параметр со значением <номер> из ветки описанной выше.

Устанавливать через SetupAPI - надо долго разбираться.
Для установки той части драйвера что работает с мышью сделал так, как написал leo:
> Если делать через inf-файлы, то нужно два inf-файла
> параметры InstallService должны быть одинаковые.

Изменил в moufiltr.inf параметры InstallService и через диспетчер устройств установил для мыши свой драйвер. В реестр добавились аналогичные ветки, только ClassGUID другой. После чего работает только часть драйвера, отвечающая за блокировку мыши. Если в диспетчере устройств удалить драйвер для мыши, то нормально начинает работать часть драйвера отвечающая за блокировку клавиатуры.

Попробовал сделать тоже самое на другой машине, сначала через диспетчер устройств установил драйвер для клавиатуры (kbfiltr.inf), за тем для мыши (moufiltr.inf) В реестре все аналогично, единственное отличие - наличие раздела Security на первой машине в ветке HKEY_LOCAL_MACHINE\ CurrentControlSet\Services\kbfilter, на второй машине он не появился.
Получилось наоборот блокировка клавиатуры работает, а блокировка мыши нет курсор двигается, хотя вроде не должен и на первой машине после блокировки он не двигается. Единственное, что в момент блокировки перестают запускаться программы с рабочего стола по двойному щелчку, а в Far-e мышь полностью работает.
MouFilter_ServiceCallback у меня выглядит так:

VOID
MouFilter_ServiceCallback(
IN PDEVICE_OBJECT DeviceObject,
IN PMOUSE_INPUT_DATA InputDataStart,
IN PMOUSE_INPUT_DATA InputDataEnd,
IN OUT PULONG InputDataConsumed
)
{
PCOMMON_DATA commonData;
PMOUSE_INPUT_DATA MouseData;
ULONG l_inputDataConsumed = 0;

*InputDataConsumed = 0;

commonData = GET_COMMON_DATA(DeviceObject->DeviceExtension);

for(MouseData = InputDataStart; MouseData < InputDataEnd; MouseData++)
{
if( Globals.LockFlag ) { //если клавиатура и мышь заблокирована
*InputDataConsumed = *InputDataConsumed + 1;
}
else { // клавиатура и мышь не заблокирована

if( MouseData->Buttons != 0) { //есть нажатые кнопки?
cnt_tick = lock_tick; //заново устанавливаем счетчик тиков до блокировки
}

l_inputDataConsumed = 0;

(*(PSERVICE_CALLBACK_ROUTINE) commonData->UpperConnectData.ClassService)(
commonData->UpperConnectData.ClassDeviceObject,
MouseData,
MouseData+1,
&l_inputDataConsumed);

if ( l_inputDataConsumed==0 ) return;

*InputDataConsumed += l_inputDataConsumed;

}
}
}

Короче теперь вообще не знаю, что я делаю не так?
<programming> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach