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,然后才能为文件创建任何句柄。 调用方可以检查 FileObject 参数指向的 FILE_OBJECT 结构的 Flags 成员。 如果设置了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运行。 但是,微筛选器驱动程序从创建后回调例程调用此例程是安全的,因为保证在发起IRP_MJ_CREATE请求的线程上下文中,在 IRQL PASSIVE_LEVEL调用创建后回调例程。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
标头 | fltkernel.h (包括 Fltkernel.h) |
Library | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | PASSIVE_LEVEL (请参阅“备注”部分) |