Необходимо ли устанавливать точку останова в драйвере режима ядра для отладки функции в ее аналоге в пользовательском режиме (с использованием Windbg)?

Я использую Windbg для отладки моего драйвера пользовательского режима (рассмотрим USB). Мой пакет драйверов (отладочная сборка, 64-разрядная версия) имеет код как для режима ядра, так и для пользовательского режима. Пакет был успешно установлен на моем целевом компьютере, и модуль тоже был загружен (в этом я могу убедиться с помощью команды windbg: 'lm '). И я запускаю Windbg в режиме администратора на хосте и отлаживаю цель, используя карту 1394 FireWire.

После запуска приложения, когда я пытаюсь отладить функцию в драйвере пользовательского режима, я замечаю, что предполагаемая функция не выполняется, хотя точка останова правильно установлена ​​и включена. Затем я устанавливаю точку останова функции (повторяющаяся служебная процедура, которая часто срабатывает при включении) в коде ядра. На этот раз эта функция драйвера режима ядра взламывается, и через некоторое время также взламывается указанная выше функция драйвера режима пользователя, и я могу отлаживать то же самое и следовать по пути кода.

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

Почему такое поведение при правильной загрузке модулей? Нужно ли мне что-то настраивать или проверять, чтобы при запуске приложения мне не приходилось полагаться на часть режима ядра?


person Umashankar    schedule 07.02.2014    source источник


Ответы (2)


я видел, как WinDBG временами ведет себя немного странно, когда дело доходит до отладки вызовов пользовательского режима!

Одно быстрое предложение: если вы отлаживаете в Vista или более поздней версии, обратите внимание, что выполняется несколько сеансов. Например,

Each user logged on as has a different session]
The services run in session '0'

Возможно, вы не установили точку останова в правильном сеансе.

person Player    schedule 10.02.2014

См. Мою статью здесь, чтобы узнать, почему у вас такое поведение:

http://www.osronline.com/article.cfm?id=576

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

person snoone    schedule 12.02.2014