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


Проверка ошибок 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 (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 (отображаемая запись исключения).

    Второе значение — это запись контекста. Для записи контекста используйте команду 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