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