用于 SCSI 微型端口调试的错误检查
调试 SCSI 微型端口驱动程序的过程中,主要会出现两个错误检查:错误检查 0x77 (KERNEL_STACK_INPAGE_ERROR) 和错误检查 0x7A (KERNEL_DATA_INPAGE_ERROR)。 有关其参数的完整详细信息,请参阅错误检查 0x77 和错误检查 0x7A。
这些错误检查中的每一个都表示发生了分页错误。 这些错误检查有三个主要原因:
由于特定设备上的超时或适配器上没有活动而导致总线完全重置
选择超时
控制器错误
若要确定失败的确切原因,请首先使用 !scsikd.classext 扩展,该扩展显示有关最近失败的请求的信息,包括 SRB 状态、SCSI 状态和请求的感知数据。
kd> !scsikd.classext 816e96b0
Storage class device 816e96b0 with extension at 816e9768
Classpnp Internal Information at 817b4008
Failed requests:
Srb Scsi
Opcode Status Status Sense Code Sector Time Stamp
------ ------ ------ ---------- -------- ------------
2a 0a 02 03 0c 00 0000abcd 23:01:07.453 Retried
28 0a 02 03 04 00 0000abcd 23:01:07.984 Retried
dt classpnp!_CLASS_PRIVATE_FDO_DATA 817b4008 -
...
在前面的示例中,操作码 0x2A 表示写入操作,0x28 表示读取操作。 示例中的 SCSI 状态为 02,指示检查条件。 感知代码提供更多错误信息。
与往常一样,微型端口驱动程序开发人员负责将错误代码从其硬件关联到 SRB 状态代码。 通常,超时与 SRB 0x0A(用于选择超时的代码)相关联。 SRB 0x0e 通常与总线完全重置相关,但也可能与控制器错误相关。