2011-01-13 3 views
-2

Я написал драйвер ядра, который подключается к процессу и скрывает папку. Этот драйвер работает очень хорошо, пока я не подключу внешний жесткий диск.Как отладить сбой драйвера ядра в Windows?

На данный момент моя ОС (Windows XP или Server 2003) сбой с синего экрана смерти (BSOD).

Что может быть причиной этого сбоя и как я могу изменить драйвер для его решения?

+3

Это почти как сказать: «Доктор, сегодня я плохо себя чувствую, вы можете мне помочь?» – Mehrdad

+0

Доктор, у меня болит рука, когда я это делаю. Тогда не делайте этого. – leppie

+0

Мне нужно подключить внешний жесткий диск к системе –

ответ

1

Там будет два пути в целом:

  1. посмертной отладки. Обычно это то, что вы делаете, когда у вас нет локальной машины для воспроизведения сбоя. В этом случае вы проверяете файл crashdump (полный или мини-дамп).
  2. живая отладка. В этом случае, если вы знаете, что система собирается сбой, вы готовите одну машину для управления этим аппаратом с помощью WinDbg и подключаетесь через последовательный или FireWire-кабель. Последнее намного быстрее.

Однако я согласен с тем, что вы уступаете слишком мало деталей. Вы «зацепились»? Ну, как? SSDT-подключение? Или вы используете надлежащий способ написания драйвера фильтра? Если драйвер фильтра, какая модель? Мини-фильтр или старый фильтр?

Я только что заметил ваш комментарий, что вы подключаете «NtOpenProcess и NtQueryDirectoryFile», так что это звучит как SSDT-hooking. Что вы делаете в своей реализации? Я знаю много драйверов, которые не соответствуют SSDT-подключению. Он начинается с метода, используемого для установки крючка, и обычно не заканчивается смелой реализацией.

Обратите внимание, что для живой отладки WinDbg предлагает некоторые прекрасные функции для переноса и загрузки последней версии драйвера во время загрузки. Таким образом, вы можете отлаживать свою последнюю версию без дополнительной подготовки. Отладчик ядра на удаленном конце и WinDbg на вашем компьютере позаботится об этом.

Кроме того, вы можете отправить свой вопрос в списки в OSR (а именно NTDEV).

0

Вы не указали практически никаких технических деталей BSOD или как работает ваш код, поэтому невозможно дать конкретный ответ. В качестве общей отправной точки я бы предложил вам проанализировать мини-накопитель, чтобы получить некоторые особенности того, что пошло не так, чтобы вызвать BSOD. Вот хорошее руководство по началу работы.

http://forums.majorgeeks.com/showthread.php?p=1418737

1

При разработке драйверов ядра, как правило, вы хотите протестировать их на виртуальной машине с подключением отладчика ядра (хост - отладчик, VM - debuggee). Некоторые из сред виртуальной машины обеспечивают прямую поддержку отладки.

После этого, конечно, вам нужно отлаживать различные физические и виртуальные аппаратные средства.