Fehlerüberprüfung 0x1AA: EXCEPTION_ON_INVALID_STACK
Die EXCEPTION_ON_INVALID_STACK-Fehlerüberprüfung hat den Wert 0x000001AA. Dieser BugCheck gibt an, dass die Ausnahmeverteilung in einen ungültigen Kernelstapel gekreuzt wurde. Dies kann darauf hindeuten, dass der Kernelstapelzeiger während des Aus- oder Entladens beschädigt wurde (z. B. aufgrund einer Stapelbeschädigung eines Framezeigers), oder dass ein Treiber von einem Stapel aus ausgeführt wird, der kein legaler Kernelstapel ist.
Wichtig
Dieses Thema richtet sich an Programmierer. Wenn Sie ein Kunde sind, der diesen Fehlercode bei der Verwendung Ihres Computers erhalten hat, finden Sie weitere Informationen unter Behandeln von Bluescreenfehlern.
EXCEPTION_ON_INVALID_STACK Parameter
Parameter | BESCHREIBUNG |
---|---|
1 |
Ein Zeiger auf den aktuellen Stapel. |
2 |
Der Typ des Stapellimits, z. B. NormalStackLimits (3). Da der Stapel ungültig ist, stellt dies die beste Schätzung des Kernelstapeltyps dar, der angesichts des Zustands des Computers aktiv sein sollte. Stapellimittyp:
|
3 |
Ein Zeiger auf den Kontextdatensatz, der den Kontext darstellt, der beim Auftreten des ungültigen Stapels aufgehoben (oder für eine Ausnahme ausgegeben wurde). |
4 |
Stellt einen Ausnahmedatensatz bereit, der die aktive Ausnahme darstellt, die ausgegeben wurde. |
Ursache
Es wurde versucht, auf einen ungültigen Stapel zuzugreifen. Da ein Kernelstapel in seiner Größe begrenzt ist, muss der Entwickler mit der Nachverfolgung von Grenzwerten vorsichtig sein, z. B. wenn er zum Kopieren von Videospeicherblöcken verwendet wird. Informationen zum Windows-Kernelstapel finden Sie unter Verwenden des Kernelstapels.
Lösung
Mithilfe eines vollständigen Kernelabbilds oder eines angefügten Debuggers können die folgenden Befehle nützlich sein, um Informationen zu sammeln und den Code aufzuspüren, der fälschlicherweise auf Arbeitsspeicher zugreift.
Verwenden Sie zunächst den Befehl !analyze , um Informationen zu sammeln, insbesondere die Fehlerüberprüfungsparameter. Überprüfen Sie auch die fehlerbehaftete Quellzeile und den Modulnamen, falls verfügbar.
Arguments:
Arg1: 00000018940ffbe8
Arg2: 0000000000000003
Arg3: ffffe301c8db2900
Arg4: ffffdc0e9ee665d8
Verwenden Sie den angegebenen .trap-Befehlslink in der !analyze-Ausgabe, um den Kontext auf den Trapframe festzulegen.
2: kd> .trap 0xffffdc0e9ee66680
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=003f8b813f20b6e0 rbx=0000000000000000 rcx=ee7defdd9c530000
rdx=ffffcb81660ea078 rsi=0000000000000000 rdi=0000000000000000
rip=fffff8002b7f8933 rsp=ffffdc0e9ee66810 rbp=ffffcb81511c3010
r8=0000000000000001 r9=0000000000004014 r10=ffffdc0e9ee66910
r11=0000000000000000 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei pl zr na po nc
dxgmms2!RemoveHeadList+0xd [inlined in dxgmms2!VidSchiSignalRegisteredSyncObjects+0x3f]:
fffff800`2b7f8933 48395808 cmp qword ptr [rax+8],rbx ds:003f8b81`3f20b6e8=????????????????
Verwenden Sie den Befehl !vm , um die Arbeitsspeicherauslastung zu untersuchen, z. B. um zu ermitteln, wie viel des Kernel stacks-Arbeitsspeichers verwendet wird.
0: kd> !vm
Physical Memory: 1541186 ( 6164744 Kb)
Available Pages: 470550 ( 1882200 Kb)
ResAvail Pages: 1279680 ( 5118720 Kb)
...
Kernel Stacks: 13686 ( 54744 Kb)
Diese Menge des verwendeten Arbeitsspeichers ist weniger als in diesem Beispiel verfügbar.
Verwenden Sie den Befehl !thread , um Informationen darüber zu sammeln, was ausgeführt wird. In diesem Beispiel sieht es so aus, als ob ein Videoplaner-Workerthread ausgeführt wird.
2: kd> !thread
THREAD ffffcb816348b040 Cid 0c58.4a1c Teb: 0000000000000000 Win32Thread: 0000000000000000 RUNNING on processor 2
Not impersonating
DeviceMap ffff840f38c04170
Owning Process ffffcb81648980c0 Image: YourPhone.exe
Attached Process N/A Image: N/A
Wait Start TickCount 34501403 Ticks: 0
Context Switch Count 43 IdealProcessor: 3
UserTime 00:00:00.000
KernelTime 00:00:00.015
Win32 Start Address 0x00007fff34656d00
Stack Init ffffdc0e9ee675b0 Current ffffdc0e9ee66610
Base ffffdc0e9ee68000 Limit ffffdc0e9ee61000 Call 0000000000000000
Priority 8 BasePriority 8 PriorityDecrement 0 IoPriority 2 PagePriority 5
...
Verwenden Sie dann kb (Display Stack Backtrace) mit der Option f, um den Stapel und die Speicherauslastung anzuzeigen, um zu ermitteln, ob ein großer Arbeitsspeicherbenutzer vorhanden ist.
2: kd> kf
...
02 40 ffffdc0e`9ee66850 fffff800`2b7f8801 dxgmms2!VidSchiMarkDeviceAsError+0x4d
...
Wenn ein bestimmter Teil des Codes verdächtig aussieht, verwenden Sie den Befehl u, ub, uu (Unassemble), um den zugeordneten Code der Assemblersprache zu untersuchen.
2: kd> u ffffdc0e`9ee66850 l10
ffffdc0e`9ee66850 1030 adc byte ptr [rax],dh
ffffdc0e`9ee66852 1c51 sbb al,51h
ffffdc0e`9ee66854 81cbffffc068 or ebx,68C0FFFFh
ffffdc0e`9ee6685a e69e out 9Eh,al
ffffdc0e`9ee6685c 0e ???
ffffdc0e`9ee6685d dcff fdiv st(7),st
ffffdc0e`9ee6685f ff00 inc dword ptr [rax]
ffffdc0e`9ee66861 0000 add byte ptr [rax],al
ffffdc0e`9ee66863 0000 add byte ptr [rax],al
ffffdc0e`9ee66865 0000 add byte ptr [rax],al
ffffdc0e`9ee66867 000e add byte ptr [rsi],cl
ffffdc0e`9ee66869 0000 add byte ptr [rax],al
ffffdc0e`9ee6686b 0000 add byte ptr [rax],al
ffffdc0e`9ee6686d 0000 add byte ptr [rax],al
ffffdc0e`9ee6686f 0010 add byte ptr [rax],dl
ffffdc0e`9ee66871 301c51 xor byte ptr [rcx+rdx*2],bl
Verwenden Sie den Befehl .cxr (Kontextdatensatz anzeigen), um den Kontextdatensatz mit dem von !analyze bereitgestellten Parameter 3-Wert anzuzeigen.
2: kd> .cxr ffffe301c8db2900
rax=003f8b813f20b6e0 rbx=ffffcb813f607650 rcx=ee7defdd9c530000
rdx=ffffcb81660ea078 rsi=0000000000000000 rdi=ffffcb81511c30a8
rip=fffff8002b7f8933 rsp=ffffdc0e9ee66810 rbp=ffffcb81511c3010
r8=0000000000000001 r9=0000000000004014 r10=ffffdc0e9ee66910
r11=0000000000000000 r12=ffffdc0e9ee66910 r13=ffffcb814019c000
r14=0000000000000000 r15=ffffdc0e9ee66910
iopl=0 nv up ei pl zr na po nc
cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00050246
dxgmms2!RemoveHeadList+0xd [inlined in dxgmms2!VidSchiSignalRegisteredSyncObjects+0x3f]:
fffff800`2b7f8933 48395808 cmp qword ptr [rax+8],rbx ds:002b:003f8b81`3f20b6e8=????????????????
Verwenden Sie den Befehl .exr (Ausnahmedatensatz anzeigen), um den Ausnahmedatensatz unter Verwendung des von !analyze bereitgestellten Parameters 4-Werts anzuzeigen.
2: kd> .exr ffffdc0e9ee665d8
ExceptionAddress: fffff8002b7f8933 (dxgmms2!RemoveHeadList+0x000000000000000d)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 0000000000000000
Parameter[1]: ffffffffffffffff
Attempt to read from address ffffffffffffffff
Der Ausnahmedatensatz gibt einen Versuch an, aus und die Adresse von ffffffffffffffff
zu lesen. Dies wäre ein Bereich, der weiter untersucht werden sollte.
Weitere Informationen
Bug Check Code Reference (Referenz zu Fehlerüberprüfungscodes)
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für