Freigeben über


FltCancelFileOpen-Funktion (fltkernel.h)

Ein Minifiltertreiber kann die FltCancelFileOpen-Routine verwenden, um eine neu geöffnete oder erstellte Datei zu schließen.

Syntax

VOID FLTAPI FltCancelFileOpen(
  [in] PFLT_INSTANCE Instance,
  [in] PFILE_OBJECT  FileObject
);

Parameter

[in] Instance

Undurchsichtiger instance Zeiger für den Aufrufer. Dieser Parameter ist erforderlich und darf nicht NULL sein.

[in] FileObject

Dateiobjektzeiger für die Datei. Dieser Parameter ist erforderlich und darf nicht NULL sein.

Rückgabewert

Keine

Bemerkungen

Wenn ein Minifiltertreiber feststellt, dass ein Dateiöffnen- oder Dateierstellungsvorgang (IRP_MJ_CREATE) fehlschlagen muss, nachdem das Dateisystem den Vorgang bereits mit einem erfolgreichen NTSTATUS-Wert wie STATUS_SUCCESS abgeschlossen hat, kann der Minifiltertreiber FltCancelFileOpen aus seiner Rückrufroutine nach der Erstellung aufrufen, um die Datei zu schließen.

Hinweis Obwohl STATUS_REPARSE ein erfolgreicher NTSTATUS-Wert ist, ist es nicht erforderlich, FltCancelFileOpen für einen Erstellungsvorgang aufzurufen, der mit STATUS_REPARSE abgeschlossen wurde, da dieser status Wert angibt, dass die Datei nicht erfolgreich geöffnet wurde.
 
Ein erfolgreicher Aufruf von FltCancelFileOpen hat die folgende Auswirkung: Bei Minifiltertreibern und Legacyfiltern, die sich über dem Aufrufer im Minifiltertreiber instance Stapel befinden, scheint die Erstellungsanforderung fehlgeschlagen zu sein. Für diejenigen, die sich unterhalb des Aufrufers befinden, scheint die Datei geöffnet (oder erstellt) und dann geschlossen worden zu sein.

Beachten Sie, dass FltCancelFileOpen keine Änderungen an der Datei rückgängig macht. Beispielsweise löscht FltCancelFileOpen keine neu erstellte Datei oder stellt keine Datei wieder her, die überschrieben oder in ihren vorherigen Zustand ersetzt wurde.

FltCancelFileOpen muss aufgerufen werden, bevor Handles für die Datei erstellt werden. Aufrufer können das Flags-Element der FILE_OBJECT Struktur überprüfen, auf die der FileObject-Parameter verweist. Wenn das FO_HANDLE_CREATED-Flag festgelegt ist, bedeutet dies, dass mindestens ein Handle für die Datei erstellt wurde, sodass es nicht sicher ist, FltCancelFileOpen aufzurufen.

FltCancelFileOpen legt das FO_FILE_OPEN_CANCELLED-Flag im Flags-Element des Dateiobjekts fest, auf das FileObject verweist. Dieses Flag gibt an, dass der Erstellungsvorgang abgebrochen wurde und eine Schließen-Anforderung (IRP_MJ_CLOSE) für dieses Dateiobjekt ausgegeben wird.

Nachdem der Erstellungsvorgang abgebrochen wurde, kann er nicht erneut ausgegeben werden. Weitere Informationen finden Sie unter FltReissueSynchronousIo.

FltCancelFileOpen kann nur über die Rückrufroutine eines Minifiltertreibers nach der Erstellung aufgerufen werden. Das Aufrufen von FltCancelFileOpen aus einer Postoperation-Rückrufroutine (PFLT_POST_OPERATION_CALLBACK) für einen anderen Typ von E/A-Vorgängen oder das Aufrufen von FltCancelFileOpen aus einer PFLT_PRE_OPERATION_CALLBACK-Routine (Preoperation Callback) ist ein Programmierfehler.

Aufrufer von FltCancelFileOpen müssen unter IRQL PASSIVE_LEVEL ausgeführt werden. Für Minifiltertreiber ist es jedoch sicher, diese Routine aus einer Rückrufroutine nach der Erstellung aufzurufen, da rückrufroutinen nach der Erstellung garantiert am IRQL-PASSIVE_LEVEL im Kontext des Threads aufgerufen werden, der die IRP_MJ_CREATE-Anforderung ausgelöst hat.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header fltkernel.h (include Fltkernel.h)
Bibliothek FltMgr.lib
DLL Fltmgr.sys
IRQL PASSIVE_LEVEL (siehe Abschnitt Hinweise)

Weitere Informationen

FILE_OBJECT

FLT_CALLBACK_DATA

FLT_IS_REISSUED_IO

FLT_PARAMETERS für IRP_MJ_CREATE

FltReissueSynchronousIo

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCancelFileOpen

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK