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,以關閉檔案。
請注意,FltCancelFileOpen 不會復原檔案的任何修改。 例如,FltCancelFileOpen 不會刪除新建立的檔案,也不會還原覆寫或取代至其先前狀態的檔案。
FltCancelFileOpen 必須先呼叫,才能為檔案建立任何句柄。 呼叫端可以檢查 旗標FILE_OBJECT 結構的成員,FileObject 參數所指向。 如果已設定FO_HANDLE_CREATED旗標,這表示已為檔案建立一或多個句柄,因此呼叫 FltCancelFileOpen並不安全。
FltCancelFileOpen 會設定 FileObject 指向之檔案物件的 Flags 成員中的FO_FILE_OPEN_CANCELLED旗標。 此旗標表示已取消建立作業,而且會針對這個檔案對象發出關閉 (IRP_MJ_CLOSE) 要求。
一旦取消建立作業,就無法重新發出。 如需詳細資訊,請參閱 FltReissueSynchronousIo。
FltCancelFileOpen 只能從小型篩選驅動程式的建立後回呼例程呼叫。 從任何其他 I/O 作業類型的後置回呼 (PFLT_POST_OPERATION_CALLBACK) 例程呼叫 FltCancelFileOpen,或從預先作回呼 (PFLT_PRE_OPERATION_CALLBACK) 例程呼叫它,是程式設計錯誤。
FltCancelFileOpen 的呼叫端必須在 IRQL PASSIVE_LEVEL執行。 不過,小型篩選驅動程式可以從建立後回呼例程呼叫此例程是安全的,因為建立後回呼例程一定會在 IRQL PASSIVE_LEVEL 呼叫,因為源自IRP_MJ_CREATE要求的線程內容中,一定會呼叫後續建立回呼例程。
要求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
標頭 | fltkernel.h (包括 Fltkernel.h) |
連結庫 | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | PASSIVE_LEVEL (請參閱一節) |
另請參閱
IRP_MJ_CREATE 的 FLT_PARAMETERS