Freigeben über


Fehlerüberprüfung 0x1E: KMODE_EXCEPTION_NOT_HANDLED

Die KMODE_EXCEPTION_NOT_HANDLED-Fehlerüberprüfung weist den Wert 0x0000001E auf. Die Fehlerüberprüfung zeigt an, dass ein Programm im Kernelmodus eine Ausnahme generiert hat, die der Fehlerhandler nicht abgefangen hat.

Wichtig

Dieser Artikel richtet sich an Programmierer*innen. Wenn Sie Microsoft-Kunde sind und auf Ihrem Computer ein Bluescreen-Fehlercode angezeigt wird, lesen Sie bitte Fehlerbehebung bei Bluescreen-Fehlern.

KMODE_EXCEPTION_NOT_HANDLED-Parameter

Parameter Beschreibung
1 Der Ausnahmecode, der nicht behandelt wurde.
2 Die Adresse, an der die Ausnahme aufgetreten ist.
3 Ausnahmeinformationsparameter 0 des Ausnahmedatensatzes.
4 Ausnahmeinformationsparameter 0 des Ausnahmedatensatzes.

Ursache

Um diese Fehlerüberprüfung zu interpretieren, müssen Sie feststellen, welche Ausnahme generiert wurde.

Zu den allgemeinen Ausnahmecodes gehören:

  • 0x80000002: STATUS_DATATYPE_MISALIGNMENT

    Es wurde ein nicht ausgerichteter Datenverweis gefunden.

  • 0x80000003: STATUS_BREAKPOINT

    Ein Haltepunkt oder ASSERT wurde festgestellt, wenn kein Kerneldebugger an das System angefügt wurde.

  • 0xC0000005: STATUS_ACCESS_VIOLATION

    Es ist ein Speicherzugriffsverstoß aufgetreten. (Parameter 4 der Fehlerüberprüfung ist die Adresse, auf die der Treiber zugegriffen hat.)

Eine vollständige Liste der Ausnahmecodes finden Sie unter NTSTATUS-Werte. Die Ausnahmecodes werden in ntstatus.h definiert, einer Headerdatei, die sich im Windows Driver Kit befindet. (Weitere Informationen finden Sie unter Headerdateien im Windows Driver Kit).

Hinweise

Wenn Sie nicht bereit sind, dieses Problem zu debuggen, können Sie einige grundlegende Problembehandlungstechniken verwenden, die unter "Fehlerüberprüfungs-Bluescreen-Daten analysieren" beschrieben werden. Wenn in der Fehlerüberprüfungsmeldung ein Treiber angegeben ist, deaktivieren Sie den Treiber oder erkundigen Sie sich beim Hersteller nach Treiberupdates.

Hardware-Inkompatibilität

Bestätigen Sie, dass die neu installierte Hardware mit der installierten Windows-Version kompatibel ist. Informationen zur benötigten Hardware finden Sie beispielsweise unter Windows 10-Spezifikationen.

Fehlerhafter Gerätetreiber oder Systemdienst

Ein fehlerhafter Gerätetreiber oder Systemdienst kann diesen Fehler verursachen. Auch Hardwareprobleme wie BIOS-Inkompatibilitäten, Arbeitsspeicherkonflikte und IRQ-Konflikte können diesen Fehler verursachen.

Wenn ein Treiber in der Fehlerüberprüfungsmeldung anhand des Namens aufgeführt ist, deaktivieren oder entfernen Sie diesen Treiber. Deaktivieren oder entfernen Sie alle Treiber oder Dienste, die vor Kurzem hinzugefügt wurden. Wenn der Fehler während der Startreihenfolge auftritt und die Systempartition als NTFS-Dateisystem formatiert ist, können Sie den Treiber möglicherweise im abgesicherten Modus im Geräte-Manager deaktivieren.

Suchen Sie im Systemprotokoll in der Ereignisanzeige nach weiteren Fehlermeldungen, die Ihnen dabei helfen können, das Gerät oder den Treiber zu identifizieren, das/der die Fehlerüberprüfung 0x1E verursacht. Führen Sie auch Hardwarediagnosen aus, die vom Systemhersteller bereitgestellt werden, insbesondere den Speicherscanner. Weitere Informationen zu diesen Schritten zur Problembehandlung finden Sie im Handbuch des Besitzers für Ihren Computer.

Der Fehler, der diese Meldung generiert, kann nach dem ersten Neustart während des Windows-Setups oder nach Abschluss des Setups auftreten. Eine mögliche Ursache des Fehlers ist eine System-BIOS-Inkompatibilität. Sie können BIOS-Probleme beheben, indem Sie die System-BIOS-Version aktualisieren.

Lösung

Möglicherweise ist es schwierig, beim Debuggen dieses Problems eine Stapelablaufverfolgung zu erhalten. Die Ausnahmeadresse (Parameter 2) sollte den Treiber oder die Funktion identifizieren, der das Problem verursacht hat.

Ausnahmecode 0x80000003 gibt an, dass ein hartcodierter Haltepunkt oder eine Assertion getroffen wurde, das System jedoch mit dem /NODEBUG Switch gestartet wurde. Dieses Problem sollte kaum auftreten. Wenn sie wiederholt auftritt, stellen Sie sicher, dass ein Kerneldebugger verbunden ist und dass das System mit dem /DEBUG Switch gestartet wird.

Wenn Ausnahmecode 0x80000002 auftritt, liefert der Trapframe weitere Informationen.

Unbekannte Ursache.

Wenn die spezifische Ursache der Ausnahme unbekannt ist, sollten Sie die folgende Prozedur verwenden, um eine Stapelablaufverfolgung abzurufen.

Hinweis

Bei diesem Verfahren wird davon ausgegangen, dass Sie suchen NT!PspUnhandledExceptionInSystemThreadkönnen. In einigen Fällen, z. B. bei einem Zugriffsverletzungsabsturz, können Sie jedoch nicht finden NT!PspUnhandledExceptionInSystemThread. Suchen Sie in diesem Fall nach ntoskrnl!KiDispatchException. Der dritte Parameter, der an diese Funktion übergeben wird, ist eine Trapframeadresse. Verwenden Sie den Befehl TRAP (Display Trap Frame) mit dieser Adresse, um den Registerkontext auf den richtigen Wert festzulegen. Anschließend können Sie Stapelüberwachungen ausführen und andere Befehle ausstellen.

Abrufen einer Stapelablaufverfolgung

So rufen Sie eine Stapelablaufverfolgung ab, wenn normale Stapelablaufverfolgungsprozeduren fehlschlagen:

  1. Verwenden Sie den Befehl kb (display stack backtrace), um Parameter im Stack-Trace anzuzeigen. Suchen Sie nach dem Anruf an NT!PspUnhandledExceptionInSystemThread. (Wenn diese Funktion nicht aufgeführt ist, lesen Sie die vorherige Notiz.)

  2. Der erste Parameter ist NT!PspUnhandledExceptionInSystemThread ein Zeiger auf eine Struktur. Der Zeiger enthält Zeiger auf eine except Anweisung:

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

    Verwenden Sie den Befehl dd (Anzeigespeicher) auf dieser Adresse, um die benötigten Daten anzuzeigen.

  3. Der erste abgerufene Wert ist ein Ausnahmedatensatz. Verwenden Sie für den Ausnahmedatensatz den Befehl ".exr" (Ausnahmedatensatz anzeigen).

    Der zweite Wert ist ein Kontextdatensatz. Verwenden Sie für den Kontextdatensatz den Befehl .cxr (Anzeigekontextdatensatz).

  4. Nachdem der .cxr Befehl ausgeführt wurde, verwenden Sie den kb Befehl, um eine Stapelablaufverfolgung anzuzeigen, die auf den Kontextdatensatzinformationen basiert. Diese Stapelablaufverfolgung gibt den Aufrufstapel an, in dem die unbehandelte Ausnahme aufgetreten ist.

Beispielfehlerprüfung

Das folgende Beispiel zeigt eine Fehlerüberprüfung 0x1E auf einem x86-Prozessor:

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