Wann sollte eine IRP abgeschlossen werden?

Ein Treiber sollte die IRP-Vervollständigung initiieren, wenn eine der folgenden Bedingungen erfüllt ist:

  • Der Treiber bestimmt, dass die IRP-Verarbeitung aufgrund ungültiger Parameter oder anderer Bedingungen nicht fortgesetzt werden kann.

  • Der Treiber kann den angeforderten E/A-Vorgang verarbeiten, ohne den IRP im Treiberstapel zu übergeben, und der Vorgang wurde abgeschlossen.

  • Die IRP wird abgebrochen. (Siehe Abbrechen von IRPs.)

Wenn diese Bedingungen nicht erfüllt sind, muss die Dispatchroutine eines Treibers den IRP an den nächstniedrigen Treiber übergeben oder die Verarbeitung der E/A-Anforderung verarbeiten. Wenn eine der Bedingungen erfüllt ist, muss der Treiber IoCompleteRequest aufrufen.

Wenn ein Treiber eine Anforderung abschließt, weil die Verarbeitung nicht fortgesetzt werden kann, oder wenn er eine Anforderung durch Behandlung des angeforderten Vorgangs ohne tatsächlichen Zugriff auf das Gerät abschließt, ruft er in der Regel IoCompleteRequest aus einer seiner Dispatchroutinen auf. Weitere Informationen finden Sie unter Abschließen von IRPs in Dispatch-Routinen.

Wenn ein Treiber auf ein Gerät zugreifen muss, um die Anforderung zu erfüllen, ruft er in der Regel IoCompleteRequest aus einer DpcForIsr-Routine auf. Diese Routinen werden ausführlich unter Servicing Interrupts (Wartungsunterbrechungen) erläutert.