Поделиться через


Проверка 0x1E ошибок: KMODE_EXCEPTION_NOT_HANDLED

Проверка ошибок KMODE_EXCEPTION_NOT_HANDLED имеет значение 0x0000001E. Ошибка проверка указывает, что программа, работающая в режиме ядра, создает исключение, которое обработчик ошибок не перехватывает.

Важно!

Эта статья предназначена для программистов. Если вы являетесь клиентом Майкрософт и на вашем компьютере отображается код ошибки "синий экран", см. статью Устранение ошибок синего экрана.

параметры KMODE_EXCEPTION_NOT_HANDLED

Параметр Описание
1 Код исключения, который не был обработан.
2 Адрес, по которому возникло исключение.
3 Параметр сведений об исключении 0 записи исключения.
4 Параметр сведений об исключении 0 записи исключения.

Причина

Чтобы интерпретировать эту ошибку проверка, необходимо определить, какое исключение было создано.

Распространенные коды исключений:

  • 0x80000002: STATUS_DATATYPE_MISALIGNMENT

    Обнаружена ссылка на несровненные данные.

  • 0x80000003: STATUS_BREAKPOINT

    Точка останова или ASSERT обнаружена, когда отладчик ядра не был подключен к системе.

  • 0xC0000005: STATUS_ACCESS_VIOLATION

    Произошло нарушение доступа к памяти. (Параметр 4 проверка ошибки — адрес, к которому драйвер пытался получить доступ.)

Полный список кодов исключений см. в разделе Значения NTSTATUS. Коды исключений определяются в ntstatus.h, файле заголовка, который находится в комплекте драйверов Windows. Дополнительные сведения см. в разделе Файлы заголовков в комплекте драйверов Windows.

Комментарии

Если у вас нет возможности для отладки этой проблемы, можно использовать некоторые основные методы устранения неполадок, описанные в разделе Данные синего экрана. Если в сообщении об ошибке указан драйвер, отключите его или обратитесь к изготовителю за обновлениями драйверов.

Несовместимость оборудования

Убедитесь, что любое новое установленное оборудование совместимо с установленной версией Windows. Например, сведения о требуемом оборудовании можно получить в Windows 10 спецификациях.

Неисправный драйвер устройства или системная служба

Эта ошибка может быть вызвана неисправным драйвером устройства или системной службой. Проблемы с оборудованием, такие как несовместимость BIOS, конфликты памяти и конфликты IRQ, также могут привести к этой ошибке.

Если драйвер указан по имени в сообщении об ошибке проверка, отключите или удалите его. Отключите или удалите все недавно добавленные драйверы и службы. Если ошибка возникает во время последовательности запуска и системный раздел имеет формат файловой системы NTFS, вы можете использовать безопасный режим для отключения драйвера в диспетчер устройств.

Дополнительные сообщения об ошибках, которые могут помочь определить устройство или драйвер, вызывающие проверка 0x1E ошибок, см. в разделе Системный вход в Просмотр событий. Кроме того, запустите аппаратные диагностика, поставляемые производителем системы, особенно сканер памяти. Дополнительные сведения об этих действиях по устранению неполадок см. в руководстве владельца компьютера.

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

Решение

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

Код исключения 0x80000003 указывает, что была достигнута жестко заданная точка останова или утверждение, но система была запущена с параметром /NODEBUG . Эта проблема возникает редко. Если это происходит несколько раз, убедитесь, что отладчик ядра подключен и что система запущена с помощью коммутатора /DEBUG .

Если код исключения 0x80000002 возникает, кадр ловушки предоставляет дополнительные сведения.

Неизвестная причина

Если конкретная причина исключения неизвестна, попробуйте использовать следующую процедуру для получения трассировки стека.

Примечание

В этой процедуре предполагается, что можно найти NT!PspUnhandledExceptionInSystemThread. Однако в некоторых случаях, например при сбое нарушения доступа, вы не сможете найти NT!PspUnhandledExceptionInSystemThread. В этом случае найдите ntoskrnl!KiDispatchException. Третий параметр, передаваемый в эту функцию, — это адрес кадра ловушки. Используйте команду .trap (отображаемая рамка ловушки) с этим адресом, чтобы задать правильное значение контекста регистра. Затем можно выполнять трассировку стека и выполнять другие команды.

Получение трассировки стека

Чтобы получить трассировку стека в случае сбоя обычных процедур трассировки стека, выполните следующие действия:

  1. Используйте команду kb (display stack backtrace) для отображения параметров в трассировке стека. Найдите вызов NT!PspUnhandledExceptionInSystemThread. (Если эта функция отсутствует в списке, см. предыдущее примечание.)

  2. Первый параметр для NT!PspUnhandledExceptionInSystemThread является указателем на структуру. Указатель содержит указатели на except оператор :

    typedef struct _EXCEPTION_POINTERS {
        PEXCEPTION_RECORD ExceptionRecord;
        PCONTEXT ContextRecord;
        } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
    
    ULONG PspUnhandledExceptionInSystemThread(
        IN PEXCEPTION_POINTERS ExceptionPointers
        )
    

    Используйте команду dd (display memory) для этого адреса, чтобы отобразить необходимые данные.

  3. Первое полученное значение является записью исключения. Для записи исключения используйте команду .exr (display exception record).

    Второе значение — это запись контекста. Для записи контекста используйте команду CXR (запись контекста отображения).

  4. .cxr После выполнения команды используйте kb команду , чтобы отобразить трассировку стека на основе сведений о записи контекста. Эта трассировка стека указывает вызывающий стек, в котором возникло необработанное исключение.

Пример проверка ошибок

В следующем примере показана проверка 0x1E ошибок на процессоре x86:

kd> .bugcheck                 get the bug check data
Bugcheck code 0000001e
Arguments c0000005 8013cd0a 00000000 0362cffff

kd> kb                        start with a stack trace 
FramePtr  RetAddr   Param1   Param2   Param3   Function Name 
8013ed5c  801263ba  00000000 00000000 fe40cb00 NT!_DbgBreakPoint 
8013eecc  8013313c  0000001e c0000005 8013cd0a NT!_KeBugCheckEx+0x194
fe40cad0  8013318e  fe40caf8 801359ff fe40cb00 NT!PspUnhandledExceptionInSystemThread+0x18
fe40cad8  801359ff  fe40cb00 00000000 fe40cb00 NT!PspSystemThreadStartup+0x4a
fe40cf7c  8013cb8e  fe43a44c ff6ce388 00000000 NT!_except_handler3+0x47
00000000  00000000  00000000 00000000 00000000 NT!KiThreadStartup+0xe

kd> dd fe40caf8 L2            dump EXCEPTION_POINTERS structure
0xFE40CAF8  fe40cd88 fe40cbc4                   ..@...@.

kd> .exr fe40cd88             first DWORD is the exception record
Exception Record @ FE40CD88:
   ExceptionCode: c0000005
  ExceptionFlags: 00000000
  Chained Record: 00000000
ExceptionAddress: 8013cd0a
NumberParameters: 00000002
   Parameter[0]: 00000000
   Parameter[1]: 0362cfff

kd> .cxr fe40cbc4             second DWORD is the context record
CtxFlags: 00010017
eax=00087000 ebx=00000000 ecx=03ff0000 edx=ff63d000 esi=0362cfff edi=036b3fff
eip=8013cd0a esp=fe40ce50 ebp=fe40cef8 iopl=0         nv dn ei pl nz ac po cy
vip=0    vif=0
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010617
0x8013cd0a  f3a4             rep movsb

kd> kb                        kb gives stack for context record
ChildEBP RetAddr  Args to Child
fe40ce54 80402e09 ff6c4000 ff63d000 03ff0000 NT!_RtlMoveMemory@12+0x3e
fe40ce68 80403c18 ffbc0c28 ff6ce008 ff6c4000 HAL!_HalpCopyBufferMap@20+0x49
fe40ce9c fe43b1e4 ff6cef90 ffbc0c28 ff6ce009 HAL!_IoFlushAdapterBuffers@24+0x148
fe40ceb8 fe4385b4 ff6ce388 6cd00800 ffbc0c28 QIC117!_kdi_FlushDMABuffers@20+0x28
fe40cef8 fe439894 ff6cd008 ffb6c820 fe40cf4c QIC117!_cqd_CmdReadWrite@8+0x26e
fe40cf18 fe437d92 ff6cd008 ffb6c820 ff6e4e50 QIC117!_cqd_DispatchFRB@8+0x210
fe40cf30 fe43a4f5 ff6cd008 ffb6c820 00000000 QIC117!_cqd_ProcessFRB@8+0x134
fe40cf4c 80133184 ff6ce388 00000000 00000000 QIC117!_kdi_ThreadRun@4+0xa9
fe40cf7c 8013cb8e fe43a44c ff6ce388 00000000 NT!_PspSystemThreadStartup@8+0x40