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.
Die Treiberüberprüfung verfügt über zwei Ebenen der E/A-Überprüfung:
E/A-Verifizierung der Stufe 1 ist immer aktiv, wenn die E/A-Verifizierung ausgewählt ist.
Die E/A-Überprüfung der Stufe 2 ist immer aktiv, wenn die E/A-Überprüfung in Windows XP und höher ausgewählt ist.
Siehe auch:Erweiterte E/A-Überprüfung in Windows 7 und höheren Versionen des Windows-Betriebssystems wird die erweiterte E/A-Überprüfung automatisch aktiviert, wenn Sie die E/A-Überprüfung auswählen. Sie ist nicht verfügbar oder muss als separate Option ausgewählt werden.
Stufe 1 I/O-Überprüfung
Wenn die I/O-Überprüfung der Ebene 1 aktiviert ist, werden alle IRPs, die über IoAllocateIrp abgerufen wurden, von einem speziellen Pool zugewiesen, und ihre Verwendung wird nachverfolgt.
Darüber hinaus überprüft das Treiberüberwachungsprogramm ungültige E/A-Aufrufe, einschließlich:
Versucht, ein IRP freizugeben, dessen Typ nicht IO_TYPE_IRP ist.
Das Übergeben von ungültigen Geräteobjekten an IoCallDriver
Übergebene IRPs an IoCompleteRequest, die einen ungültigen Status enthalten oder weiterhin eine Abbruchroutine gesetzt haben
Änderungen am IRQL über einen Aufruf der Treiberweiterleitungsroutine
Versuche, ein IRP frei zu geben, das einem Thread zugeordnet bleibt
Übergeben eines Geräteobjekts an IoInitializeTimer , das bereits einen initialisierten Timer enthält
Übergeben eines ungültigen Puffers an IoBuildAsynchronousFsdRequest oder IoBuildDeviceIoControlRequest
Übergibt einen E/A-Statusblock an einen IRP, wenn dieser E/A-Statusblock auf einem Stapel zugewiesen wird, der zu weit aufgewobt ist
Übergibt ein Ereignisobjekt an ein IRP, wenn dieses Ereignisobjekt auf einem Stapel zugeordnet ist, der zu weit gewobt ist
Da der spezielle IRP-Pool eine begrenzte Größe hat, ist die E/A-Überprüfung am effektivsten, wenn er nur auf einem Treiber gleichzeitig verwendet wird.
Fehler der E/A-Überprüfungsstufe 1 führen dazu, dass Fehlerüberprüfungen 0xC9 ausgestellt werden. Der erste Parameter dieser Fehlerüberprüfung gibt an, welche Verletzung aufgetreten ist. Eine vollständige Parameterauflistung finden Sie unter "Bugcheck 0xC9 (DRIVER_VERIFIER_IOMANAGER_VIOLATION)".
Stufe 2 Ein-/Ausgabe-Überprüfung
Fehler der E/A-Überprüfungsebene 2 werden auf unterschiedliche Weise angezeigt: auf dem blauen Bildschirm, in einer Absturzabbilddatei und in einem Kerneldebugger.
Auf dem blauen Bildschirm werden diese Fehler durch die Meldung IO SYSTEM VERIFICATION ERROR und die Zeichenfolge WDM DRIVER ERRORXXX angegeben, wobei XXX ein E/A-Fehlercode ist.
In einer Absturzabbilddatei werden die meisten dieser Fehler durch die Meldung BugCheck 0xC9 (DRIVER_VERIFIER_IOMANAGER_VIOLATION) zusammen mit dem E/A-Fehlercode angezeigt. In diesem Fall wird der E/A-Fehlercode als erster Parameter der Fehlerüberprüfung 0xC9 angezeigt. Der Rest wird durch die Meldung Bug-Check 0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION) zusammen mit einem Driver Verifier-Fehlercode angegeben. In diesem Fall wird der Fehlercode "Driver Verifier" als erster Parameter der Fehlerüberprüfung 0xC4 angezeigt.
In einem Kerneldebugger (KD oder WinDbg) werden diese Fehler durch die Meldung WDM DRIVER ERROR und eine beschreibende Textzeichenfolge angegeben. Wenn der Kerneldebugger aktiv ist, ist es möglich, die Fehler der Ebene 2 zu ignorieren und den Systemvorgang fortzusetzen. (Dies ist bei anderen Fehlerüberprüfungen nicht möglich.)
Der Blaue Bildschirm, die Absturzabbilddatei und der Kerneldebugger zeigen ebenfalls zusätzliche Informationen an. Eine vollständige Beschreibung der meisten E/A-Überprüfungsstufe 2-Fehlermeldungen finden Sie unter Fehlerüberprüfung 0xC9. Weitere Informationen finden Sie unter "Fehlerüberprüfung 0xC4".
Ab Windows Vista sucht die E/A-Überprüfungsoption nach den folgenden Treiberfehlern:
Es nimmt zu viel Zeit in Anspruch, IRPs abzuschließen und abzubrechen, die aus Anwendungen im Benutzermodus stammen.
Freigeben einer Entfernungssperre, die noch nicht erworben wurde.
Aufrufen von IoReleaseRemoveLock oder IoReleaseRemoveLockAndWait mit einem Tagparameter, der sich von dem tagparameter unterscheidet, der im entsprechenden IoAcquireRemoveLock-Aufruf verwendet wird.
Aufruf von IoCallDriver bei deaktivierten Interrupts.
Aufrufen von IoCallDriver mit einem IRQL, das größer ist als DISPATCH_LEVEL.
Rückkehr von einer Treiberdisponierungsroutine mit deaktivierten Unterbrechungen.
Zurückgeben von einer Treiberverteilerroutine mit einem geänderten IRQL.
Rückkehr aus einer Treiberversandroutine mit deaktivierten APCs. In diesem Fall hat der Treiber möglicherweise KeEnterCriticalRegion häufiger aufgerufen als KeLeaveCriticalRegion, was die Hauptursache für den Bug Check 0x20 (KERNEL_APC_PENDING_DURING_EXIT) und den Bug Check 0x1 (APC_INDEX_MISMATCH) ist.
Ab Windows 7 sucht die E/A-Überprüfungsoption nach den folgenden Treiberfehlern:
- Versucht, IRPs durch Aufrufen von ExFreePool freizurufen. IRPs müssen mit IoFreeIrp freigegeben werden.
Darüber hinaus können Sie diese Option verwenden, um einen weiteren häufigen Treiberfehler zu erkennen—die Reinitialisierung von Entfernungssperren. Entfernen Von Sperren sollten Datenstrukturen innerhalb von Geräteerweiterungen zugewiesen werden. Dadurch wird sichergestellt, dass der E/A-Manager den Speicher freigibt, der die IO_REMOVE_LOCK Struktur nur enthält, wenn das Geräteobjekt gelöscht wird. Wenn der Treiber die folgenden drei Schritte ausführt, ist es möglich, dass nach Schritt 2 eine Anwendung oder ein Treiber weiterhin einen Verweis auf Device1 enthält:
- Ordnet die "IO_REMOVE_LOCK"-Struktur zu, die zu Device1 gehört, aber die Zuordnung erfolgt außerhalb des Erweiterungsbereichs von Device1.
- Ruft IoReleaseRemoveLockAndWait auf, wenn Device1 entfernt wird.
- Ruft IoInitializeRemoveLock für dieselbe Sperre auf, um sie als Entfernungssperre für Device2 wiederzuverwenden.
Es ist möglich, dass nach Schritt 2 eine Anwendung oder ein Treiber weiterhin einen Verweis auf Device1 enthält. Die Anwendung oder der Treiber kann weiterhin Anforderungen an Device1 senden, obwohl dieses Gerät entfernt wurde. Daher ist es nicht sicher, denselben Speicher wie eine neue Entfernungssperre wiederzuverwenden, bis der E/A-Manager Device1 löscht. Erneutes Initialisieren der gleichen Sperre, während ein anderer Thread versucht, es zu erwerben, kann zu einer Beschädigung der Sperre führen, mit unvorhersehbaren Ergebnissen für den Treiber und das gesamte System.
In Windows 7 und höheren Versionen des Windows-Betriebssystems wird die erweiterte E/A-Überprüfung automatisch aktiviert, wenn Sie die E/A-Überprüfung auswählen.
Aktivieren dieser Option
Sie können das E/A-Überprüfungsfeature für einen oder mehrere Treiber aktivieren, indem Sie den Treiberüberprüfungs-Manager oder die Verifier.exe Befehlszeile verwenden. Ausführliche Informationen finden Sie unter Auswählen von Treiberüberprüfungsoptionen.
An der Befehlszeile.
In der Befehlszeile wird die E/A-Überprüfungsoption durch Bit 4 (0x10) dargestellt. Um die E/A-Überprüfung zu aktivieren, verwenden Sie einen Flagwert von 0x10 oder fügen Sie 0x10 zum Flagwert hinzu. Beispiel:
verifier /flags 0x10 /driver MyDriver.sysDas Feature wird nach dem nächsten Start aktiv.
Sie können die E/A-Überprüfung auch aktivieren und deaktivieren, ohne den Computer neu zu starten, indem Sie dem Befehl den Parameter "/volatile " hinzufügen. Beispiel:
verifier /volatile /flags 0x10 /adddriver MyDriver.sysDiese Einstellung ist sofort wirksam, geht aber verloren, wenn Sie den Computer herunterfahren oder neu starten. Ausführliche Informationen finden Sie unter Verwenden von flüchtigen Einstellungen.
Das E/A-Überprüfungsfeature ist auch in den Standardeinstellungen enthalten. Beispiel:
verifier /standard /driver MyDriver.sysVerwenden des Treiberüberprüfungs-Managers
- Wählen Sie "Benutzerdefinierte Einstellungen erstellen" (für Codeentwickler) aus, und klicken Sie dann auf "Weiter".
- Wählen Sie aus einer vollständigen Liste "Einzelne Einstellungen" aus.
- Aktivieren (überprüfen) Sie die E/A-Überprüfung.
Das E/A-Überprüfungsfeature ist auch in den Standardeinstellungen enthalten. Um dieses Feature zu verwenden, klicken Sie im Treiberüberprüfungs-Manager auf "Standardeinstellungen erstellen".