Fehlerprüfung 0xA: IRQL_NOT_LESS_OR_EQUAL

Die IRQL_NOT_LESS_OR_EQUAL-Fehlerüberprüfung weist den Wert 0x0000000A auf. Diese Fehlerüberprüfung weist darauf hin, dass Microsoft Windows oder ein Kernelmodustreiber auf ausgelagerten Speicher mit einer ungültigen Adresse zugegriffen hat, während die Anforderungsebene (IRQL) ausgelöst wurde. Die Ursache ist in der Regel ein ungültiger Zeiger oder ein Auslagerungsproblem.

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.

IRQL_NOT_LESS_OR_EQUAL Parameter

Parameter BESCHREIBUNG
1 Die Adresse des virtuellen Speichers, auf die nicht zugegriffen werden konnte.

Verwenden Sie !pool für diese Adresse, um zu ermitteln, ob es sich um einen ausgelagerten Pool handelt. Weitere Befehle, die hilfreich sein können, um Informationen über den Fehler zu sammeln, sind !pte, !address und ln (Nächste Symbole auflisten).
2 IRQL zum Zeitpunkt des Fehlers.

Werte:
2 – Die IRQL wurde zum Zeitpunkt des Fehlers DISPATCH_LEVEL.
3 Bitfeld, das den Vorgang beschreibt, der den Fehler verursacht hat. Beachten Sie, dass Bit 3 nur für Chipsätze verfügbar ist, die diese Berichtsebene unterstützen.

Bit 0-Werte:
0 – Lesevorgang
1 : Schreibvorgang

Bit 3-Werte:
0 – Kein Ausführungsvorgang
1 – Ausführungsvorgang

Kombinierte Werte für Bit 0 und Bit 3:
0x0 : Fehler beim Versuch, aus der Adresse in Parameter 1 zu lesen
0x1 : Fehler beim Versuch, in die Adresse in Parameter 1 zu schreiben
0x8 : Fehler beim Ausführen von Code aus der Adresse in Parameter 1

Dieser Wert wird durch Folgendes verursacht:
  • Aufrufen einer Funktion, die bei DISPATCH_LEVEL nicht bei DISPATCH_LEVEL aufgerufen werden kann.
  • Vergessen, ein Spinlock loszulassen.
  • Markieren von Code als auslagerungsfähig, wenn er nicht ausgelagert werden kann. Beispielsweise, wenn der Code ein Spinlock abruft oder in einem verzögerten Prozeduraufruf aufgerufen wird.
4 Der Anweisungszeiger zum Zeitpunkt des Fehlers.

Verwenden Sie den Befehl ln (List Nearest Symbols) für diese Adresse, um den Namen der Funktion anzuzeigen.

Ursache

Diese Fehlerprüfung wird durch Gerätetreiber im Kernelmodus verursacht, die falsche Adressen verwenden.

Diese Fehlerüberprüfung zeigt an, dass versucht wurde, auf eine ungültige Adresse zuzugreifen, während eine erhöhte Interruptanforderungsebene (IRQL) erreicht wurde. Die Ursache ist entweder ein ungültiger Speicherzeiger oder ein Auslagerungsproblem mit dem Gerätetreibercode.

Allgemeine Richtlinien, die Sie verwenden können, um den Typ des Codierungsfehlers zu kategorisieren, der die Fehlerprüfung verursacht hat, lauten wie folgt:

  • Wenn Parameter 1 kleiner als 0x1000 ist, ist das Problem wahrscheinlich eine NULL-Zeigerdereferenz.

  • Wenn !pool meldet, dass Parameter 1 ausgelagerter Pool (oder andere Typen von ausgelagertem Arbeitsspeicher) ist, ist der IRQL zu hoch, um auf diese Daten zugreifen zu können. Führen Sie die Ausführung auf einem niedrigeren IRQL-Wert aus, oder ordnen Sie die Daten im Pool zu, der keine Auslagerung enthält.

  • Wenn Parameter 3 angibt, dass die Fehlerüberprüfung ein Versuch war, ausgelagerten Code auszuführen, ist die IRQL zu hoch, um diese Funktion aufzurufen. Führen Sie bei einer niedrigeren IRQL aus, oder markieren Sie den Code nicht als ausserstellbar.

  • Dies kann ein ungültiger Zeiger sein, der durch die Verwendung nach dem Freien oder das Bit-Flipping verursacht wird. Untersuchen Sie die Gültigkeit von Parameter 1 mit !pte, !address und ln (nächste Symbole auflisten).

Lösung

Wenn ein Kerneldebugger verfügbar ist, rufen Sie eine Stapelüberwachung ab. Führen Sie zunächst die Debuggererweiterung !analyze aus, um Informationen zur Fehlerüberprüfung anzuzeigen. Die Erweiterung !analyze kann bei der Ermittlung der Grundursache hilfreich sein. Geben Sie als Nächstes einen der k*-Befehle (Display Stack Backtrace) ein, um die Aufrufliste anzuzeigen.

Sammeln von Informationen

Überprüfen Sie den Namen des Treibers, wenn er auf dem Bluescreen aufgeführt wurde.

Überprüfen Sie die system log in Ereignisanzeige auf andere Fehlermeldungen, mit denen sie das Gerät oder den Treiber ermitteln können, das den Fehler verursacht. Suchen Sie im Systemprotokoll nach kritischen Fehlern, die im gleichen Zeitrahmen wie der Bluescreen aufgetreten sind.

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 identifiziert werden, wird proaktiv eine Ausnahme erstellt, damit dieser Teil des Treibercodes genauer überprüft werden kann. Driver Verifier 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 überprüft, dass Treiber bei der Ausführung mehr Aufwand verursachen, versuchen Sie daher, die kleinste Anzahl von Treibern so wie möglich zu überprüfen. Weitere Informationen finden Sie unter Treiberüberprüfung.

Der folgende Code zeigt ein Debugbeispiel:

kd> .bugcheck       [Lists bug check data.]
Bugcheck code 0000000a
Arguments 00000000 0000001c 00000000 00000000

kd> kb [Lists the stack trace.]
ChildEBP RetAddr  Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194

kd> kv [Lists the trap frames.]
ChildEBP RetAddr  Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint (FPO: [0,0,0])
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256 (FPO: [0,0] TrapFrame @ 8013eee8)
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194

kd> .trap 8013eee8 [Gets the registers for the trap frame at the time of the fault.]
eax=dec80201 ebx=ffdff420 ecx=8013c71c edx=000003f8 esi=00000000 edi=87038e10
eip=00000000 esp=8013ef5c ebp=8013ef64 iopl=0         nv up ei pl nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010202
ErrCode = 00000000
00000000 ???????????????    [The current instruction pointer is NULL.]

kd> kb       [Gives the stack trace before the fault.]
ChildEBP RetAddr  Args to Child
8013ef68 fe551aa1 ff690268 00000002 fe5620d2 NT!_DbgBreakPoint
8013ef74 fe5620d2 fe5620da ff690268 80404690
NDIS!_EthFilterIndicateReceiveComplete+0x31
8013ef64 00000246 fe551aa1 ff690268 00000002 elnkii!_ElnkiiRcvInterruptDpc+0x1d0

Hinweise

Der Fehler, der diese Fehlerüberprüfung generiert, tritt in der Regel nach der Installation eines fehlerhaften Gerätetreibers, Systemdiensts oder BIOS auf.

Wenn beim Upgrade auf eine neuere Version von Windows eine Fehlerüberprüfung 0xA auftritt, kann der Fehler durch einen Gerätetreiber, einen Systemdienst, einen Virenscanner oder ein Sicherungstool verursacht werden, das mit der neuen Version nicht kompatibel ist.

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. Führen Sie hardwarebasierte Diagnose aus, die vom Systemhersteller bereitgestellt werden. Ausführliche Informationen zu diesen Verfahren finden Sie im Benutzerhandbuch für Ihren Computer.

Beheben eines fehlerhaften Systemdienstproblems: Deaktivieren Sie den Dienst, und überprüfen Sie, ob 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 überprüfen Sie, ob dadurch der Fehler behoben wird. Wenn dies der Fall ist, wenden Sie sich an den Hersteller des Programms, um ein mögliches Update zu erfahren.

Allgemeine Informationen zur Problembehandlung bei Fehlerüberprüfungen finden Sie unter Bluescreen-Daten.

Weitere Informationen

Codereferenz zur Fehlerüberprüfung