錯誤檢查0x1AA:EXCEPTION_ON_INVALID_STACK

EXCEPTION_ON_INVALID_STACK錯誤檢查的值為 0x000001AA。 這個 BugCheck 表示例外狀況分派已跨至不正確核心堆疊。 這可能表示核心堆疊指標在例外狀況分派或回溯 (期間已損毀,例如,因為框架指標) 堆疊損毀,或驅動程式在不是合法核心堆疊的堆疊上執行。

重要

本主題適用于程式設計人員。 如果您是在使用電腦時收到此錯誤碼的客戶,請參閱 針對藍色畫面錯誤進行疑難排解

EXCEPTION_ON_INVALID_STACK參數

參數 描述

1

目前堆疊的指標。

2

Stack 限制的類型,例如 NormalStackLimits (3) 。 因為堆疊無效,所以這代表核心的最佳估計,也就是應該在電腦狀態下作用中的核心堆疊類型。

堆疊限制類型:

  • 0x0 - 錯誤檢查堆疊 (在錯誤檢查期間計算堆疊限制時的任何堆疊)
  • 0x1 - 處理器 DPC 堆疊
  • 0x2 - KeExpandKernelStackAndCallout (Ex) 堆疊
  • 0x3 - 一般核心執行緒堆疊
  • 0x4 - 執行緒內容交換期間的核心執行緒堆疊, (模棱兩可的執行緒作用中)
  • 0x5 - win32k 核心/使用者注標堆疊
  • 0x6 - 處理器 ISR 堆疊
  • 0x7 - 核心偵錯工具堆疊會在核心偵錯工具處理 KD I/O) 時, (任何堆疊
  • 0x8 - 處理器 NMI 處理堆疊
  • 0x9 - 處理器電腦檢查處理堆疊
  • 0xA - 處理器例外狀況堆疊 (,用來分派特定引發的 IRQL 例外狀況)

3

內容記錄的指標,代表遇到無效堆疊時,發生例外狀況 (或分派給例外狀況) 的內容。

4

提供例外狀況記錄,代表正在分派的作用中例外狀況。

原因

嘗試存取不正確堆疊。 由於核心堆疊的大小有限,開發人員必須小心追蹤其限制,例如使用它來複製視訊記憶體區塊時。 如需 Windows 核心堆疊的相關資訊,請參閱 使用核心堆疊

解決方案

使用完整核心傾印或附加偵錯工具時,下列命令可能有助於收集資訊,並追蹤不正確地存取記憶體的程式碼。

首先,使用 !analyze 命令來收集資訊,特別是錯誤檢查參數。 如果可用,也請檢查錯誤的來源行和模組名稱。

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

使用 !analyze 輸出中提供的 .trap 命令連結,將內容設定為陷阱框架。

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=????????????????

使用 !vm 命令來檢查記憶體使用量,例如,查看正在使用多少核心堆疊記憶體。

0: kd> !vm

Physical Memory:          1541186 (    6164744 Kb)
Available Pages:           470550 (    1882200 Kb)
ResAvail Pages:           1279680 (    5118720 Kb)

...

Kernel Stacks:              13686 (      54744 Kb)

在此範例中,所使用的記憶體數量較少。

使用 !thread 命令來收集正在執行的資訊。 在此範例中,它看起來像正在執行視訊排程器背景工作執行緒。

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
...

然後使用 kb (顯示堆疊回溯) 搭配 f 選項來顯示堆疊和記憶體使用量,以查看是否有大型記憶體使用者。

2: kd> kf
...
02        40 ffffdc0e`9ee66850 fffff800`2b7f8801     dxgmms2!VidSchiMarkDeviceAsError+0x4d  
...

如果程式碼的特定部分看起來很可疑,請使用 u、ub、uu (Unassemble) 命令來檢查相關聯的組合語言程式碼。

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

使用 .cxr (顯示內容記錄) 命令,使用 !analyze 所提供的參數 3 值來顯示內容記錄。

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=????????????????

使用 .exr (顯示例外狀況記錄) 命令,使用 !analyze 所提供的參數 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

例外狀況記錄表示嘗試從 和 位址 ffffffffffffffff 讀取 ,這會是進一步調查的區域。

另請參閱

錯誤檢查代碼參考