Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Как избавиться от ошибки? 17.03.05 12:49 Число просмотров: 2360
Автор: ValEG Статус: Незарегистрированный пользователь
|
> Кроме того неплохо было бы поставить какой нибудь отладчик > уровня ядра (SoftICE или KD - кому что нравится)
SoftICE нету, есть WinDbg, но слишком долго разбираться как с ним работать (а сегодня я должен все закончить)
По быстрому разобраться с WinDbg по документации не получилось, понял что надо соединить два ПК нулмодемным кабелем, а дальше?
Поэтому пока работаю без отладчика, использую DbgPrint() если что надо посмотреть.
> Скорее всего твой bugcheck IRQL_NOT_LESS_OR_EQUAL. Дело в > том, что практически все функции I/O manager-а должны > вызываться на IRQL == PASSIVE_LEVEL, если больше - то > вылетает этот багчек.
не знаю, я тут немного переписал процедуру зажигания светодиодов клавиатуры (заменил IoBuildDeviceIoControlRequest на IoAllocateIrp, думал поможет, ... не помогло)
Cейчас на экране - KMODE_EXCEPCION_NOT_HANDLED
Главное этот же самый код, перенесенный один в один в мой KbFilter_IoCtl, нормально создает новый IRP и зажигает светодиоды, если я вызываю KbFilter_IoCtl с помощью DeviceIoControl из user mode. Конечно, можно сделать таймер в Win32 и оттуда мигать светодиодами, но приложение могут например случайно или специально выгрузить.
Поэтому хотелось бы сделать по таймеру драйвера, но если переношу вызов процедуры из KbFilter_IoCtl в TimerRoutine драйвера, вызываемую раз в секунду, то появляется KMODE_EXCEPCION_NOT_HANDLED. Можно как-нибудь сделать в драйвере периодический вызов процедуры зажигания светодиодов чтобы данная ошибка не появлялась?
> > status = IoCreateDevice(Driver, > > maxSize, > > NULL, > > FILE_DEVICE_UNKNOWN, // > > неизвестно для клавиатуры или мышы создается > устройство
а с FILE_DEVICE_UNKNOWN так было сделано в i8042prt.sys, оттуда и перетощил, проблем небыло.
> Здесь лучше использовать > PhysicalDeviceObject->DeviceType (где > PhysicalDeviceObject - второй аргумент твоего обработчика > AddDevice).
Сделал как ты написал, а проблем не будет? т.к. значение PhysicalDeviceObject->DeviceType и для клавиатуры и для мышы при вызове AddDevice у меня == 32 (FILE_DEVICE_ACPI)
В начале процедуры AddDevice я инициализирую переменную IsKeyboard, анализируя ClassGuid возвращаемый при вызове мной IoGetDeviceProperty()
может лучше там-же вызвать IoCreateDevice с соответствующим FILE_DEVICE_KEYBOARD или FILE_DEVICE_MOUSE?
|
|
|