Стоп-точка в DriverEntry при перезапуске драйвера
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 12.02.08 12:01
Оценка:
Есть драйвер, перезапускаемый из Config Manager (audio miniport). Для перезапуска использую "devcon restart". Драйвер загружается в XP SP2, работающей под VMware Workstation 6.0.2, отлаживается в хостовой XP SP2 из WinDbg 6.8.4.0.

Если перед перезапуском поставить стоп-точку в функции DriverEntry, то после подачи команды перезапуска гостевая система начинает жрать 100% CPU, но не виснет, а просто тормозит. Минут через пять перезапуск помаленьку начинается (драйвер медленно завершается и выгружается), затем срабатывает стоп-точка в DriverEntry, после чего все работает по-прежнему быстро. Если стоп-точку ставить в другой функции, такого эффекта нет.

Поскольку функция DriverEntry запихана в секцию INIT, и на момент установки стоп-точки в памяти отсутствует, создается ощущение, что либо WinDbg этого не просекает, либо имеют место глюки управления памятью в VMware. Поскольку 6.0.2 за несколько месяцев никаких других проблем не порождала, склоняюсь к первому

Установка стоп-точки командой bu ситуации не меняет.

Можно ли поставить стоп-точку так, чтобы она нормально сработала в такой ситуации?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Стоп-точка в DriverEntry при перезапуске драйвера
От: MShura  
Дата: 12.02.08 13:30
Оценка: +1
ЕМ>Можно ли поставить стоп-точку так, чтобы она нормально сработала в такой ситуации?

Не пожет такой вариант?
__debugbreak() при условии, что есть в реестре есть определеный ключик.
Re: Стоп-точка в DriverEntry при перезапуске драйвера
От: Sergey Storozhevykh Россия  
Дата: 12.02.08 13:56
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Можно ли поставить стоп-точку так, чтобы она нормально сработала в такой ситуации?


Можно попробовать "sxe ld <имя_драйвера>.sys". Тогда по идее при загрузке образа драйвера в память должна произойти остановка до того как будет вызвана DriverEntry. Ну а после того как образ будет в памяти, можно сделать bp.
Re[2]: Стоп-точка в DriverEntry при перезапуске драйвера
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 12.02.08 15:05
Оценка:
Здравствуйте, MShura, Вы писали:

MS>__debugbreak() при условии, что есть в реестре есть определеный ключик.


Это уже слишком радикально — мне нетрудно и просто перекомпилировать, просто удивился такому эффекту
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Стоп-точка в DriverEntry при перезапуске драйвера
От: MShura  
Дата: 12.02.08 15:28
Оценка:
MS>>__debugbreak() при условии, что есть в реестре есть определеный ключик.

ЕМ>Это уже слишком радикально — мне нетрудно и просто перекомпилировать, просто удивился такому эффекту


Добавьте к этому:
вести или не вести логи, а также что логгировать — всё из реестра, а не перекомпиляцией.
Re[4]: Стоп-точка в DriverEntry при перезапуске драйвера
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 12.02.08 15:52
Оценка:
Здравствуйте, MShura, Вы писали:

MS>Добавьте к этому:

MS>вести или не вести логи, а также что логгировать — всё из реестра, а не перекомпиляцией.

Это у меня есть
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Стоп-точка в DriverEntry при перезапуске драйвера
От: gear nuke  
Дата: 12.02.08 17:48
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Можно ли поставить стоп-точку так, чтобы она нормально сработала в такой ситуации?


Можно посмотреть стек вызовов и попробовать поставить её на вызывающий call. Если там много чего еще перезапускается, то сделать бряк условным, по младшему слову адреса entry point.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.