Abbrechen von IRPs

Treiber, in denen IRPs möglicherweise für ein unbegrenztes Intervall in der Warteschlange bleiben (damit ein Benutzer eine zuvor übermittelte E/A-Anforderung abbrechen konnte), müssen über eine oder mehrere Cancel-Routinen verfügen, um vom Benutzer abgebrochene E/A-Anforderungen abzuschließen. Beispielsweise sollten Tastatur-, Maus-, parallele, serielle und Soundgerätetreiber (oder Treiber, die über sie verteilt sind) und Dateisystemtreiber über Cancel-Routinen verfügen .

Treiber für Microsoft Windows XP und höhere Betriebssysteme können abbruchsichere IRP-Warteschlangen verwenden, anstatt eigene Abbruchroutinen zu implementieren.

"Abbrechen einer IRP" bedeutet, die IRP so schnell wie möglich abzuschließen und gleichzeitig die Systemintegrität aufrechtzuerhalten. Eine allgemeine Diskussion zur IRP-Vervollständigung finden Sie unter Abschließen von IRPs.

Der Abbruchvorgang beginnt, wenn entweder das System oder ein Treiber IoCancelIrp aufruft. Diese Routine wird für jede IRP aufgerufen, die dem Thread zugeordnet ist, der noch nicht vollständig abgeschlossen ist. Das System bricht nicht verarbeitete IRPs ab, wenn der Thread, der die E/A-Anforderung initiiert hat, beendet wird. Treiber können nur IRPs abbrechen, die sie erstellt haben (siehe Erstellen von IRPs für Lower-Level Treiber).)

Wenn eine abgebrochene IRP nicht innerhalb von 5 Minuten abgeschlossen wird, betrachtet der E/A-Manager das IRP-Timeout. Solche IRPs werden dem Thread nicht zugeordnet, und für das Gerät, das derzeit besitzer des IRP ist, wird ein Fehler protokolliert. Sie sollten sicherstellen, dass alle Anforderungen, die in Ihrem Treiber möglicherweise lange dauern, abgebrochen werden können. Um sicherzustellen, dass potenziell lange Anforderungen abgesagt werden können, können Sie abbruchsichere IRP-Warteschlangen oder kernel-Mode Driver Framework verwenden, das den Abbruch vom Treiberentwickler abstrahiert.

Dieser Abschnitt enthält die folgenden Themen:

Einführung in das Abbrechen von Routinen

Registrieren einer Abbruchroutine

Synchronisieren von IRP-Abbruch

Implementieren einer Abbruchroutine

Punkte, die beim Abbrechen von IRPs zu berücksichtigen sind