Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Результат поиска ошибки в драйвере 30.08.05 16:25 Число просмотров: 2682
Автор: leo <Леонид Юрьев> Статус: Elderman Отредактировано 30.08.05 19:13 Количество правок: 1
|
Три дня искал ошибку в своем драйвере, теперь вот хочу поделиться "байкой" о том, как конкретная "мышь" на конкретной машине выявляет небольшую логическую ошибку.
Ошибка была обнаружена случайно, проявляется так: подключаем мышь к COM-порту и при загрузке WinXP SP2 либо синий экран, либо мягкий "зависон".
Причинно-следственная цепочка примерно такая:
1) Зависание происходит из-за бесконечного цикла "обхода" устройств в PNP-подсистеме режима ядра. Синий экран в примерно том-же месте, если обращение по "битому" адресу вызывает AV;
2) Код PNP блудит из-за того, что serenum.sys удаляет Child-PDO на своей шине в ненужный момент;
3) serenum.sys рубит то на чем сидит потому, что получает IRP_MN_REMOVE_DEVICE от сидящего сверху sermouse.sys;
4) sermouse.sys содержит грубейшую ошибку в реализации политик PNP, пытаясь самостоятельно удалить devnode-устройство. Видимо код не менялся с бытности NT 4.0;
5) sermouse.sys сходит с ума потому, что видит активность сигнала DSR в момент инициализации "мыши". Это еще одна ошибка в sermoyse.sys;
6) Активность (изменение) DSR доходит до sermouse.sys из моего драйвера через IOCTL_SERIAL_WAIT_ON_MASK;
7) Мой драйвер обнаруживает изменение DSR в статусе COM-порта при смене обработчика прерываний. Новый обработчик содержит код обработки модемных сигналов, а старый нет (в этой ситуации до IOCTL_SERIAL_WAIT_ON_MASK сигналы от модема не были нужны).
8) След изменения DSR остается в регистре статуса модема UART-та с момента работы PNP-протокола поиска устройств подключенных к COM-порту;
9) Сигнал DSR наводится в мышином кабеле, в виде короткого пика при включении DTR;
10) Устранение проблемы сводится к добавлению в мой драйвер двух строчек кода – очистки регистра статуса модема при переключении между режимами ModemStatus-нужен/-не_нужен. Отсутствие этого было небольшой логической ошибкой...
|
- Результат поиска ошибки в драйвере - leo 30.08.05 16:25 [2682]
|
|
|