Freigeben über


Bug-Check 0x1AA: EXCEPTION_ON_INVALID_STACK

Der Bug-Check EXCEPTION_ON_INVALID_STACK hat einen Wert von 0x000001AA. Dieser BugCheck zeigt an, dass die Verteilung der Ausnahmen in einen ungültigen Kernel-Stack gelaufen ist. Dies kann darauf hindeuten, dass der Stack-Zeiger des Kernels während der Verarbeitung von Ausnahmen beschädigt wurde (z. B. durch einen beschädigten Frame-Zeiger) oder dass ein Treiber von einem Stack ausgeführt wird, der kein legaler Kernel-Stack ist.

Wichtig

Dieses Thema ist für Programmierer gedacht. Wenn Sie ein Kunde sind, der diesen Code bei der Benutzung seines Computers erhalten hat, lesen Sie bitte Fehlerbehebung für Bluescreen-Fehler.

EXCEPTION_ON_INVALID_STACK-Parameter

Parameter Beschreibung

1

Ein Zeiger auf den aktuellen Stack.

2

Der Typ des Stack-Limits wie z.B . NormalStackLimits (3). Da der Stack ungültig ist, stellt dies die beste Schätzung des Kernels hinsichtlich des Typs des Kernel-Stacks dar, der angesichts des Status des Computers aktiv sein sollte.

Stack-Limit-Typ:

  • 0x0 – Bugcheck-Stack (beliebiger Stack, wenn die Stack-Limits während der Bugcheck-Zeit berechnet werden)
  • 0x1 – Ein Prozessor-DPC-Stack
  • 0x2 – Ein KeExpandKernelStackAndCallout(Ex)-Stack
  • 0x3 – Ein normaler Kernel-Thread-Stack
  • 0x4 – Ein Kernel-Thread-Stack während des Thread-Kontextwechsels (es ist nicht klar, welcher Thread aktiv ist)
  • 0x5 – Ein win32k Kernel/Benutzer-Callout-Stack
  • 0x6 – Ein Prozessor-ISR-Stack
  • 0x7 – Kernel-Debugger-Stack (jeder Stack, wenn der Kernel-Debugger KD I/O bearbeitet)
  • 0x8 – Ein Stack für die NMI-Behandlung des Prozessors
  • 0x9 – Ein Prozessor-Computer Check-Handling-Stack
  • 0xA – Ein Prozessor-Exception-Stack (wird verwendet, um bestimmte ausgelöste IRQL-Ausnahmen zu bearbeiten)

3

Ein Zeiger auf den Datensatz, der den Kontext repräsentiert, der gerade abgewickelt wurde (oder für eine Ausnahme abgefertigt wurde), als der ungültige Stack gefunden wurde.

4

Liefert einen Datensatz, der die aktive Ausnahme darstellt, die bearbeitet wurde.

Ursache

Es wurde versucht, auf einen ungültigen Stack zuzugreifen. Da ein Kernel-Stack in seiner Größe begrenzt ist, müssen die Entwickelnden darauf achten, dass er nicht zu groß wird, z. B. wenn er zum Kopieren von Blöcken des Videospeichers verwendet wird. Informationen über den Windows-Kernel-Stack finden Sie unter Verwenden des Kernel-Stacks.

Lösung

Wenn Sie einen vollständigen Kernel-Dump oder einen angeschlossenen Debugger verwenden, können die folgenden Befehle nützlich sein, um Informationen zu sammeln und den Code aufzuspüren, der fälschlicherweise auf den Speicher zugreift.

Verwenden Sie zunächst den Befehl !analyze, um Informationen zu sammeln, insbesondere die Parameter des Bug-Checks. Untersuchen Sie auch die fehlerhafte Zeile und den Modulnamen, falls verfügbar.

Arguments:
Arg1: 00000018940ffbe8
Arg2: 0000000000000003
Arg3: ffffe301c8db2900
Arg4: ffffdc0e9ee665d8

Verwenden Sie den mitgelieferten Link .trap in der !analyze-Ausgabe, um den Kontext für den Trap-Frame 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 Speichernutzung zu untersuchen, z. B. um zu sehen, wie viel Speicher des Kernel-Stacks 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 an genutztem Speicher ist geringer als in diesem Beispiel verfügbar.

Verwenden Sie den Befehl !thread, um Informationen darüber zu erhalten, was gerade ausgeführt wird. In diesem Beispiel sieht es so aus, als ob ein Worker-Thread des Video Schedulers 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 (Stack-Backtrace anzeigen) mit der Option f, um den Stack und die Speichernutzung anzuzeigen, um zu sehen, ob es einen großen Speicherverbraucher gibt.

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 zugehörigen Assembler-Sprachcode 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 (Context-Datensatz anzeigen), um den A-Eintrag unter Verwendung des von !analyze gelieferten Wertes für Parameter 3 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 (Ausnahme-Datensatz anzeigen), um den Datensatz der Ausnahme anzuzeigen. Verwenden Sie dazu den von !analyze bereitgestellten Wert für Parameter 4.

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 Datensatz der Ausnahme zeigt an, dass versucht wurde, von der Adresse ffffffffffffffff zu lesen, was ein Bereich ist, den Sie näher untersuchen sollten.

Weitere Informationen

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