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 Instanzzeiger für den Aufrufer. Dieser Parameter ist erforderlich und kann nicht NULL-werden.

[in] FileObject

Dateiobjektzeiger für die Datei. Dieser Parameter ist erforderlich und kann nicht NULL-werden.

Rückgabewert

Nichts

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 nach der Erstellung erstellten Rückrufroutine aufrufen, um die Datei zu schließen.

Hinweis Obwohl STATUS_REPARSE ein NTSTATUS-Erfolgswert ist, ist es nicht erforderlich, FltCancelFileOpen für einen Mit STATUS_REPARSE abgeschlossenen Erstellungsvorgang aufzurufen, da dieser Statuswert angibt, dass die Datei nicht erfolgreich geöffnet wurde.
 
Ein erfolgreicher Aufruf von FltCancelFileOpen hat die folgende Auswirkung: Um Minifiltertreiber und legacyfilter, die über dem Aufrufer im Minifilter-Treiberinstanzstapel liegen, 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 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 eine Datei wieder her, die überschrieben oder in den vorherigen Zustand überschrieben wurde.

FltCancelFileOpen muss aufgerufen werden, bevor alle Handles für die Datei erstellt werden. Aufrufer können die Flags Member 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 Handles für die Datei erstellt wurde, sodass es nicht sicher ist, FltCancelFileOpenaufzurufen.

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 close (IRP_MJ_CLOSE) Anforderung wird für dieses Dateiobjekt ausgegeben.

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

FltCancelFileOpen kann nur von der Nacherstellungsrückrufroutine eines Minifiltertreibers aufgerufen werden. Das Aufrufen von FltCancelFileOpen aus einer Postoperationsrückrufroutine (PFLT_POST_OPERATION_CALLBACK) für jeden anderen Typ von E/A-Vorgängen oder das Aufrufen von einer Voroperationsrückrufroutine (PFLT_PRE_OPERATION_CALLBACK) ist ein Programmierfehler.

Aufrufer von FltCancelFileOpen müssen bei IRQL-PASSIVE_LEVEL ausgeführt werden. Es ist jedoch sicher, dass Minifiltertreiber diese Routine aus einer Rückrufroutine nach der Erstellung aufrufen, da post-create callback routines garantiert bei IRQL-PASSIVE_LEVEL aufgerufen werden, im Kontext des Threads, der die IRP_MJ_CREATE Anforderung stammte.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- fltkernel.h (include Fltkernel.h)
Library FltMgr.lib
DLL- Fltmgr.sys
IRQL- PASSIVE_LEVEL (siehe Abschnitt "Hinweise")

Siehe auch

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