停止したドライバーとタイムアウトの分析
SCSI ミニポート ドライバーをデバッグする場合、ハングとタイムアウトの最も一般的な 3 つの原因は次のとおりです。
SCSI ミニポート DPC が実行されていない
SCSI ミニポートが次の要求を要求できない
通常、マップ レジスタを待っているため、SCSI ミニポートによって要求が完了されない。
SCSI ミニポート DPC が実行されていないと思われる場合は、!pcr を使用して、現在のプロセッサの DPC キューを表示します。 SCSI ポート DPC ルーチンが DPC キュー内にある場合は、このルーチンにブレークポイントを配置して、このルーチンが呼び出されたかどうかを判断します。 それ以外の場合は、各デバイスで !scsikd.scsiext を使用します。 !scsikd.scsiext 拡張コマンドからの次の出力例を考えてみましょう。
0: kd> !scsikd.scsiext 86353040
Common Extension:
< ..omitted.. >
Logical Unit Extension:
Address (3, 0, 1, 0) Claimed Enumerated Visible
LuFlags (0x00000000):
Retry 0x00 Key 0x008889ff
Lock 0x00000000 Pause 0x00000000 CurrentLock: 0x00000000
HwLuExt 0x862e6f00 Adapter 0x8633db28 Timeout 0x0000000a
NextLun 0x00000000 ReadyLun 0x00000000
Pending 0x00000000 Busy 0x00000000 Untagged 0x00000000
. . .
Request list @0x86353200:
Tick count is 2526
SrbData 8615d700 Srb 8611f4fc Irp 8611f2b8 Key 60197 <1s
SrbData 85e72868 Srb 86100c3c Irp 861009f8 Key e29dc7 <1s
タイムアウト スロットが -1 で、タグなしスロットが 0 以外の場合、またはタイムアウト スロットが 0 以外で、要求が表示されている場合、ミニポートは次の要求を要求できませんでした。
または、再試行スロットとビジー スロットが 0 以外の場合は、マップ レジスタを待っているため、SCSI ミニポートによって要求が完了しない可能性があります。 同様に、タグなしスロットと保留中のスロットが 0 以外の場合、SCSI ミニポートがマップ レジスタを待っている可能性があります。 どちらの場合も、SCSI 要求ブロック (SRB) のアドレスは、ビジー スロット内のアドレスと、完了していない要求のアドレスです。 SRB の詳細については、このアドレスを入力として !minipkd.srb 拡張コマンドを使用してください。
!devobj 拡張コマンドは、SCSI ミニポートがマップ レジスタを待っているかどうかを判断します。 要求を発行しているデバイスのデバイス オブジェクト アドレスを !devobj への入力として使用します。 現在の IRQ が 0 以外の場合、SCSI ミニポートがマップ レジスタを待っている可能性が高くなります。