錯誤檢查0xA:IRQL_NOT_LESS_OR_EQUAL

IRQL_NOT_LESS_OR_EQUAL錯誤檢查的值為 0x0000000A。 這個錯誤檢查指出 Microsoft Windows 或內核模式驅動程式在無效位址存取分頁記憶體,而引發中斷要求層級時, (IRQL) 。 原因通常是錯誤的指標或可分頁性問題。

重要

本文適用於程式設計人員。 如果您是在使用計算機時收到藍色螢幕錯誤碼的客戶,請參閱 針對藍色畫面錯誤進行疑難解答

IRQL_NOT_LESS_OR_EQUAL參數

參數 描述
1 無法存取的虛擬記憶體位址。

使用此位址上的 !pool 來查看它是否為分頁集區。 收集失敗相關信息的其他命令可能很有用: !pte!addressln (列出最接近符號)
2 錯誤時 IRQL。

Values
2 - IRQL 在錯誤時DISPATCH_LEVEL。
3 描述造成錯誤的作業的位欄位。 請注意,位 3 僅適用於支援此報告層級的晶片組。

位 0 值
0 - 讀取作業
1 - 寫入作業

位 3 值
0 - 不是執行作業
1 - 執行作業

位 0 和位 3 合併值
0x0 - 嘗試從參數 1 中的位址讀取時發生錯誤
0x1 - 嘗試寫入參數 1 中的地址時發生錯誤
0x8 - 嘗試從參數 1 中的位址執行程式代碼時發生錯誤

此值是由下列原因所造成:
  • 在DISPATCH_LEVEL時呼叫無法在DISPATCH_LEVEL呼叫的函式。
  • 忘記釋放微調鎖定。
  • 當程式代碼必須是不可分頁時,將程式代碼標示為可分頁。 例如,如果程式代碼取得微調鎖定,或在延後過程調用中呼叫。
4 錯誤時的指令指標。

使用此位址上的 ln (List Nearest Symbols) 命令來查看函式的名稱。

原因

此錯誤檢查是由使用不正確位址的核心模式設備驅動器所造成。

這個錯誤檢查指出嘗試在引發中斷要求層級時,嘗試存取無效的位址, (IRQL) 。 原因可能是記憶體指標不正確或裝置驅動程式程式代碼的可分頁性問題。

您可以用來分類導致錯誤檢查之編碼錯誤的類型一般指導方針如下:

  • 如果參數 1 小於 0x1000,則問題可能是 NULL 指標取值。

  • 如果 !pool 報告參數 1 是分頁集區 (或其他類型的可分頁記憶體) ,則 IRQL 太高而無法存取此數據。 在較低的 IRQL 上執行,或在非分頁集區中配置數據。

  • 如果參數 3 指出錯誤檢查是嘗試執行可分頁程式代碼,則 IRQL 太高而無法呼叫此函式。 在較低的 IRQL 執行,或不要將程式代碼標示為可分頁。

  • 這可能是使用後或位翻轉所造成的錯誤指標。 使用 !pte!addressln (列出最接近符號 的參數 1 有效性) 。

解決方案

如果核心調試程式可供使用,請取得堆疊追蹤。 從執行 !analyze 調試程序擴充功能開始,以顯示錯誤檢查的相關信息。 !analyze 延伸模組有助於判斷根本原因。 接下來,輸入其中一個 k* (顯示堆疊回溯) 命令,以檢視呼叫堆棧。

收集資訊

如果驅動程式列在藍色畫面上,請檢查其名稱。

檢查系統登入 事件檢視器 是否有其他錯誤訊息,以協助找出造成錯誤的裝置或驅動程式。 在系統記錄檔中尋找與藍色畫面相同的時間範圍內發生的重大錯誤。

驅動程式驗證器

驅動程式驗證器是即時執行以檢查驅動程式行為的工具。 例如,驅動程式驗證器會檢查記憶體資源的使用方式,例如記憶體集區。 如果它識別驅動程式程式代碼執行中的錯誤,它會主動建立例外狀況,以允許進一步檢查該部分的驅動程序程序代碼。 驅動程式驗證器管理員內建於 Windows 中,且適用於所有 Windows 計算機。

若要啟動驅動程式驗證器管理員,請在命令提示字元中輸入 驗證程式 。 您可以設定要驗證的驅動程式。 驗證驅動程式的程式代碼會在執行時增加額外負荷,因此請嘗試盡可能驗證最少的驅動程式數目。 如需詳細資訊,請參閱 驅動程序驗證器

下列程式代碼顯示偵錯範例:

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

備註

產生這個錯誤檢查的錯誤通常會在安裝錯誤的設備驅動器、系統服務或BIOS之後發生。

如果您在升級至較新版本的 Windows 時遇到錯誤檢查0xA,則錯誤可能是由設備驅動器、系統服務、病毒掃描器或與新版本不相容的備份工具所造成。

解決錯誤的硬體問題: 如果最近已將硬體新增至系統,請將其移除,以查看錯誤是否遞歸。 如果現有的硬體失敗,請移除或取代錯誤元件。 執行系統製造商所提供的硬體診斷。 如需這些程式的詳細資訊,請參閱計算機的擁有者手冊。

解決錯誤系統服務問題: 停用服務,並確認是否這樣做可解決錯誤。 如果是,請連絡系統服務的製造商以取得可能的更新。 如果在系統啟動期間發生錯誤,請調查 Windows 修復選項。 如需詳細資訊,請參閱 Windows 10 中的復原選項

解決防病毒軟體問題: 停用程式,並確認是否這樣做可解決錯誤。 如果這樣做,請連絡計劃的製造商,以取得可能的更新。

如需疑難解答錯誤檢查的一般資訊,請參閱 藍色畫面數據

另請參閱

錯誤檢查程式代碼參考