| Предыдущий | Следующий |
| SYSTEM_UNWIND_PREVIOUS_USER | INTERRUPT_UNWIND_ATTEMPTED |
SYSTEM_SERVICE_EXCEPTION
Bug check SYSTEM_SERVICE_EXCEPTION имеет значение 0x0000003B. Это означает, что исключение возникло при выполнении процедуры, осуществляющей переход от непривилегированного кода к привилегированному.
Параметры SYSTEM_SERVICE_EXCEPTION
| Параметр | Описание |
|---|---|
1 |
Исключение, вызвавшее проверку ошибки. |
2 |
Адрес инструкции, вызвавшей проверку ошибки |
3 |
Адрес записи контекста исключения, вызвавшего проверку ошибки |
4 |
0 |
Причина
Этот код остановки означает, что при выполнении кода возникло исключение, а находившийся ниже поток является системным.
Сведения об исключении, возвращаемые в параметре 1, описаны в значениях NTSTATUS. Коды исключений определены в ntstatus.h и непосредственно применимы при исследовании SYSTEM_SERVICE_EXCEPTION— файла заголовка, входящего в Windows Driver Kit. Дополнительные сведения см. в заголовочных файлах Windows Driver Kit.
0x80000003: STATUS_BREAKPOINT
Точка останова или ASSERT встретилась, когда отладчик ядра не был подключён к системе.
0xC0000005: STATUS_ACCESS_VIOLATION
Произошло нарушение доступа к памяти. (Параметр 4 проверки ошибки содержит адрес, к которому пытался обратиться драйвер.)
Устранение неполадок
Для отладки этой проблемы используйте команду .cxr (отображение записи контекста) с параметром 3, а затем команду kb (отображение обратной трассировки стека). Также можно установить breakpoint в коде перед stop code и пошагово пройти до отказавшей инструкции. Используйте команды u, ub, uu (дизассемблирование), чтобы просмотреть машинный код программы.
Для анализа: Расширение !analyze выводит сведения о bug check и помогает установить первопричину. Ниже приведён пример вывода !analyze.
SYSTEM_SERVICE_EXCEPTION (3b)
An exception happened while executing a system service routine.
Arguments:
Arg1: 00000000c0000005, Exception code that caused the bugcheck
Arg2: fffff802328375b0, Address of the instruction which caused the bugcheck
Arg3: ffff9c0a746c2330, Address of the context record for the exception that caused the bugcheck
Arg4: 0000000000000000, zero.
...
Дополнительные сведения о WinDbg и !analyzeсм. в следующих разделах:
Использование расширения !analyze
Определение драйвера
Если удаётся определить драйвер, вызвавший ошибку, его имя выводится на синем экране и сохраняется в памяти по адресу (PUNICODE_STRING) KiBugCheckDriver. Для вывода этих сведений можно использовать dx (вывод выражения object model отладчика в SYSTEM_SERVICE_EXCEPTION контексте) — команду отладчика: dx KiBugCheckDriver.
Используйте команды !error для вывода сведений о коде исключения из параметра 1. Ниже приведён пример вывода команды !error.
REM SYSTEM_SERVICE_EXCEPTION diagnostic command.
2: kd> !error 00000000c0000005
Error code: (NTSTATUS) 0xc0000005 (3221225477) - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.
Изучите STACK TEXT вывод WinDbg, чтобы понять, какой код выполнялся в момент сбоя. Если доступно несколько файлов дампа, сравните их и найдите общий код в стеках. Для исследования сбойного кода используйте команды отладчика, например kb (отображение обратной трассировки стека).
Чтобы вывести список загруженных в память модулей, используйте следующую команду: lm t n
Используйте !memusage для проверки общего состояния системной памяти. Для исследования можно также использовать команды !pte и !pool отдельных областей памяти.
Ранее эта ошибка связывалась с чрезмерным использованием выгружаемого пула, которое может возникать, когда графические драйверы пользовательского режима передают ядру некорректные данные. Если вы подозреваете такой случай, включите проверки пула в Driver Verifier, чтобы собрать дополнительные сведения.
Driver Verifier
Driver Verifier — средство реального времени для проверки поведения драйверов. Driver Verifier, например, контролирует использование ресурсов памяти, включая пулы памяти. Обнаружив ошибку выполнения кода драйвера, Driver Verifier намеренно создаёт исключение, чтобы соответствующий участок кода можно было подробно исследовать. Можно использовать встроенный в Windows диспетчер Driver Verifier, доступный на всех компьютерах с Windows.
Чтобы запустить диспетчер Driver Verifier, введите verifier в командной строке. Можно выбрать драйверы, которые необходимо проверять. Учитывайте, что проверка драйверов создаёт дополнительную нагрузку, поэтому проверяйте минимально необходимое число драйверов. Дополнительные сведения см. в документации Driver Verifier.
Примечания
Для общей диагностики кодов проверки ошибок Windows выполните следующие действия:
Нужно найти другой код? Найти другой код состояния или ошибки.