SCSI-Überprüfung

Die SCSI-Überprüfungsfunktion von Driver Verifier überwacht die Interaktion zwischen einem SCSI-Miniporttreiber und dem Porttreiber. Wenn der Miniporttreiber eine Routine missbraucht, auf eine Anforderung des Porttreibers falsch antwortet oder die Antwort auf eine Anforderung übermäßig lange dauert, wird eine Fehlerüberprüfung ausgegeben.

Diese Treiberüberprüfungsoption ist nur in Windows XP und höher verfügbar.

Durch die SCSI-Überprüfung erkannte Verstöße

Die SCSI-Überprüfungsoption kann mehrere Missbrauchsvorgänge von SCSI-Routinen erkennen. Es ist auch möglich, bestimmte dieser Überprüfungen einzeln zu deaktivieren.

Wenn ein SCSI-Miniporttreiber eine der folgenden Verstöße begeht, führt Driver Verifier eine Fehlerüberprüfung 0xF1 aus.

  • Der Miniporttreiber übergibt ein ungültiges Argument an ScsiPortInitialize.

  • Der Miniporttreiber ruft ScsiPortStallExecution auf und gibt eine Verzögerung von mehr als 0,1 Sekunden an, wodurch der Prozessor über einen übermäßigen Zeitraum blockiert wird.

  • Der Porttreiber ruft eine Miniporttreiberroutine auf, und der Miniporttreiber benötigt länger als 0,5 Sekunden, um sie auszuführen. (Die FindAdapter-Routine ist ausgenommen, und die HwInitialize-Routine ist 5 Sekunden zulässig.)

  • Der Miniporttreiber schließt eine Anforderung mehrmals ab.

  • Der Miniporttreiber schließt eine Routine mit einem ungültigen SRB-status ab.

  • Der Miniporttreiber ruft ScsiPortNotification auf, um nach NextLuRequest zu fragen, aber eine nicht markierte Anforderung ist weiterhin aktiv.

  • Der Miniporttreiber übergibt eine ungültige virtuelle Adresse an ScsiPortGetPhysicalAddress. (Dies bedeutet in der Regel, dass die angegebene Adresse nicht dem allgemeinen Pufferbereich zugeordnet ist.)

  • Der Zeitraum für die Buszurücksetzung endet, aber der Miniporttreiber hat noch ausstehende Anforderungen.

Eine vollständige Liste der Fehlerüberprüfungsparameter finden Sie unter 0xF1 der Fehlerüberprüfung (SCSI_VERIFIER_DETECTED_VIOLATION).

Zusätzlich zu diesen Verstößen überwacht die SCSI-Überprüfung auch den Speicherzugriff des Miniporttreibers auf unsachgemäße Verwendung. Zwei häufige Speicherverletzungen durch Miniporttreiber sind der Zugriff auf eine SRB-Erweiterung nach Abschluss einer Anforderung und der Zugriff auf den DataBuffer eines SRB, wenn der Miniporttreiber MapBuffers nicht angegeben hat.

Speicherverletzungen dieser Art führen in der Regel dazu , dass Fehlerüberprüfungs-0xD1 (DRIVER_IRQL_NOT_LESS_OR_EQUAL) ausgestellt wird.

Aktivieren dieser Option

Das Verfahren zum Aktivieren der SCSI-Überprüfungsoption unterscheidet sich von den Verfahren zum Aktivieren anderer Treiberüberprüfungsoptionen.

So aktivieren Sie die SCSI-Überprüfung

  1. Starten Sie mithilfe des Treiberüberprüfungs-Managers oder der befehlszeile Verifier.exe eine Überprüfung des Miniporttreibers. Da die SCSI-Überprüfung nicht als Option verfügbar ist, müssen Sie mindestens eine andere Treiberüberprüfungsoption auswählen. Weitere Informationen finden Sie unter Auswählen von Treiberüberprüfungsoptionen und Auswählen der zu überprüfenden Treiber .

  2. Öffnen Sie die Registrierung mit regedit.exe. Fügen Sie imHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ScsiPort Schlüssel einen Unterschlüssel mit dem Namen Verifier hinzu. Fügen Sie innerhalb dieses Schlüssels einen REG_DWORD Eintrag namens VerifyLevel hinzu. Der diesem Eintrag zugewiesene Wert bestimmt, welche SCSI-Überprüfungstests aktiv sind. Der Wert 0x1 gibt die maximale Überprüfung.

  3. Starten Sie den Computer neu.

Wenn der VerifyLevel-Wert nicht vorhanden ist oder gleich 0xFFFFFFFF ist, wird die SCSI-Überprüfung deaktiviert.

Die einzelnen Bits im VerifyLevel-Wert können verwendet werden, um genau zu steuern, welche Tests ausgeführt werden. Bit null (0x1) ermöglicht bestimmte Tests; Bits 28, 29, 30 und 31 deaktivieren bestimmte Tests. Daher kann die maximale Überprüfung mithilfe des Werts 0x00000001 erreicht werden.

Die Auswirkungen der einzelnen Bits sind wie folgt:

bit Wert Auswirkung

0

0x1

Driver Verifier überwacht den Speicherzugriff des Miniporttreibers und prüft, ob Speicherpuffer nicht ordnungsgemäß verwendet werden.

28

0x10000000

Die Treiberüberprüfung führt keine Fehlerüberprüfung aus, wenn die HwAdapterControl-Routine mehr als 0,5 Sekunden dauert.

29

0x20000000

Die Treiberüberprüfung führt keine Fehlerüberprüfung aus, wenn ein Zurücksetzungszeitraum endet und noch offene Anforderungen für eine logische Einheit vorliegen.

30

0x40000000

Die Treiberüberprüfung führt keine Fehlerüberprüfung aus, wenn der Miniporttreiber ScsiPortNotification mit NextLuRequest aufruft, während eine nicht markierte Anforderung weiterhin aktiv ist.

31

0x80000000

Die Treiberüberprüfung führt keine Fehlerüberprüfung aus, wenn die HwInitialize-Routine mehr als 5 Sekunden dauert.

In den meisten Fällen ist die empfohlene Einstellung 0xD0000001. Dies ermöglicht alle SCSI-Überprüfungstests mit Ausnahme des Zeitlimits für HwAdapterControl, des Zeitlimits für HwInitialize und des Sperrens mehrerer Anforderungen an eine logische Einheit. Diese drei Tests sind oft zu streng.

Wenn ein Kerneldebugger angefügt ist, ist es möglich, die SCSI-Überprüfungsebene nach dem Startzyklus zu ändern. Verwenden Sie hierzu den Debuggerbefehl:

kd> ed scsiport!SpVrfyLevel Level 

Mit diesem Befehl können Sie einen neuen Wert für Level festlegen. Mit dieser Methode können Sie die hohen Bits (0x10000000 bis 0x8000000) jederzeit ändern. Wenn Sie jedoch das niedrige Bit (0x1) ändern möchten, müssen Sie dies während des Startvorgangs (am anfänglichen Haltepunkt des Kerneldebuggers) tun.

Wenn Sie die SCSI-Überprüfung vollständig deaktivieren möchten, müssen Sie die Ebene auf 0xFFFFFFFF am anfänglichen Haltepunkt festlegen.

Hinweis Der Wert 0xF0000000 deaktiviert alle Tests, aber die SCSI-Überprüfungsmodule werden weiterhin geladen. Verwenden Sie diesen Wert, wenn Sie die Überprüfung deaktivieren möchten, aber die Hochbittests zu einem späteren Zeitpunkt aktivieren möchten. Andererseits verhindert der Wert 0xFFFFFFFF, dass die Module vollständig geladen werden; wenn dieser Wert während des Startvorgangs verwendet wird, ist es nicht möglich, die SCSI-Überprüfung ohne Neustart zu aktivieren.

Aktivieren ohne Neustart

Im Allgemeinen können Sie die SCSI-Überprüfung nicht aktivieren oder deaktivieren, ohne den Computer unter einem Windows-Betriebssystem neu zu starten ("neustarten"). Der ScsiPort.sys-Treiber liest den Registrierungseintrag VerifyLevel nur, wenn er geladen wird, was sich in der Regel zur Startzeit befindet. Wenn der ScsiPort.sys Treiber jedoch beim Hinzufügen des Registrierungseintrags nicht geladen wird, oder wenn er entladen und neu geladen wird, können Sie die SCSI-Überprüfung unter Windows XP und höheren Versionen von Windows aktivieren, ohne den Computer neu zu starten.