| Предыдущий | Следующий |
| ACTIVE_EX_WORKER_THREAD_TERMINATION | DIRTY_MAPPED_PAGES_CONGESTION |
THREAD_STUCK_IN_DEVICE_DRIVER
Важно
Эта статья предназначена для программистов. Если при работе с компьютером появился синий экран с кодом THREAD_STUCK_IN_DEVICE_DRIVER, см. Устранение ошибок синего экрана.
Параметры THREAD_STUCK_IN_DEVICE_DRIVER
| Параметр | Описание |
|---|---|
1 |
Указатель на объект зависшего потока |
2 |
Указатель на объект DEFERRED_WATCHDOG |
3 |
Указатель на имя неисправного драйвера |
4 |
В отладчике ядра: число срабатываний перехваченной проверки ошибки 0xEA На синем экране: 1 |
Причина
Драйвер устройства выполняет бесконечный цикл, скорее всего ожидая перехода оборудования в состояние простоя.
Обычно это указывает на проблему с самим оборудованием либо на то, что драйвер неправильно программирует оборудование. Часто причиной является неисправная видеокарта или некорректный драйвер дисплея.
Устранение
Используйте команду .thread (установка контекста регистров) вместе с параметром 1. Затем выполните kb (вывод обратной трассировки стека), чтобы найти место, где завис поток.
Если отладчик ядра уже подключён и работает в момент, когда Windows обнаруживает превышение времени ожидания, вместо KeBugCheckEx вызывается DbgBreakPoint. В отладчик выводится подробное сообщение. Дополнительные сведения см. в статье о выводе сообщений в отладчик.
В сообщении будут указаны параметры, которые использовались бы для проверки ошибки. Поскольку фактическая проверка ошибки не выполнялась, команда .bugcheck (вывод данных проверки ошибки) бесполезна. Четыре параметра также можно получить из глобальных переменных Watchdog командой dd watchdog!g_WdBugCheckData L5" в 32-разрядной системе или dq watchdog!g_WdBugCheckData L5" в 64-разрядной системе.
Интерактивная отладка позволяет определить неисправный поток, установить в нём точки останова, а затем командой g (продолжить выполнение) вернуться к зациклившемуся коду для дальнейшего анализа.
На многопроцессорных компьютерах (сборка ОС 3790 или более ранняя) превышение времени ожидания возможно, если зациклившийся поток прерывается аппаратным прерыванием, а в момент проверки ошибки выполняется процедура ISR или DPC. Это происходит потому, что рабочий элемент тайм-аута может быть доставлен и обработан вторым процессором одновременно. В таком случае необходимо глубже исследовать стек неисправного потока и найти код, вызвавший зацикливание и тайм-аут. Для этого используйте команду dds (вывод слов и символов).
Нужно найти другой код? Найти другой код состояния или ошибки.