IoCancelFileOpen 函数 (ntddk.h)
IoCancelFileOpen 例程可由文件系统筛选器驱动程序用来关闭筛选器驱动程序设备堆栈中文件系统驱动程序打开的文件。
语法
void IoCancelFileOpen(
[in] PDEVICE_OBJECT DeviceObject,
[in] PFILE_OBJECT FileObject
);
参数
[in] DeviceObject
指向紧邻筛选器驱动程序设备对象的设备堆栈顶部的指针。
[in] FileObject
指向要关闭的文件的文件对象的指针。
返回值
没有
言论
如果文件系统筛选器驱动程序确定文件打开或文件创建请求必须在较低级别驱动程序完成请求后失败,STATUS_SUCCESS,则可以使用 IoCancelFileOpen 关闭由较低级别的驱动程序打开的文件。
尽管STATUS_REPARSE是成功的 NTSTATUS 值,但不需要调用 IoCancelFileOpen 来完成STATUS_REPARSE的创建作,因为此状态值指示文件未成功打开。
成功调用 IoCancelFileOpen 具有以下效果:若要在文件系统堆栈中调用方上方的微筛选器和旧筛选器,创建请求似乎已失败。 在调用方下方的调用方中,文件似乎已打开(或已创建),然后关闭。
请注意,IoCancelFileOpen 不会撤消对文件的任何修改。 例如,IoCancelFileOpen 不会删除新创建的文件或还原覆盖或取代其以前的状态的文件。
典型的示例如下:
筛选器驱动程序存在于较高级别的筛选器驱动程序和较低级别的文件系统驱动程序之间。
筛选器驱动程序将设备堆栈中的IRP_MJ_CREATE请求传递到文件系统驱动程序,文件系统驱动程序完成状态STATUS_SUCCESS IRP_MJ_CREATE请求。
在筛选器驱动程序完成创建请求之前,它确定文件必须关闭。
筛选器驱动程序使用 IoCancelFileOpen 关闭文件系统驱动程序打开的文件。
调用 IoCancelFileOpen后,筛选器驱动程序应使用适当的错误代码(如STATUS_UNSUCCESSFUL或STATUS_ACCESS_DENIED)完成创建请求。 此外,它应将 Irp->IoStatus.Information 字段设置为零。
在为文件创建任何句柄之前,必须先调用 ioCancelFileOpen。 调用方可以检查 标志FILE_OBJECT 结构的成员,FileObject 参数指向。 如果设置了FO_HANDLE_CREATED标志,则表示已为文件创建了一个或多个句柄,因此调用 IoCancelFileOpen是不安全的。
IoCancelFileOpen 设置 fileObject 指向的文件 对象的 标志 成员中的FO_FILE_OPEN_CANCELLED标志。 此标志指示已取消IRP_MJ_CREATE请求,并且将为此文件对象发出IRP_MJ_CLOSE请求。 取消创建作后,无法重新发出该作 ,也就是说,如果旧筛选器驱动程序调用了 IoCreateFileOpen 例程,则无法返回STATUS_REPARSE。
微型筛选器应使用 FltCancelFileOpen,而不是 IoCancelFileOpen。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 此例程在 Windows 2000 及更高版本Microsoft提供。 |
目标平台 | 普遍 |
标头 | ntddk.h (包括 Ntddk.h、Ntifs.h、Fltkernel.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |