Zulassen eines schnellen E/A-Vorgangs in einer Preoperation-Rückrufroutine

Unter bestimmten Umständen kann ein Minifiltertreiber einen schnellen E/A-Vorgang nicht zulassen, anstatt ihn abzuschließen. Wenn Sie einen schnellen E/A-Vorgang nicht verwenden, wird verhindert, dass der schnelle E/A-Pfad für den Vorgang verwendet wird.

Wie beim Abschließen eines E/A-Vorgangs bedeutet das Aufheben der Verweigerung eines schnellen E/A-Vorgangs, die Verarbeitung anzuhalten und an den Filter-Manager zurückzugeben. Die Aufhebung eines schnellen E/A-Vorgangs unterscheidet sich jedoch von dessen Abschluss. Wenn ein Minifiltertreiber einen schnellen E/A-Vorgang, der vom E/A-Manager ausgegeben wurde, nicht zuzulassen, kann der E/A-Manager denselben Vorgang wie ein gleichwertiger IRP-basierter Vorgang erneut ausführen.

Wenn die Voroperationsrückrufroutine eines Minifiltertreibers einen schnellen E/A-Vorgang nicht zugibt, führt der Filter-Manager folgendes aus:

  • Sendet den Vorgang nicht an Minifiltertreiber unterhalb des aktuellen Minifiltertreibers, an Legacyfilter oder an das Dateisystem.

  • Ruft die Rückrufroutinen nach der Operation der Minifiltertreiber oberhalb des aktuellen Minifiltertreibers im Minifiltertreiber instance Stapel auf.

  • Ruft nicht die Postoperation-Rückrufroutine des aktuellen Minifiltertreibers für den Vorgang auf, sofern vorhanden.

Ein Minifiltertreiber lässt einen schnellen E/A-Vorgang nicht zu, indem FLT_PREOP_DISALLOW_FASTIO aus der Preoperation-Rückrufroutine für den Vorgang zurückgegeben wird.

Die Rückrufroutine vor der Operation sollte das Feld IoStatus.Status der Rückrufdatenstruktur nicht festlegen, da der Filter-Manager dieses Feld automatisch auf STATUS_FLT_DISALLOW_FAST_IO festlegt.

FLT_PREOP_DISALLOW_FASTIO können nur für schnelle E/A-Vorgänge zurückgegeben werden. Informationen dazu, ob ein Vorgang ein schneller E/A-Vorgang ist, finden Sie unter FLT_IS_FASTIO_OPERATION.

Minifiltertreiber können keine FLT_PREOP_DISALLOW_FASTIO für IRP_MJ_SHUTDOWN-, IRP_MJ_VOLUME_MOUNT- oder IRP_MJ_VOLUME_DISMOUNT-Vorgänge zurückgeben.