Share via


Fehlerüberprüfung 0x3B: SYSTEM_SERVICE_EXCEPTION

Die SYSTEM_SERVICE_EXCEPTION Fehlerüberprüfung hat den Wert 0x0000003B. Dies gibt an, dass eine Ausnahme beim Ausführen einer Routine aufgetreten ist, die von nicht privilegiertem Code zu privilegiertem Code überwechselt.

Wichtig

Dieser Artikel richtet sich an Programmierer. Wenn Sie ein Kunde sind, der während der Verwendung Ihres Computers einen Bluescreen-Fehlercode erhalten hat, finden Sie weitere Informationen unter Behandeln von Bluescreenfehlern.

SYSTEM_SERVICE_EXCEPTION Parameter

Parameter BESCHREIBUNG
1 Die Ausnahme, die die Fehlerüberprüfung verursacht hat.
2 Die Adresse der Anweisung, die die Fehlerüberprüfung verursacht hat
3 Die Adresse des Kontextdatensatzes für die Ausnahme, die die Fehlerüberprüfung verursacht hat
4 0 (Nicht verwendet)

Ursache

Dieser Stoppcode gibt an, dass beim Ausführen von Code eine Ausnahme vorhanden war, und der Thread, der sich darunter befand, ein Systemthread ist.

Dies kann passieren, weil ein NULL-Zeiger deferiert wurde oder auf eine zufällig falsche Adresse zugegriffen wurde. Dies kann wiederum durch vorzeitiges Freigeben von Arbeitsspeicher oder beschädigung der Datenstruktur verursacht werden.

Die Ausnahmeinformationen, die in Parameter 1 zurückgegeben werden, werden in NTSTATUS-Werten beschrieben. Die Ausnahmecodes sind in ntstatus.h definiert, einer Headerdatei, die vom Windows Driver Kit bereitgestellt wird. (Weitere Informationen finden Sie unter Headerdateien im Windows Driver Kit).

Zu den gängigen Ausnahmecodes gehören:

  • 0x80000003: STATUS_BREAKPOINT

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

  • 0xC0000005: STATUS_ACCESS_VIOLATION

    Es ist eine Speicherzugriffsverletzung aufgetreten.

Lösung

Um die spezifische Ursache zu ermitteln und eine Codekorrektur zu erstellen, sind Programmiererfahrung und Zugriff auf den Quellcode des fehlerhaften Moduls erforderlich.

Verwenden Sie zum Debuggen dieses Problems den Befehl .cxr (Anzeigekontextdatensatz) mit Parameter 3, und verwenden Sie dann kb (Display Stack Backtrace). Sie können auch einen Haltepunkt im Code festlegen, der diesem Stoppcode vorangeht, und versuchen, den fehlerbehafteten Code in einem einzelnen Schritt weiterzuleiten. Verwenden Sie die Befehle u, ub, uu (unassemble), um den Code des Assemblyprogramms anzuzeigen.

Die Debuggererweiterung !analyze zeigt Informationen zur Fehlerüberprüfung an und kann bei der Ermittlung der Grundursache hilfreich sein. Das folgende Beispiel wird von !analyze ausgegeben.

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.
...

Weitere Informationen zu WinDbg und !analyze finden Sie in den folgenden Themen:

Weitere Informationen zur Windows-Speichernutzung finden Sie unter Windows Internals 7. Edition Part 1 von Pavel Yosifovich, Mark E. Russinovich, David A. Solomon und Alex Ionescu.

Identifizieren des Treibers

Wenn ein Treiber identifiziert werden kann, der für den Fehler verantwortlich ist, wird sein Name auf dem blauen Bildschirm gedruckt und im Speicher am Speicherort (PUNICODE_STRING) KiBugCheckDriver gespeichert. Sie können dx (Debuggerobjektmodellausdruck anzeigen) verwenden, einen Debuggerbefehl, um folgendes anzuzeigen: dx KiBugCheckDriver.

kd> dx KiBugCheckDriver
KiBugCheckDriver                 : 0xffffe10b9991e3e8 : "nvlddmkm.sys" [Type: _UNICODE_STRING *]

Verwenden Sie die Erweiterung !error , um Informationen zum Ausnahmecode in Parameter 1 anzuzeigen. Es folgt ein Beispiel für die Ausgabe von !error.

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.

Sehen Sie sich die STACK TEXT-Ausgabe von WinDbg an, um Hinweise darauf zu finden, was ausgeführt wurde, als der Fehler aufgetreten ist. Wenn mehrere Dumpdateien verfügbar sind, vergleichen Sie deren Informationen, um nach allgemeinem Code zu suchen, der sich im Stapel befindet. Verwenden Sie Debuggerbefehle wie kb (Stapelrückverfolgung anzeigen), um den fehlerbehafteten Code zu untersuchen.

Verwenden Sie den folgenden Befehl, um Module aufzulisten, die in den Arbeitsspeicher geladen werden: lm t n

Verwenden Sie !memusage , um den allgemeinen Zustand des Systemspeichers zu untersuchen. Sie können auch die Befehle !pte und !pool verwenden, um bestimmte Speicherbereiche zu untersuchen.

In der Vergangenheit wurde dieser Fehler mit einer übermäßigen Nutzung des ausgelagerten Pools in Verbindung gebracht, die möglicherweise aufgrund von Übergängen von Grafiktreibern im Benutzermodus und der Übergabe fehlerhafter Daten an den Kernelcode auftreten kann. Wenn Sie vermuten, dass dies der Fall ist, verwenden Sie die Pooloptionen in Driver Verifier, um zusätzliche Informationen zu sammeln.

Treiberüberprüfung

Driver Verifier ist ein Tool, das in Echtzeit ausgeführt wird, um das Verhalten von Treibern zu untersuchen. Beispielsweise überprüft driver verifier die Verwendung von Arbeitsspeicherressourcen, z. B. Speicherpools. Wenn Fehler bei der Ausführung von Treibercode identifiziert werden, wird proaktiv eine Ausnahme erstellt, damit dieser Teil des Treibercodes genauer untersucht werden kann. Der Treiberüberprüfungs-Manager ist in Windows integriert und auf allen Windows-PCs verfügbar.

Um den Treiberüberprüfungs-Manager zu starten, geben Sie verifier an einer Eingabeaufforderung ein. Sie können konfigurieren, welche Treiber überprüft werden sollen. Der Code, der Die Treiber überprüft, verursacht bei der Ausführung zusätzlichen Mehraufwand. Versuchen Sie daher, die möglichst geringe Anzahl von Treibern zu überprüfen. Weitere Informationen finden Sie unter Treiberüberprüfung.

Hinweise

Befolgen Sie die folgenden Vorschläge für die allgemeine Problembehandlung von Windows-Fehlerprüfcodes:

  • Wenn kürzlich neue Gerätetreiber oder Systemdienste hinzugefügt wurden, versuchen Sie, diese zu entfernen oder zu aktualisieren. Versuchen Sie, zu ermitteln, was sich im System geändert hat, wodurch der neue Fehlerüberprüfungscode angezeigt wurde.

  • Suchen Sie in Geräte-Manager, um festzustellen, ob Geräte mit einem Ausrufezeichen (!) gekennzeichnet sind, was auf ein Problem hinweist. Überprüfen Sie das in den Eigenschaften angezeigte Ereignisprotokoll auf einen fehlerhaften Gerätetreiber. Versuchen Sie, den entsprechenden Treiber zu aktualisieren.

  • Überprüfen Sie das Systemprotokoll in Ereignisanzeige auf zusätzliche Fehlermeldungen, die möglicherweise helfen, das Gerät oder den Treiber zu ermitteln, das den Fehler verursacht. Suchen Sie im Systemprotokoll nach kritischen Fehlern, die in demselben Zeitfenster wie der Bluescreen aufgetreten sind.

  • Wenn Sie dem System kürzlich Hardware hinzugefügt haben, versuchen Sie, diese zu entfernen oder zu ersetzen. Oder erkundigen Sie sich beim Hersteller, ob Patches verfügbar sind.

Weitere allgemeine Informationen zur Problembehandlung finden Sie unter Bluescreen-Daten.

Weitere Informationen

Absturzabbildanalyse mithilfe der Windows-Debugger (WinDbg)

Analysieren einer Kernel-Mode-Dumpdatei mit WinDbg

Bug Check Code Reference (Referenz zu Fehlerüberprüfungscodes)