Freigeben über


Fehlerüberprüfung 0x3B: SYSTEM_SERVICE_EXCEPTION

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

Wichtig

Dieser Artikel richtet sich an Programmierer*innen. Wenn Sie ein/eine Kund*in sind, der/die einen Bluescreen-Fehlercode bei der Benutzung eines Computers erhalten hat, lesen Sie bitte Fehlerbehebung bei Bluescreen-Fehlern.

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 bei der Ausführung des Codes eine Ausnahme aufgetreten ist und dass der darunter liegende Thread ein Systemthread ist.

Dies kann passieren, da auf einen NULL-Zeiger zugegriffen wurde oder auf eine zufällige falsche Adresse zugegriffen wurde. Die Ursachen hierfür können wiederum eine vorzeitige Freigabe des Speichers oder eine Beschädigung der Datenstruktur sein.

Die Ausnahmeinformationen, die in Parameter 1 zurückgegeben werden, werden in NTSTATUS-Werten beschrieben. Die Ausnahmecodes werden 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 allgemeinen Ausnahmecodes gehören:

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

Lösung

Um die konkrete 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 (Anzeigestapel-Backtrace). Sie können auch einen Haltepunkt in dem Code festlegen, der diesem Stoppcode vorausgeht, und versuchen, in einem Schritt vorwärts in den fehlerhaften Code zu gelangen. Verwenden Sie die Befehle u, ub, uu (unassemble), um den Assemblyprogrammcode anzuzeigen.

Die !analyze-Debugerweiterung zeigt Informationen zur Fehlerüberprüfung an und kann bei der Ermittlung der Ursache hilfreich sein. Das folgende Beispiel ist die Ausgabe von !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.
...

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

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

Identifizieren des Treibers

Wenn ein Treiber, der für den Fehler zuständig ist, identifiziert werden kann, wird sein Name auf dem blauen Bildschirm gedruckt und am Speicherort (PUNICODE_STRING) KiBugCheckDriver im Speicher gespeichert. Sie könnendx (display debugger object model expression), einen Debuggerbefehl, verwenden, um Folgendes anzuzeigen:dx KiBugCheckDriver.

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

Verwenden Sie die !Error-Erweiterung , 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 erhalten, was beim Auftreten des Fehlers ausgeführt wurde. Wenn mehrere Dumpdateien verfügbar sind, vergleichen deren Informationen, um nach allgemeinem Code zu suchen, der sich im Stapel befindet. Verwenden Sie Debuggerbefehle wie KB (Anzeigestapel-Backtrace), um den fehlerhaften Code zu untersuchen.

Verwenden Sie den folgenden Befehl, um Module auflisten, die im Arbeitsspeicher geladen sind: 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 übermäßiger Verwendung des seitenseitigen Pools verknüpft, was aufgrund von Grafiktreibern im Benutzermodus auftreten kann, die über das Überschreiten und Übergeben fehlerhafter Daten an den Kernelcode hinweggehen. Wenn Sie vermuten, dass dies der Fall ist, verwenden Sie die Pooloptionen in der Treiberüberprüfung, um zusätzliche Informationen zu sammeln.

Driver Verifier

Driver Verifier ist ein Tool, das in Echtzeit ausgeführt wird, um das Verhalten von Treibern zu untersuchen. Beispielsweise überprüft die Treiberüberprüfung die Verwendung von Speicherressourcen, z. B. Speicherpools. Wenn Fehler bei der Ausführung des Treibercodes festgestellt werden, wird proaktiv eine Ausnahme erstellt, damit dieser Teil des Treibercodes genauer untersucht werden kann. Der Treiberprüfer-Manager ist in Windows integriert und ist 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, erhöht den Aufwand bei der Ausführung. Versuchen Sie daher, die kleinste Anzahl möglicher Treiber zu überprüfen. Weitere Informationen finden Sie unter Treiberüberprüfung.

Hinweise

Für die allgemeine Problembehandlung von Windows-Fehlerüberprüfungscodes folgen Sie den folgenden Vorschlägen:

  • Wenn kürzlich neue Gerätetreiber oder Systemdienste hinzugefügt wurden, versuchen Sie, diese zu entfernen oder zu aktualisieren. Versuchen Sie herauszufinden, welche Änderungen im System zur Anzeige des neuen Fehlerprüfcodes geführt haben.

  • Überprüfen Sie im Geräte-Manager, ob Geräte mit einem Ausrufezeichen (!) markiert sind, was ein Problem angibt. Überprüfen Sie das Ereignisprotokoll, das in den Eigenschaften für jeden fehlerhaften Gerätetreiber angezeigt wird. Versuchen Sie, den entsprechenden Treiber zu aktualisieren.

  • Überprüfen Sie das Systemprotokoll in der Ereignisanzeige auf weitere Fehlermeldungen, die Ihnen helfen können, das Gerät oder den Treiber zu finden, das/der 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 Fehlerbehebung finden Sie unter Analysieren von Fehlerüberprüfungs-Bluescreen-Daten.

Weitere Informationen

Absturzabbildanalyse mit den Windows-Debuggern (WinDbg)

Analysieren einer Kernelmodus-Dump-Datei mit WinDbg

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