共用方式為


偵錯 NDIS/WiFi 逾時錯誤 - DRIVER_VERIFIER_DETECTED_VIOLATION (C4)

當您已選取 NDIS/WIFI 驗證 選項,且驅動程式驗證器偵測到驅動程式違反其中一個 NDIS/WiFi 逾時規則時, 驅動程式驗證程式 會產生 錯誤檢查0xC4:DRIVER_VERIFIER_DETECTED_VIOLATION (參數 1 等於特定 NDIS/WiFi 逾時規則的識別碼) 。

當驅動程式驗證器正在測試 NDIS/WIFI 逾時規則時,例如 NdisTimedOidComplete,驅動程式驗證器的輪詢機制預期在數個週期內來自迷你埠驅動程式的回應。 每個計時規則都已定義它自己的允許最大週期。 超過最大值時,驅動程式驗證器會產生錯誤檢查。 本節說明偵錯這些違規的一些範例策略。

偵錯 NDIS/WIFI 逾時錯誤

使用 !analyze 來顯示錯誤檢查的相關資訊

如同發生的任何錯誤檢查,一旦您擁有偵錯工具的控制權,最好的第一個步驟是執行 !analyze -v 命令。

DRIVER_VERIFIER_DETECTED_VIOLATION (c4)
A device driver attempting to corrupt the system has been caught.  This is
because the driver was specified in the registry as being suspect (by the
administrator) and the kernel has enabled substantial checking of this driver.
If the driver attempts to corrupt the system, bugchecks 0xC4, 0xC1 and 0xA will
be among the most commonly seen crashes.
Arguments:
Arg1: 00092003, ID of the 'NdisTimedOidComplete' rule that was violated.
Arg2: 8521dd34, A pointer to the string describing the violated rule condition.
Arg3: 9c17b860, Address of internal rule state (second argument to !ruleinfo).
Arg4: 9c1f3480, Address of supplemental states (third argument to !ruleinfo).

!analyze -v 輸出的下一節中,違反規則的原因會顯示在 [DV_VIOLATED_CONDITION] 欄位中。 DV_MSDN_LINK區段也有助於提取此規則檔的連結。

偵錯詳細資料:


*** ERROR: Module load completed but symbols could not be loaded for NdisTimedOidComplete.sys

DV_VIOLATED_CONDITION:  Timeout on completing an NDIS OID request.

DV_MSDN_LINK: https://learn.microsoft.com/windows-hardware/drivers/devtest/ndis-ndistimedoidcomplete

DRIVER_OBJECT: 98a87980

IMAGE_NAME:  NdisTimedOidComplete.sys

DEBUG_FLR_IMAGE_TIMESTAMP:  5229c857

MODULE_NAME: NdisTimedOidComplete

FAULTING_MODULE: 9fee1000 NdisTimedOidComplete

在此分析輸出下,您可以按一下 [DV_RULE_INFO] 區段底下的連結,以取得其他規則描述。 針對規則的逾時類型,目前的堆疊可能不會包含相關資訊。

DV_RULE_INFO: 0x92003

BUGCHECK_STR:  0xc4_NdisTimedOidComplete_XDV

DEFAULT_BUCKET_ID:  WIN8_DRIVER_FAULT

PROCESS_NAME:  System

CURRENT_IRQL:  2

ANALYSIS_VERSION: 6.13.0016.1929 (debuggers(dbg).130725-1857) amd64fre

LAST_CONTROL_TRANSFER:  from 80f87fd3 to 80f0ed14

STACK_TEXT:  
8912380c 80f87fd3 00000003 e6c3476e 00000065 nt!RtlpBreakWithStatusInstruction
89123860 80f87aed 825a6138 89123c5c 89123cac nt!KiBugCheckDebugBreak+0x1f
89123c30 80f0d8d6 000000c4 00092003 8521dd34 nt!KeBugCheck2+0x676
89123c54 80f0d80d 000000c4 00092003 8521dd34 nt!KiBugCheck2+0xc6
89123c74 85211584 000000c4 00092003 8521dd34 nt!KeBugCheckEx+0x19
89123cac 85216d54 9c17b860 9c1f3480 9c17b8dc VerifierExt!SLIC_StatefulAbort+0x1a4
89123cd0 85216ffe 85220000 85215f5b 00000000 VerifierExt!Ndis_OnTimerExpire+0x234
89123cd8 85215f5b 00000000 80ecd56a 843d0c38 VerifierExt!CheckOnTimerExpire+0x26
89123ce0 80ecd56a 843d0c38 00000000 80ecd502 VerifierExt!XdvPassiveTimerRoutine+0x1d
89123d24 80eec133 882befd0 00000000 887debc0 nt!IopProcessWorkItem+0x68
89123d70 80ec1162 00000000 e6c342be 00000000 nt!ExpWorkerThread+0x14f
89123db0 80f23201 80eebfe4 00000000 00000000 nt!PspSystemThreadStartup+0x58
89123dbc 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x15

使用 !ruleinfo 擴充功能命令

DV_RULE_INFO:分析輸出的欄位會顯示命令的連結,可用來尋找此規則違規的詳細資訊。 在此範例中,如果您按一下連結,它會使用 RULE_ID (0x92003) Arg3 和 Arg 4 錯誤檢查值來執行 !ruleinfo 命令。

kd> !ruleinfo 0x92003 0xffffffff9c17b860 0xffffffff9c1f3480

RULE_ID: 0x92003

RULE_NAME: NdisTimedOidComplete

RULE_DESCRIPTION:
This rule verifies if an NDIS miniport driver completes an OID in time.
The OID is tracked (a.k.a., TRACKED_OBJECT). Use !ndiskd.oid .

MSDN_LINK: https://learn.microsoft.com/windows-hardware/drivers/devtest/ndis-ndistimedoidcomplete

CONTEXT: Miniport 0x86BD10E8

CURRENT_TIME (Timed Rules): 168 seconds

TRACKED_OBJECT: 0x86633804

LAST_CALL_STACK: 0x9C1F3480 + 0x10

RULE_STATE: 0x9C1F3480

識別違規的位置

在此範例中,迷你埠驅動程式 NdisTimedOidComplete.sys 已插入 其 MPOidRequest 函式中的睡眠週期。 我們可以按一下 !ruleinfo 輸出中的 [LAST_CALL_STACK] 連結來檢查。 這是驅動程式驗證器看到的最後一個呼叫堆疊,我們在逾時之前看到 NDIS 呼叫 ndisMInvokeOidRequest

kd> dps 0x9C1F3480 + 0x10
9c1f3490  850e1e37 ndis!ndisMInvokeOidRequest+0x16641
9c1f3494  850765c8 ndis!ndisMDoOidRequest+0x24a
9c1f3498  8507552a ndis!ndisQueueOidRequest+0x2fa
9c1f349c  8507372b ndis!ndisQuerySetMiniportEx+0xd9
9c1f34a0  85073646 ndis!ndisQuerySetMiniport+0x18
9c1f34a4  850dd9c8 ndis!ndisMDoMiniportOp+0x8c
9c1f34a8  850dd916 ndis!ndisMNotifyMachineName+0xe4
9c1f34ac  85104005 ndis!ndisMInitializeAdapter+0xad7

修正 NDIS WIFI 逾時違規的原因

當損毀傾印已針對計時規則產生時,有可能在損毀傾印時找到根本原因。 若要進一步偵錯,請考慮從 NdisKd 偵錯工具擴充功能命令開始,請參閱 NDIS 延伸模組 (Ndiskd.dll) 開始使用 NDISKD。 如果您的驅動程式已實作 ETW,您可能也需要查看 Windows (ETW 的事件追蹤) 記錄。 如果未啟用此規則,則此錯誤將本身顯示為使用者應用程式停止回應,或錯誤 檢查0x9F:最 差DRIVER_POWER_STATE_FAILURE。

NDIS 延伸模組 (Ndiskd.dll)

開始使用 NDISKD (第 1 部分)

NDISKD 和 !miniport (第 2 部分)

使用 NDISKD (第 3 部分進行偵錯)