Fehlerprüfung 0x50: PAGE_FAULT_IN_NONPAGED_AREA

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

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.

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: Ausführungsvorgang

Nach Windows 1507 (TH1) Version – x86

0: Lesevorgang

2: Schreibvorgang

10: Ausführungsvorgang

Nach Windows 1507 (TH1) Version – Arm

0: Lesevorgang

1: Schreibvorgang

8: Ausführungsvorgang

Vor Windows 1507 (TH1) Version x64/x86

0: Lesevorgang

1: Schreibvorgang

3

Adresse, auf die der Speicher verweist (sofern bekannt)

4

Typ des Seitenfehlers

0x0 – NONPAGED_BUGCHECK_FREED_PTE – Die Adresse, auf die verwiesen wird, befindet sich in 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 – Im Kontext eines Prozesses ohne Sitzung wurde versucht, auf eine Sitzungsraumadresse zu verweisen. In der Regel bedeutet dies, dass der Aufrufer nicht ordnungsgemäß versucht, auf eine Sitzungsadresse zuzugreifen, ohne einen Objektverweis auf den richtigen Prozess zu erhalten und ihn zuerst anzufügen. Diese Fehlerüberprüfung & 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 (unzulässige) virtuelle Adresse (Parameter 1) zu verweisen. Der Aufrufer sollte niemals versuchen, auf diese Adresse zuzugreifen.

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

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

Ursache

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

Dies kann auch nach der Installation von fehlerhafter Hardware oder bei einem Ausfall der installierten Hardware auftreten (in der Regel im Zusammenhang mit defekten RAM, sei es Standard Arbeitsspeicher, L2-RAM-Cache oder Video-RAM).

Hinweise

Ereignisprotokoll: Überprüfen Sie die system log in Ereignisanzeige auf zusätzliche Fehlermeldungen, die dazu beitragen können, das Gerät oder den Treiber zu ermitteln, das den Fehler verursacht. Weitere Informationen finden Sie unter Open 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 dieser auf dem Bluescreen aufgeführt wurde oder im Ereignisprotokoll vorhanden ist. Wenden Sie sich an den Treiberanbieter, um zu überprüfen, ob ein aktualisierter Treiber verfügbar ist.

Beheben eines fehlerhaften Systemdienstproblems: Deaktivieren Sie den Dienst, und vergewissern Sie sich, dass der Fehler dadurch behoben wird. Wenn ja, wenden Sie sich an den Hersteller des Systemdiensts, um ein mögliches Update zu erfahren. Wenn der Fehler während des Systemstarts auftritt, untersuchen Sie die Windows-Reparaturoptionen. Weitere Informationen finden Sie unter Wiederherstellungsoptionen in Windows 10.

Beheben eines Antivirensoftwareproblems: Deaktivieren Sie das Programm, und vergewissern Sie sich, dass der Fehler dadurch behoben wird. Wenn dies der Fall ist, wenden Sie sich an den Hersteller des Programms, um ein mögliches Update zu erfahren.

Beheben eines problems mit einem beschädigten NTFS-Volume: 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 die Hersteller des Festplattentreibersystems, um alle Diagnosetools zu finden, die sie für das Festplattenuntersystem bereitstellen.

Windows-Speicherdiagnose: Führen Sie das Windows-Speicherdiagnosetool aus, um den physischen Speicher zu testen. Wählen Sie die Schaltfläche Start und dann die Systemsteuerung aus. Geben Sie im Suchfeld Arbeitsspeicher ein, und wählen Sie dann Arbeitsspeicherprobleme Ihres Computers diagnostizieren aus. Nachdem der Test ausgeführt wurde, verwenden Sie 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 sie, um festzustellen, ob der Fehler auftritt. Wenn vorhandene Hardware ausgefallen ist, entfernen oder ersetzen Sie die fehlerhafte Komponente. Sie sollten Hardware Diagnose ausführen, die vom Systemhersteller bereitgestellt werden. Ausführliche Informationen zu diesen Verfahren finden Sie im Benutzerhandbuch für Ihren Computer.

Allgemeine Informationen zur Problembehandlung für Bluescreens finden Sie unter Bluescreen-Daten und erweiterte Problembehandlung für Fehler beim Beenden oder Bluescreen-Fehler.

Lösung

Um die spezifische 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 freigegebenen Speicher oder ist einfach ungültig. Dies kann nicht durch einen Try - außer Handler - geschützt werden, es kann nur durch einen Test oder ähnliche Programmiertechniken geschützt werden. Informationen zur Pufferbehandlung und zur Überprüfung in Dateisystemtreibern finden Sie unter Pufferbehandlung. Informationen zu bewährten Methoden für die Treiberentwicklung und zu häufigen Fehlern von Treiberentwicklern finden Sie unter Bewährte Methoden für die Entwicklung von Treibern für Surface Team.

Verwenden Sie die !analyze-Debugerweiterung 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 Beispiel gibt Parameter 2 an, dass die Fehlerüberprüfung aufgetreten ist, wenn ein Bereich des Arbeitsspeichers gelesen wurde.

Sehen Sie sich die gesamte !analyze-Ausgabe an, um Informationen darüber zu erhalten, was vorging, als die Fehlerüberprüfung aufgetreten ist. Untersuchen Sie MODULE_NAME: und die FAULTING_MODULE: um zu sehen, welcher Code beim Verweisen auf den ungültigen Systemspeicher beteiligt ist.

Sehen Sie sich stack text an, um Hinweise darauf zu geben, was ausgeführt wurde, als der Fehler aufgetreten ist. Wenn mehrere Speicherabbilddateien verfügbar sind, vergleichen Sie die Informationen, um nach allgemeinem Code zu suchen, der sich im Stapel befindet.

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

TRAP_FRAME:  fffff98112e8b3d0 -- (.trap 0xfffff98112e8b3d0)

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

Verwenden Sie , lm t n um Module aufzulisten, die in den Arbeitsspeicher geladen werden.

Verwenden Sie den Befehl d, da, db, dc, dd, dD, df, dp, dq, du, dw (Anzeigespeicher), um die Bereiche des Arbeitsspeichers zu untersuchen, auf die von 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, dem Bereich des Arbeitsspeichers, der gelesen werden wollte.

Verwenden Sie den Befehl !address , um parameter 3 anzuzeigen, der die Adresse der Anweisung ist, die auf den fehlerhaften Arbeitsspeicher 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 die zu untersuchen, die auf den fehlerhaften Arbeitsspeicher verwiesen hat. Weitere Informationen zum X64-Prozessor und zur 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 Sie ub , um rückwärts von der angegebenen Adresse zu trennen.

Verwenden Sie den Befehl r (Registers), um zu untersuchen, was ausgeführt wurde, als der 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 fffff80240d322f9 ist im Anweisungszeigerregister rip.

Der !pte Befehl und !pool kann auch zum Untersuchen des Arbeitsspeichers verwendet werden.

Verwenden Sie !memusage und , um den allgemeinen Zustand des Systemspeichers zu untersuchen.

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

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 Speicherressourcen, z. B. Speicherpools. Wenn Fehler bei der Ausführung von Treibercode auftreten, wird proaktiv eine Ausnahme erstellt, damit dieser Teil des Treibercodes genauer überprüft werden kann. Der Treiberüberprüfungs-Manager ist in Windows integriert und auf allen Windows-PCs verfügbar. Verwenden Sie die Treiberüberprüfung, um die spezifische Ursache eines Fehlers zu ermitteln.

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 überprüft, dass Treiber während der Ausführung mehr Aufwand verursachen. Versuchen Sie daher, die kleinste Anzahl von Treibern so wie möglich zu überprüfen. Wenn ein fehlerhafter Treiber identifiziert wurde, wählen Sie ihn aus. Weitere Informationen finden Sie unter Treiberüberprüfung.

Weitere Informationen

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