Fehlerüberprüfungen für SCSI-Miniportdebugging
Beim Debuggen eines SCSI-Miniporttreibers entstehen hauptsächlich zwei Fehlerüberprüfungen: Die Fehlerüberprüfung 0x77 (KERNEL_STACK_INPAGE_ERROR) und die Fehlerprüfung 0x7A (KERNEL_DATA_INPAGE_ERROR). Ausführliche Informationen zu ihren Parametern finden Sie unter Fehlerüberprüfung 0x77 und Fehlerüberprüfung 0x7A.
Jede dieser Fehlerüberprüfungen weist darauf hin, dass ein Pagingfehler aufgetreten ist. Für diese Fehlerüberprüfungen gibt es drei Standard Ursachen:
Vollständiges Zurücksetzen des Busses aufgrund eines Timeouts auf einem bestimmten Gerät oder keiner Aktivität auf einem Adapter
Auswahltimeout
Controllerfehler
Um die genaue Ursache des Fehlers zu ermitteln, verwenden Sie zunächst die Erweiterung !scsikd.classext, die Informationen zu kürzlich fehlgeschlagenen Anforderungen anzeigt, einschließlich der SRB-status, der SCSI-status und der Sense-Daten der Anforderung.
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 -
...
Im vorherigen Beispiel gibt opcode 0x2A einen Schreibvorgang und 0x28 einen Lesevorgang an. Die SCSI-status im Beispiel ist 02, was eine Überprüfungsbedingung angibt. Die Sinnescodes bieten weitere Fehlerinformationen.
Wie immer sind Miniporttreiberentwickler für das Zuordnen von Fehlercodes von ihrer Hardware zu den SRB-status-Codes verantwortlich. In der Regel werden Timeouts dem SRB-0x0A zugeordnet, dem Code für ein Auswahltimeout. SRB-0x0e ist in der Regel einer vollständigen Buszurücksetzung zugeordnet, kann aber auch mit Controllerfehlern verknüpft sein.