Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как удалить падающий при загрузке драйвер? 
:(
    Опции темы
xvr
Дата 9.3.2017, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Господа, может кто сталкивался с такой проблемой?

Разрабатывается PnP драйвер для одной железки (точнее NDIS MiniPort драйвер для специальной сетевой карты). Очевидно, что сразу он не заработает, а скорее всего уронит Windows в процессе загрузки (что и произошло)
После чего Windows превращается в кирпич, и наотрез отказывается загружаться. Вопрос - как жить дальше?

Были предприняты многочисленные попытки -
  •  Загрузка драйвера не через PnP, а напрямую через SCM успехом не увенчалась - он сказал, что в гробу видал PnP драйвера, чем делали тем и грузите  smile 
  •  Загрузка в Safe моде и удаление всего, чего только можно всеми способами, а именно:
    •  Через pnputil -d <..>
    •  Через devcon remove
    •  Физическое удаление *.sys из Windows\System32\Drivers
    не помогло

Система - Windows2008 server (серверная версия Win7)

Физическое удаление платы с сетевухой помогает, но это не самый удобный способ (особенно учитывая тот факт, что система удаленная, и физический доступ к ней затруднен  smile )

PM MAIL   Вверх
vol4ek
Дата 9.3.2017, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



загрузить последнюю удачную конфигурацию через F8 а потом удалить службу, загружающую ваш драйвер. из консоли както так
Код

sc delete имя

имя службы посмотрите в inf
PM MAIL ICQ   Вверх
xvr
Дата 9.3.2017, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(vol4ek @  9.3.2017,  11:43 Найти цитируемый пост)
загрузить последнюю удачную конфигурацию через F8

Не получается. Last Known Good регистрируется раньше, чем начинается подниматься сетевой стек (а драйвер входит именно в него). Так что оно тоже падает  smile 
Из Safe Mode стартует (т.к. оно не подключает сетевые драйвера), но дальше проблемы с выкорчевыванием драйвера - уж очень Windows оказалась 'злопамятной', никак не хочет этот драйвер забывать  smile 

Цитата(vol4ek @  9.3.2017,  11:43 Найти цитируемый пост)
 потом удалить службу, загружающую ваш драйвер.

Эта служба - сетевой стек Windows, ее удалять черевато (да и не дадут)  smile 

Можно удалить PnP узел (через devcon и/или pnputil), но Windows при следующем старте счастливо находит 'новое оборудование' и немедленно возвращает драйвер обратно (из DriverStore)

И что самое интересное - эта ситуация должна возникать практически при любой разработке любого NDIS драйвера, ниужели никто до сих пор с таким не сталкивался? MSDN хранит гордое молчание, Google наоборот многословно рассказывает, как вылечить падения при загрузке Windows, при этом все советы сводятся либо к 'переустановите или восстановите' Windows, либо снесите последнее установленное оборудование и обратитесь к разработчику. И что мне делать, если я и есть этот самый 'разработчик' ?  smile 

PM MAIL   Вверх
vol4ek
Дата 9.3.2017, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



а в каком месте падает драйвер знаете? мб засунуть подозрительный код в отдельную функцию а потом вызвать ее через IOCTL. тогда хоть падать будет только при вызове
PM MAIL ICQ   Вверх
vol4ek
Дата 9.3.2017, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



если конечно падает не в DriverEntry или каком-нибудь AddDevice

Добавлено через 3 минуты и 31 секунду
хотя там же pnp... 
xvr,  сочувствую.
PM MAIL ICQ   Вверх
xvr
Дата 9.3.2017, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(vol4ek @  9.3.2017,  15:09 Найти цитируемый пост)
а в каком месте падает драйвер знаете?

Если бы знал, вопросов бы не было  smile 

PM MAIL   Вверх
vol4ek
Дата 9.3.2017, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



выложите код если небольшой подуплиться в него
PM MAIL ICQ   Вверх
xvr
Дата 10.3.2017, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Код как раз большой. Это переделанный пример NDIS Virtual Miniport.

Вопрос не в том, как искать ошибки - это и так понятно, а в том, как сделать так, что бы один цикл разработки: запустил-упало-нашел_ошибку-исправил-запустил занимал не часы, а минуты (и не включал в себя физическую разборку компьютера на составляющие)  smile 

PM MAIL   Вверх
rudolfninja
Дата 10.3.2017, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Ответ покажется очень банальным, но вроде тут его не предлагали:
Почему бы не подключить удаленно дебагер (желательно с исходниками и символами драйвера) к проблемной машине и не словить проблему? Я драйвера дебажил только через виртуалку (т.е. проверял драйвер на виртуалке), но знаю, что и к физической машине его можно подключить.
PM MAIL Skype   Вверх
vol4ek
Дата 10.3.2017, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



удаленной отладкой не занимался, но видел много тем с траблами по этому поводу
PM MAIL ICQ   Вверх
rudolfninja
Дата 10.3.2017, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Я занимался. Когда тестируемая ОС на виртуалке и со своей ОС (которая выступает как хост для тестируемой) никаких проблем не возникало. Дебагер сам подключается как только ОС начинает загружать драйвер и остновится когда драйвер свалиться. При этом в дабагере есть полный стек вызовов и состояние памяти на момент креша. Мне помогало. Проблема только в том, что все это удовольствие потребляет немало ОЗУ. 
PM MAIL Skype   Вверх
tzirechnoy
Дата 10.3.2017, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Загрузить что-нибудь ещё, открыть файл реестра (они штатно открываются виндовым regedit, и есть какой-то редактор под unix-like для жэлающих) и удалить из него службу этого драйвера.
PM MAIL   Вверх
xvr
Дата 10.3.2017, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(rudolfninja @  10.3.2017,  13:22 Найти цитируемый пост)
Почему бы не подключить удаленно дебагер (желательно с исходниками и символами драйвера) к проблемной машине и не словить проблему?

Без проблем, но как потом этот драйвер удалить, или заапдейтить? Машина то не грузится, даже с дебагером :(

Цитата(rudolfninja @  10.3.2017,  13:22 Найти цитируемый пост)
Я драйвера дебажил только через виртуалку

С виртуалкой тоже проблем нет, но есть проблемы с самим драйвером - он хочет общаться с физической железкой, которой в виртуалке нет  smile 

Цитата(tzirechnoy @  10.3.2017,  18:07 Найти цитируемый пост)
удалить из него службу этого драйвера

Служба 'этого драйвера' -это NDIS подсистема. Если ее удалить, то у Windows отвалится весь сетевой стек (причем навсегда)  smile 

ЗЫ. Через devcon оно удаляется - я его победил. Но все равно, с таким циклом отладки и на удаленной машине - это не жизнь  smile 

PM MAIL   Вверх
xvr
Дата 13.3.2017, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Разобрался как удалить драйвер:
  •  devcon remove <hw driver ID>
  •  devcon dp_enum
  •  devcon dp_remove oem???.inf
Последний пункт повторить для всех oem*.inf, которые соотвествуют драйверу (их брать из п2)
Всю эту последовательность можно закатать в батник

К сожалению это не решает проблемы удаленной отладки - требуется ручная перезагрузка в safe mode

Это тоже решается (костыль конечно, но работает).

Делается user mode утилита, которая создает event (именованный в Global\ наймспейсе)
В драйвере (в DriverEntry) делается попытка открыть это событие (через ZwOpenEvent) - если такового нет, драйвер немедленно терминируется с ошибкой.

Таким образом после слома можно перезагрузиться, в процессе boot'а драйвер откажется грузиться, но система взлетит. Затем запускается user mode утилита, а драйверу делают disable/enable и он взлетает (желательно с прикрепленным кернел дебагером, иначе смысла в взлете и последующем крахе будет немного  smile )

Более безболезненого метода пока не нашел  smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1452 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.