次の方法で共有


NDIS/WiFi タイムアウト エラーのデバッグ - DRIVER_VERIFIER_DETECTED_VIOLATION (C4)

NDIS/WIFI 検証 オプションを選択し、ドライバー検証ツールは、ドライバーが NDIS/WiFi タイムアウト規則のいずれかに違反していることを検出すると、 ドライバー検証ツールバグ チェック 0xC4:DRIVER_VERIFIER_DETECTED_VIOLATION を生成します。 (パラメーター 1 は、特定の NDIS/WiFi タイムアウト規則の識別子と等しい)。

ドライバー検証ツールが NDISTimedOidComplete などの NDIS/WIFI タイムアウト規則をテストしている場合、ドライバー検証ツールのポーリング メカニズムは、数サイクル以内にミニポート ドライバーからの応答を受け取ります。 各時間指定ルールでは、許可される独自の最大サイクルが定義されています。 最大値を超えると、ドライバー検証ツールによってバグ チェックが生成されます。 このセクションでは、これらの違反をデバッグするための戦略の例をいくつか説明します。

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 拡張機能コマンドを使用する

!analyze 出力の DV_RULE_INFO: フィールドには、この規則違反に関する詳細情報を検索するために使用できるコマンドへのリンクが表示されます。 この例では、リンクをクリックすると、Arg3 と Arg 4 のバグチェック値をRULE_ID (0x92003) で !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 と !ミニポート (パート 2)

NDISKD を使用したデバッグ (パート 3)