| Предыдущий | Следующий |
| MAXIMUM_WAIT_OBJECTS_EXCEEDED | NO_USER_MODE_CONTEXT |
MUTEX_LEVEL_NUMBER_VIOLATION
Нарушение порядка уровней мьютексов ядра MUTEX_LEVEL_NUMBER_VIOLATION
MUTEX_LEVEL_NUMBER_VIOLATION имеет код проверки ошибки 0x0000000D. Эта проверка ошибки указывает на нарушение правил порядка блокировок при синхронизации ядра. Она полезна, когда дамп показывает пути мьютексов, защищённых мьютексов, исполнительных ресурсов или блокировок драйвера, способные вызвать взаимоблокировку при неправильном порядке захвата.
Как читать дамп MUTEX_LEVEL_NUMBER_VIOLATION
- По стеку определите поток и драйвер, захватывавшие или освобождавшие блокировку.
- Важны объект блокировки и порядок захвата, а не только символьный код остановки.
- Не рассматривайте её как сбой мьютекса пользовательского режима: это состояние синхронизации ядра.
Что проверить для MUTEX_LEVEL_NUMBER_VIOLATION
- Проверьте иерархию блокировок и пути драйвера, захватывающие несколько блокировок.
- При тестовом воспроизведении включите в Driver Verifier обнаружение взаимоблокировок для подозреваемых драйверов.
- Ищите недавние изменения в путях отмены, выгрузки, питания и обработки ошибок, где порядок блокировок может отличаться от нормального.
Ссылки для MUTEX_LEVEL_NUMBER_VIOLATION
- Введение в спин-блокировки
- Справочник кодов проверок ошибок Microsoft
- Файлы аварийных дампов и WinDbg
Данные дампа для MUTEX_LEVEL_NUMBER_VIOLATION
Для MUTEX_LEVEL_NUMBER_VIOLATION сохраните полный дамп, четыре параметра bug check, точную сборку Windows, список загруженных модулей и временную шкалу событий непосредственно перед остановкой. AllStat описывает это состояние как «MUTEX_LEVEL_NUMBER_VIOLATION»; эта формулировка указывает класс сбоя, а параметры и стек позволяют определить задействованный объект, драйвер, процессор или экземпляр подсистемы.
Порядок анализа для MUTEX_LEVEL_NUMBER_VIOLATION
- Запустите WinDbg
!analyze -v, затем разберите документированное значение каждого параметра MUTEX_LEVEL_NUMBER_VIOLATION, а не полагайтесь только на строку probably-caused-by. - Для MUTEX_LEVEL_NUMBER_VIOLATION найдите самое раннее аномальное событие: обновление драйвера, изменение прошивки, сброс устройства, ошибку хранилища, отчёт Verifier, исчерпание ресурсов или зависание приложения, связанное с mutex / level / number / violation.
- Для MUTEX_LEVEL_NUMBER_VIOLATION сохраните в перечне модулей сторонние фильтры, драйверы безопасности, хранилища, графики и виртуализации; удаление данных до анализа дампа может скрыть ответственный путь.
Не перезагружайте многократно систему с MUTEX_LEVEL_NUMBER_VIOLATION до сохранения дампа и журналов событий. Для MUTEX_LEVEL_NUMBER_VIOLATION способ восстановления должен определяться компонентом из стека и параметров, а не только символьным именем stop-кода.
Данные дампа для MUTEX_LEVEL_NUMBER_VIOLATION
Для MUTEX_LEVEL_NUMBER_VIOLATION сохраните полный дамп, четыре параметра bug check, точную сборку Windows, список загруженных модулей и временную шкалу событий непосредственно перед остановкой. AllStat описывает это состояние как «MUTEX_LEVEL_NUMBER_VIOLATION»; эта формулировка указывает класс сбоя, а параметры и стек позволяют определить задействованный объект, драйвер, процессор или экземпляр подсистемы.
Порядок анализа для MUTEX_LEVEL_NUMBER_VIOLATION
- Запустите WinDbg
!analyze -v, затем разберите документированное значение каждого параметра MUTEX_LEVEL_NUMBER_VIOLATION, а не полагайтесь только на строку probably-caused-by. - Для MUTEX_LEVEL_NUMBER_VIOLATION найдите самое раннее аномальное событие: обновление драйвера, изменение прошивки, сброс устройства, ошибку хранилища, отчёт Verifier, исчерпание ресурсов или зависание приложения, связанное с mutex / level / number / violation.
- Для MUTEX_LEVEL_NUMBER_VIOLATION сохраните в перечне модулей сторонние фильтры, драйверы безопасности, хранилища, графики и виртуализации; удаление данных до анализа дампа может скрыть ответственный путь.
Не перезагружайте многократно систему с MUTEX_LEVEL_NUMBER_VIOLATION до сохранения дампа и журналов событий. Для MUTEX_LEVEL_NUMBER_VIOLATION способ восстановления должен определяться компонентом из стека и параметров, а не только символьным именем stop-кода.
Нужно найти другой код? Найти другой код состояния или ошибки.