Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das SCSI-Überprüfungsfeature von Driver Verifier überwacht die Interaktion zwischen einem SCSI-Miniporttreiber und dem Porttreiber. Wenn der Miniporttreiber eine Routine missbraucht, fälschlicherweise auf eine Anforderung des Porttreibers reagiert oder eine übermäßige Zeit in Anspruch nimmt, um auf eine Anforderung zu reagieren, wird eine Fehlerüberprüfung ausgegeben.
Diese Treiberüberprüfungsoption ist nur in Windows XP und höher verfügbar.
Verstöße, die durch die SCSI-Überprüfung erkannt wurden
Die SCSI-Überprüfungsoption kann mehrere Missbrauche von SCSI-Routinen erkennen. Es ist auch möglich, bestimmte dieser Prüfungen einzeln zu deaktivieren.
Wenn ein SCSI-Miniporttreiber einen der folgenden Verstöße begeht, erteilt Driver Verifier die Fehlerüberprüfung 0xF1.
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, wobei der Prozessor für eine übermäßig lange Zeit angehalten wird.
Der Porttreiber ruft eine Miniporttreiberroutine auf, und der Miniporttreiber benötigt länger als 0,5 Sekunden, um die Ausführung abzuschließen. (Die FindAdapter-Routine ist ausgenommen, und die HwInitialize-Routine ist 5 Sekunden zulässig.)
Der Miniporttreiber bearbeitet eine Anforderung mehrmals.
Der Miniporttreiber schließt eine Routine mit einem ungültigen SRB-Status ab.
Der Miniport-Treiber ruft ScsiPortNotification auf, um nach NextLuRequest zu fragen, aber eine nicht markierte Anforderung ist noch aktiv.
Der Miniporttreiber übergibt eine ungültige virtuelle Adresse an ScsiPortGetPhysicalAddress. (Dies bedeutet in der Regel, dass die angegebene Adresse nicht dem gemeinsamen Pufferbereich zugeordnet ist.)
Der Haltezeitraum für die Busrücksetzung endet, aber der Miniporttreiber hat immer noch ausstehende Anforderungen.
Eine vollständige Liste der Fehlerüberprüfungsparameter finden Sie unter Bug Check 0xF1 (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 von Miniporttreibern sind, dass sie eine SRB-Erweiterung nach Abschluss einer Anforderung weiterhin nutzen und auf den DataBuffer eines SRB zugreifen, wenn der Miniporttreiber MapBuffers nicht angegeben hat.
Speicherverletzungen dieser Art führen in der Regel zur Ausgabe von Bug Check 0xD1 (DRIVER_IRQL_NOT_LESS_OR_EQUAL).
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
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 der Optionen für die Treiberüberprüfung und Auswählen der zu überprüfenden Treiber .
Öffnen Sie die Registrierung mit regedit.exe. Fügen Sie im schlüsselHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ScsiPort einen Unterschlüssel namens 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 eine maximale Überprüfung an.
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 durchgefü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 abgerufen werden.
Die Auswirkungen der einzelnen Bits sind wie folgt:
| Bit | Wert | Effekt |
|---|---|---|
0 |
0x1 |
Die Treiberüberprüfung überwacht den Speicherzugriff des Miniporttreibers und überprüft die fehlerhafte Verwendung von Speicherpuffern. |
28 |
0x10000000 |
Die Treiberüberprüfung gibt keine Fehlerüberprüfung aus, wenn die HwAdapterControl-Routine mehr als 0,5 Sekunden benötigt, um den Vorgang abzuschließen. |
29 |
0x20000000 |
Die Treiberüberprüfung gibt keine Fehlerüberprüfung aus, wenn ein Reset-Aufbewahrungszeitraum endet und es noch ausstehende Anforderungen auf einer logischen Einheit gibt. |
30 |
0x40000000 |
Die Treiberüberprüfung gibt keine Fehlerüberprüfung aus, wenn der Miniporttreiber ScsiPortNotification mit NextLuRequest aufruft, während eine nicht markierte Anforderung noch aktiv ist. |
31 |
0x80000000 |
Die Treiberüberprüfung gibt 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 Verifier-Tests mit Ausnahme des Zeitlimits für HwAdapterControl, das Zeitlimit für HwInitialize und das Verbot 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 dazu 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 jederzeit die hohen Bits (0x10000000 bis 0x8000000) ä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 " Level " auf "0xFFFFFFFF" am anfänglichen Haltepunkt festlegen.
Anmerkung 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 High-Bit-Tests 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 Starts 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 auf einem Windows-Betriebssystem neu zu starten ("Neustarten"). Der ScsiPort.sys Treiber liest den VerifyLevel-Registrierungseintrag nur, wenn er geladen wird, was normalerweise zur Startzeit erfolgt. Wenn der ScsiPort.sys Treiber jedoch nicht geladen ist, wenn Sie den Registrierungseintrag hinzufügen, oder wenn er entladen und neu geladen wird, können Sie die SCSI-Überprüfung unter Windows XP oder höheren Versionen von Windows aktivieren, ohne den Computer neu zu starten.