Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die PAGE_FAULT_IN_NONPAGED_AREA Fehlerüberprüfung hat den Wert 0x00000050. Dies weist darauf hin, dass auf ungültigen Systemspeicher verwiesen wurde. In der Regel ist die Speicheradresse falsch, oder die Speicheradresse zeigt auf freigegebenen Speicher.
Von Bedeutung
Dieser Artikel richtet sich an Programmierer. Wenn Sie ein Kunde sind, der während der Verwendung Ihres Computers einen Bluescreen-Fehlercode erhalten hat, lesen Sie Beheben von Bluescreen-Fehlern.
PAGE_FAULT_IN_NONPAGED_AREA Parameter
Parameter | BESCHREIBUNG |
---|---|
1 |
Speicheradresse, auf die verwiesen wird |
2 |
Nach Windows 1507 (TH1) Version - x64 0: Vorgang lesen arabische Ziffer: Schreibvorgang 10: Vorgang ausführen Nach Windows 1507 (TH1) Version - x86 0: Vorgang lesen arabische Ziffer: Schreibvorgang 10: Vorgang ausführen Nach Windows 1507 (TH1) Version - Arm 0: Vorgang lesen 1: Schreibvorgang 8: Vorgang ausführen Vor Windows 1507 (TH1) Version x64 / x86 0: Vorgang lesen 1: Schreibvorgang |
3 |
Adresse, die auf den Speicher verwiesen hat (falls bekannt) |
4 |
Art des Seitenfehlers 0x0 - NONPAGED_BUGCHECK_FREED_PTE - Die angegebene Adresse befindet sich in einem Seitentabelleneintrag, der als frei markiert ist. 0x2 - NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE Für die angegebene Adresse gibt es keinen gültigen aktiven Seitentabelleneintrag. 0x03 - NONPAGED_BUGCHECK_WRONG_SESSION - Es wurde versucht, auf eine Adresse des Sitzungsbereichs zu verweisen, und zwar im Kontext eines Prozesses, der über keine Sitzung verfügt. In der Regel bedeutet dies, dass der Aufrufer fälschlicherweise versucht, auf eine Sitzungsadresse zuzugreifen, ohne ordnungsgemäß einen Objektverweis auf den richtigen Prozess abzurufen und ihn zuerst anzufügen. Dieser Bugcheck & Subtype 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 niemals versuchen, auf diese Adresse zuzugreifen. 0xF - NONPAGED_BUGCHECK_USER_VA_ACCESS_INCONSISTENT - Der Code im Kernelmodus hat versucht, auf eine virtuelle Adresse im Benutzermodus zuzugreifen, wenn ein solcher Zugriff nicht zulässig ist. |
Wenn der für den Fehler verantwortliche Treiber identifiziert werden kann, wird sein Name auf dem blauen Bildschirm gedruckt und im Speicher an der Stelle (PUNICODE_STRING) KiBugCheckDriver abgelegt. Sie können den Befehl debugger dx verwenden, um dies anzuzeigen - dx KiBugCheckDriver
.
Ursache
Bug Check 0x50 kann durch die Installation eines fehlerhaften Systemdienstes oder fehlerhaften Treibercodes verursacht werden. Antivirensoftware kann diesen Fehler ebenfalls auslösen, ebenso wie ein beschädigtes NTFS-Volume.
Es kann auch nach der Installation fehlerhafter Hardware oder bei Ausfall der installierten Hardware auftreten (in der Regel im Zusammenhang mit defektem RAM, sei es Hauptspeicher, L2-RAM-Cache oder Video-RAM).
Bemerkungen
Ereignisprotokoll: Suchen Sie in der Ereignisanzeige des Systemprotokolls nach weiteren Fehlermeldungen, die Ihnen helfen können, 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.
Beheben eines fehlerhaften Treibers: Überprüfen Sie den Namen des Treibers, wenn dieser auf dem blauen Bildschirm aufgeführt war oder im Ereignisprotokoll vorhanden ist. Wenden Sie sich an den Treiberanbieter, um zu erfahren, ob ein aktualisierter Treiber verfügbar ist.
Beheben eines Problems mit dem fehlerhaften Systemservice: Deaktivieren Sie den Dienst, und vergewissern Sie sich, dass der Fehler dadurch behoben wird. Wenden Sie sich in diesem Fall an den Hersteller des Systemdienstes, um sich über ein mögliches Update zu informieren. Wenn der Fehler während des Systemstarts auftritt, untersuchen Sie die Windows-Reparaturoptionen. Weitere Informationen finden Sie unter Wiederherstellungsoptionen in Windows 10.
Beheben eines Problems mit Antivirensoftware: Deaktivieren Sie das Programm, und vergewissern Sie sich, dass der Fehler dadurch behoben wird. Wenn dies der Fall ist, wenden Sie sich bezüglich eines möglichen Updates an den Hersteller des Programms.
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 der Festplattenscan auf einer Systempartition beginnt. Wenden Sie sich an den Hersteller des Festplattentreibersystems, um Diagnosetools zu finden, die für das Festplattensubsystem bereitgestellt werden.
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 Speicherprobleme des Computers diagnostizieren aus. Verwenden Sie nach dem Ausführen des Tests die Ereignisanzeige, um die Ergebnisse im Systemprotokoll anzuzeigen. Suchen Sie nach dem Eintrag "MemoryDiagnostics-Results ", um die Ergebnisse anzuzeigen.
Beheben eines Problems mit fehlerhafter Hardware: Wenn dem System kürzlich Hardware hinzugefügt wurde, entfernen Sie sie, um zu sehen, ob der Fehler erneut auftritt. Wenn vorhandene Hardware ausgefallen ist, entfernen oder ersetzen Sie die fehlerhafte Komponente. Sie sollten die vom Systemhersteller bereitgestellte Hardwarediagnose ausführen. Weitere Informationen zu diesen Verfahren finden Sie in der Bedienungsanleitung Ihres Computers.
Allgemeine Informationen zur Fehlerbehebung bei Bluescreens finden Sie unter Analysieren von Fehlerüberprüfungs-Bluescreen-Daten und Erweiterte Problembehandlung bei Problemen mit Abbruchfehlern oder Bluescreenfehlern.
Beschluss
Um die spezifische Ursache zu ermitteln und einen Code-Fix 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-Handler geschützt werden -- außer durch einen Test oder ähnliche Programmiertechniken. Weitere Informationen zur Pufferbehandlung und zu Prüfpunkten 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 !analyze-Debugerweiterung mit der Option -v ausführlich, um Informationen über die 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 beim Lesen eines Speicherbereichs durchgeführt wurde.
Sehen Sie sich die gesamte !analyze-Ausgabe an, um Informationen darüber zu erhalten, was bei der Fehlerüberprüfung vor sich ging. Untersuchen Sie MODULE_NAME: und das FAULTING_MODULE:, um zu ermitteln, welcher Code an der Referenzierung des ungültigen Systemspeichers beteiligt ist.
Schauen Sie sich den STACK TEXT an, um Hinweise darauf zu erhalten, was ausgeführt wurde, als der Fehler auftrat. 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 use kb (Display Stack Backtrace), um den fehlerhaften Code zu untersuchen.
Verwenden Sie die , lm t n
um Module aufzulisten, die in den Speicher geladen sind.
Verwenden Sie den Befehl d, da, db, dc, dd, dD, df, dp, dq, du, dw (Anzeigespeicher), um die Speicherbereiche zu untersuchen, auf die von Parameter 1 und Parameter 3 Bezug genommen 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 ob sich in diesem Speicherbereich in Parameter 1 Daten befinden, d. h. in dem Speicherbereich, der versucht wurde, gelesen zu werden.
Verwenden Sie den Befehl !address , um sich Parameter 3 anzusehen, d. h. 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)Dissassemble mit Parameter 3, um zu untersuchen, welcher den fehlerhaften Speicher referenziert hat. Weitere Informationen zum x64-Prozessor und zur Assemblersprache 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 diese ub
Option, um von einer bestimmten Adresse rückwärts zu disassemblieren.
Verwenden Sie den Befehl r (Registers), um zu untersuchen, was ausgeführt wurde, während das System nach Fehlern gesucht hat.
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
befindet sich im Befehlszeigerregister, rip.
Der !pte
Befehl and !pool
kann auch verwendet werden, um den Speicher zu untersuchen.
Verwenden Sie !memusage
und, um den allgemeinen Zustand des Systemspeichers zu untersuchen.
Weitere Informationen zur Speicherauslastung in Windows finden Sie unter Windows Internals 7th Edition Part 1 von Pavel Yosifovich, Mark E. Russinovich, David A. Solomon und Alex Ionescu.
Treiber-Verifizierer
Driver Verifier ist ein Tool, das in Echtzeit ausgeführt wird, um das Verhalten von Treibern zu untersuchen. Die Treiberüberprüfung überprüft z. B. die Verwendung von Speicherressourcen, z. B. Speicherpools. Wenn Fehler bei der Ausführung von Treibercode festgestellt werden, wird proaktiv eine Ausnahme erstellt, damit dieser Teil des Treibercodes weiter ü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 an einer Eingabeaufforderung Verifier ein. Sie können konfigurieren, welche Treiber Sie überprüfen möchten. Der Code, der die Treiber überprüft, erhöht den Mehraufwand bei der Ausführung, also versuchen Sie, die geringstmögliche Anzahl von Treibern 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)