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.
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") |