共用方式為


FltCancelFileOpen 函式 (fltkernel.h)

迷你篩選驅動程式可以使用 FltCancelFileOpen 例程來關閉新開啟或建立的檔案。

語法

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

參數

[in] Instance

呼叫端的不透明實例指標。 這個參數是必要的,而且不能是 NULL

[in] FileObject

檔案的檔案對象指標。 這個參數是必要的,而且不能是 NULL

傳回值

備註

如果迷你篩選驅動程式判斷檔案開啟或檔案建立 (IRP_MJ_CREATE) 作業在文件系統完成作業後必須失敗,且具有成功的 NTSTATUS 值,例如 STATUS_SUCCESS,迷你篩選驅動程式可以從其建立后回呼例程呼叫 FltCancelFileOpen 來關閉檔案。

注意 雖然STATUS_REPARSE是成功的NTSTATUS值,但不需要呼叫 FltCancelFileOpen 來建立以STATUS_REPARSE完成的作業,因為這個狀態值表示檔案未成功開啟。
 
成功呼叫 FltCancelFileOpen 有下列效果:若要在迷你篩選驅動程式實例堆疊中呼叫端上方的小型篩選驅動程式和舊版篩選,建立要求似乎失敗。 在呼叫端下方的呼叫者中,檔案似乎已開啟 (或建立) ,然後關閉。

請注意 ,FltCancelFileOpen 不會復原檔案的任何修改。 例如, FltCancelFileOpen 不會刪除新建立的檔案,或還原覆寫或取代為先前狀態的檔案。

必須先呼叫 FltCancelFileOpen ,才能為檔案建立任何句柄。 呼叫端可以檢查 FileObject 參數指向之FILE_OBJECT結構的 Flags 成員。 如果已設定FO_HANDLE_CREATED旗標,這表示已為檔案建立一或多個句柄,因此呼叫 FltCancelFileOpen 並不安全。

FltCancelFileOpen 會在 FileObject 指向之檔案物件的 Flags 成員中設定FO_FILE_OPEN_CANCELLED旗標。 此旗標表示已取消建立作業,併發出此檔案對象的關閉 (IRP_MJ_CLOSE) 要求。

一旦取消建立作業,就無法重新發出。 如需詳細資訊,請參閱 FltReissueSynchronousIo

FltCancelFileOpen 只能從迷你篩選驅動程式的建立後回呼例程呼叫。 從後置回呼呼叫 FltCancelFileOpen (PFLT_POST_OPERATION_CALLBACK) 例程,以用於任何其他 I/O 作業類型,或從預先操作回呼呼叫它 (PFLT_PRE_OPERATION_CALLBACK) 例程,是程式設計錯誤。

FltCancelFileOpen 的呼叫端必須在 IRQL PASSIVE_LEVEL執行。 不過,迷你篩選驅動程式可以從建立後回呼例程呼叫此例程是安全的,因為在產生IRP_MJ_CREATE要求的線程內容中,保證會在 IRQL PASSIVE_LEVEL呼叫後回呼例程。

規格需求

需求
目標平台 Universal
標頭 fltkernel.h (包含 Fltkernel.h)
程式庫 FltMgr.lib
Dll Fltmgr.sys
IRQL PASSIVE_LEVEL (请参阅一节)

另請參閱

FILE_OBJECT

FLT_CALLBACK_DATA

FLT_IS_REISSUED_IO

IRP_MJ_CREATE FLT_PARAMETERS

FltReissueSynchronousIo

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCancelFileOpen

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK