Fehlerüberprüfung 0x50: PAGE_FAULT_IN_NONPAGED_AREA

Die PAGE_FAULT_IN_NONPAGED_AREA Fehlerüberprüfung hat den Wert 0x00000050. Dies gibt an, dass auf einen ungültigen Systemspeicher verwiesen wurde. In der Regel ist die Speicheradresse falsch, oder die Speicheradresse verweist auf freigegebenen Arbeitsspeicher.

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.

PAGE_FAULT_IN_NONPAGED_AREA Parameter

Parameter Beschreibung

1

Speicheradresse, auf die verwiesen wird

2

Nach Windows 1507 (TH1)-Version – x64

0: Lesevorgang

2: Schreibvorgang

10: Vorgang ausführen

Nach Windows 1507 (TH1)-Version – x86

0: Lesevorgang

2: Schreibvorgang

10: Vorgang ausführen

Nach Windows 1507 (TH1)-Version – Arm

0: Lesevorgang

1: Schreibvorgang

8: Vorgang ausführen

Vor Windows 1507 (TH1) Version x64 / x86

0: Lesevorgang

1: Schreibvorgang

3

Adresse, die auf den Speicher verwiesen hat (falls bekannt)

4

Typ des Seitenfehlers

0x0 - NONPAGED_BUGCHECK_FREED_PTE - Die Adresse, auf die verwiesen wird, befindet sich auf einem als frei gekennzeichneten Seitentabelleneintrag.

0x2 - NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE Die Adresse, auf die verwiesen wird, verfügt nicht über einen gültigen aktiven Seitentabelleneintrag.

0x03 – NONPAGED_BUGCHECK_WRONG_SESSION – Es wurde versucht, auf eine Sitzungsraumadresse im Kontext eines Prozesses ohne Sitzung zu verweisen. Dies bedeutet in der Regel, dass der Aufrufer nicht ordnungsgemäß versucht, auf eine Sitzungsadresse zuzugreifen, ohne einen Objektverweis auf den richtigen Prozess zu erhalten und zuerst an sie anzufügen. Dieser Fehlerüberprüfungs-& Untertyp wurde zuletzt in Windows 10 RS3 verwendet. In Windows 10 RS4 und höher wird dieser Fehler stattdessen als 0x02 (NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE) angezeigt.

0x04 - NONPAGED_BUGCHECK_VA_NOT_CANONICAL - Es wurde versucht, auf eine nicht kanonische (illegale) virtuelle Adresse (Parameter 1) zu verweisen. Der Anrufer sollte nicht jemals versuchen, auf diese Adresse zuzugreifen.

0xF - NONPAGED_BUGCHECK_USER_VA_ACCESS_INCONSISTENT - Kernelmoduscode hat versucht, auf eine virtuelle Benutzermodusadresse zuzugreifen, wenn dieser Zugriff nicht zulässig ist.

Wenn der für den Fehler zuständige Treiber identifiziert werden kann, wird sein Name auf dem blauen Bildschirm gedruckt und am Speicherort (PUNICODE_STRING) KiBugCheckDriver im Speicher gespeichert. Sie können den Debugger-DX-Befehl verwenden, um dies anzuzeigen - dx KiBugCheckDriver.

Ursache

Fehlerüberprüfung 0x50 kann durch die Installation eines fehlerhaften Systemdiensts oder fehlerhaften Treibercodes verursacht werden. Antivirensoftware kann diesen Fehler auch auslösen, wie ein beschädigtes NTFS-Volume.

Es kann auch nach der Installation fehlerhafter Hardware oder im Falle eines Ausfalls der installierten Hardware auftreten (in der Regel im Zusammenhang mit defekten RAM, sei es Hauptspeicher, L2-RAM-Cache oder Video-RAM).

Hinweise

Ereignisprotokoll: Ü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. Weitere Informationen finden Sie unter Öffnen der Ereignisanzeige. Suchen Sie im Systemprotokoll nach kritischen Fehlern, die in demselben Zeitfenster wie der Bluescreen aufgetreten sind.

Auflösen eines fehlerhaften Treibers: Überprüfen Sie den Namen des Treibers, wenn dies auf dem blauen Bildschirm aufgeführt wurde oder im Ereignisprotokoll vorhanden ist. Wenden Sie sich an den Treiberanbieter, um festzustellen, ob ein aktualisierter Treiber verfügbar ist.

Beheben eines fehlerhaften Systemdienstproblems: Deaktivieren Sie den Dienst, und bestätigen Sie, dass dies den Fehler behebt. Falls ja, wenden Sie sich an den Hersteller des Systemdiensts, um ein mögliches Update zu erhalten. Wenn der Fehler beim Systemstart auftritt, untersuchen Sie die Windows-Reparaturoptionen. Weitere Informationen finden Sie unter Wiederherstellungsoptionen in Windows 10.

Beheben eines Antivirensoftwareproblems: Deaktivieren Sie das Programm, und bestätigen Sie, dass dies den Fehler behebt. Wenn dies der Fall ist, wenden Sie sich an den Hersteller des Programms über ein mögliches Update.

Beheben eines beschädigten NTFS-Volumeproblems: Führen Sie Chkdsk /f /r aus, um Datenträgerfehler zu erkennen und zu reparieren. Sie müssen das System neu starten, bevor die Datenträgerüberprüfung auf einer Systempartition beginnt. Wenden Sie sich an den Hersteller des Festplattensystems, um die Diagnosetools zu finden, die dieser für das Festplattensubsystem bereitstellt.

Windows-Speicherdiagnose: Führen Sie das Windows-Speicherdiagnosetool aus, um den physischen Speicher zu testen. Wählen Sie die Schaltfläche Start und wählen Sie dann im Menü Start die Option Systemsteuerung aus. Geben Sie im Suchfeld „Speicher“ ein und wählen Sie dann Speicherprobleme Ihres Computers diagnostizieren.‌ Verwenden Sie nach Abschluss des Tests die Ereignisanzeige, um die Ergebnisse im Systemprotokoll anzuzeigen. Suchen Sie nach dem Eintrag MemoryDiagnostics-Results, um die Ergebnisse anzuzeigen.

Beheben eines fehlerhaften Hardwareproblems: Wenn dem System kürzlich Hardware hinzugefügt wurde, entfernen Sie es, um festzustellen, ob der Fehler rekursiert wird. Wenn bei vorhandener Hardware ein Fehler aufgetreten ist, entfernen oder ersetzen Sie die fehlerhafte Komponente. Sie sollten die vom Systemhersteller bereitgestellte Hardwarediagnose ausführen. Ausführliche Informationen zu diesen Verfahren finden Sie im Handbuch des Besitzers für Ihren Computer.

Allgemeine Informationen zur Fehlerbehebung bei Bluescreens finden Sie unter Bluescreendaten mithilfe der Fehlerprüfung analysieren und Erweiterte Fehlerbehebung bei Stoppfehlern oder Bluescreenfehlern.

Lösung

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

In der Regel befindet sich die referenzierte Adresse im freien Speicher oder ist einfach ungültig. Dies kann nicht durch einen Versuch geschützt werden , mit Ausnahme des Handlers- es kann nur durch eine Probe oder ähnliche Programmiertechniken geschützt werden. Informationen zur Pufferverarbeitung und -probe in Dateisystemtreibern finden Sie unter Pufferbehandlung. Informationen zu bewährten Methoden für die Treiberentwicklung und häufige Fehler von Treiberentwicklern finden Sie unter Bewährte Methoden für die Entwicklung von Surface-Teamtreibern.

Verwenden Sie die Debugerweiterung !analyze mit der Option -v ausführlich, um Informationen zur Fehlerüberprüfung anzuzeigen, um die Ursache zu ermitteln.

2: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced.  This cannot be protected by try-except.
Typically the address is just plain bad or it is pointing at freed memory.
Arguments:
Arg1: ffffffff00000090, memory referenced.
Arg2: 0000000000000000, value 0 = read operation, 1 = write operation.
Arg3: fffff80240d322f9, If non-zero, the instruction address which referenced the bad memory
	address.
Arg4: 000000000000000c, (reserved)

In diesem Beispielparameter 2 wird angegeben, dass die Fehlerüberprüfung aufgetreten ist, wenn ein Speicherbereich gelesen wurde.

Sehen Sie sich alle !analyze-Ausgabe an, um Informationen darüber zu erhalten, was beim Auftreten der Fehlerüberprüfung passiert ist. Untersuchen Sie MODULE_NAME: und die FAULTING_MODULE: Um festzustellen, welcher Code an der Referenzierung des ungültigen Systemspeichers beteiligt ist.

Sehen Sie sich den STACK TEXT an, um Hinweise darauf zu geben, was beim Auftreten des Fehlers ausgeführt wurde. Wenn mehrere Dumpdateien verfügbar sind, vergleichen Sie Informationen, um nach allgemeinem Code zu suchen, der sich im Stapel befindet.

Verwenden Sie den in der !analyze-Ausgabe bereitgestellten Befehl .trap, um den Kontext festzulegen.

TRAP_FRAME:  fffff98112e8b3d0 -- (.trap 0xfffff98112e8b3d0)

Verwenden Sie Debuggerbefehle, wie kb (Display Stack Backtrace), um den fehlerhaften Code zu untersuchen.

Mit lm t n önnen Sie die in den Speicher geladenen Module auflisten.

Verwenden Sie den Befehl d, da, db, dc, dd, dD, df, dp, dq, du, dw (Anzeigespeicher), um die Speicherbereiche zu untersuchen, auf die durch Parameter 1 und Parameter 3 verwiesen wird.

2: kd> db ffffffff00000090
ffffffff`00000090  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000a0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000b0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000c0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000d0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000e0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000f0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`00000100  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????

In diesem Fall sieht es nicht so aus, als gäbe es Daten in diesem Speicherbereich in Parameter 1, also dem Speicherbereich, der gelesen werden soll.

Verwenden Sie den Befehl!address, um den Parameter 3 zu betrachten. Dabei handelt es sich um die Adresse der Anweisung, die auf den fehlerhaften Speicher verweist.

2: kd> !address fffff80240d322f9
Usage:                  Module
Base Address:           fffff802`40ca8000
End Address:            fffff802`415fb000
Region Size:            00000000`00953000
VA Type:                BootLoaded
Module name:            ntoskrnl.exe
Module path:            [\SystemRoot\system32\ntoskrnl.exe]

Verwenden Sie u, ub, uu (Unassemble)Dissasemble mit Parameter 3, um zu untersuchen, welche auf den fehlerhaften Speicher verwiesen hat. Weitere Informationen zur X64-Prozessor- und Assemblysprache finden Sie unter Der X64-Prozessor.

2: kd> u fffff80240d322f9 
nt!RtlSubtreePredecessor+0x9:
fffff802`40d322f9 488b4810        mov     rcx,qword ptr [rax+10h]
fffff802`40d322fd eb07            jmp     nt!RtlSubtreePredecessor+0x16 (fffff802`40d32306)
fffff802`40d322ff 488bc1          mov     rax,rcx
fffff802`40d32302 488b4910        mov     rcx,qword ptr [rcx+10h]
fffff802`40d32306 4885c9          test    rcx,rcx
fffff802`40d32309 75f4            jne     nt!RtlSubtreePredecessor+0xf (fffff802`40d322ff)
fffff802`40d3230b c3              ret
fffff802`40d3230c c3              ret

Verwenden Sieub, um von einer angegebenen Adresse aus rückwärts zu zerlegen.

Verwenden Sie den Befehl r(Registers), um zu untersuchen, was als Systemfehler überprüft wurde.

2: kd> r
Last set context:
rax=ffffffff00000080 rbx=0000000000000000 rcx=ffffa68337cb7028
rdx=7a107838c48dfc00 rsi=0000000000000000 rdi=0000000000000000
rip=fffff80240d322f9 rsp=ffff840c96510958 rbp=ffffffffffffffff
 r8=ffffffffffffffff  r9=0000000000000000 r10=7ffffffffffffffc
r11=ffff840c96510a10 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0         nv up ei ng nz na pe nc
cs=0010  ss=0018  ds=0000  es=0000  fs=0000  gs=0000             efl=00010282
nt!RtlSubtreePredecessor+0x9:
fffff802`40d322f9 488b4810        mov     rcx,qword ptr [rax+10h] ds:ffffffff`00000090=????????????????

In diesem Fall ist fffff80240d322f9 im Anweisungszeigerregister, rip.

Der !pte und der !pool Befehl können auch zum Untersuchen des Arbeitsspeichers verwendet werden.

Verwenden Sie !memusage, um den allgemeinen Zustand des Systemspeichers zu überprüfen.

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.

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 von Treibercode angezeigt werden, wird proaktiv eine Ausnahme erstellt, damit dieser Teil des Treibercodes weiter überprüft werden kann. Der Treiberprüfer-Manager ist in Windows integriert und ist auf allen Windows-PCs verfügbar. Verwenden Sie "Driver Verifier", um die spezifische Ursache eines Fehlers nachzuverfolgen.

Um den Treiberüberprüfungs-Manager zu starten, geben Sie Verifier an einer Eingabeaufforderung ein. Sie können konfigurieren, welche Treiber Sie überprüfen möchten. Der Code, der Treiber überprüft, verursacht während seiner Ausführung Overhead. Versuchen Sie daher, möglichst wenige Treiber zu überprüfen. Wenn ein fehlerhafter Treiber identifiziert wurde, wählen Sie ihn aus. Weitere Informationen finden Sie unter Treiberüberprüfung.

Siehe auch

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