FSCTL_SET_PURGE_FAILURE_MODE IOCTL (ntifs.h)

筛选器管理器使用 FSCTL_SET_PURGE_FAILURE_MODE 控制代码在为 数据扫描创建的节的生存期内同步操作。 筛选器绝不应发出此控制代码。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

SET_PURGE_FAILURE_MODE_INPUT结构。

输入缓冲区长度

大小(以 字节为单位)SET_PURGE_FAILURE_MODE_INPUT

输出缓冲区

输出缓冲区长度

N/A

输入/输出缓冲区

输入/输出缓冲区长度

N/A

状态块

预留给系统使用。

注解

筛选器管理器将此控制代码与IRP_MJ_FILE_SYSTEM_CONTROL调用结合使用,以将节的生命周期括起来。 这些调用用于指示文件系统 (,在无法清除缓存管理器缓存时,微筛选器) 以下列方式运行。

对于使用SET_PURGE_FAILURE_MODE_ENABLED集发出的每个FSCTL_SET_PURGE_FAILURE_MODE,都将使用SET_PURGE_FAILURE_MODE_DISABLED集发出FSCTL_SET_PURGE_FAILURE_MODE。 尽管存在未完成SET_PURGE_FAILURE_MODE_ENABLED,但筛选器管理器会按如下方式响应某些类型的操作的某些失败状态, (请参阅下表) :

• 提交操作,尽可能加快部分 (的关闭) • 将操作重新排队到发出失败的微筛选器或文件系统

若要触发筛选器管理器做出相应响应,文件系统 (或筛选器) 会通过以下方式响应清除部分失败:

操作 必需的退货状态
IRP_MJ_CREATE (破坏性操作) STATUS_USER_MAPPED_FILE
仅) IRP_MJ_WRITE (无缓冲区操作 STATUS_PURGE_FAILED
IRP_MJ_SET_INFORMATION STATUS_PURGE_FAILED

只有在未完成SET_PURGE_FAILURE_MODE_ENABLED (SET_PURGE_FAILURE_MODE_DISABLED) 未收到均衡时,才应返回这些状态。 在所有其他情况下,错误状态将返回到应用程序。

例如,对于任何其他 (操作,缓存写入) ,如果文件系统 (或筛选器) 在FSCTL_SET_PURGE_FAILURE_MODE未完成时无法清除节,则它负责挂起操作并在未完成FSCTL_SET_PURGE_FAILURE_MODE计数降至零时重新发出该操作。 如果文件系统 (或筛选器) 仅返回失败状态 (包括上面列出的) ,则将该状态返回到应用程序。

错误状态完全在筛选器管理器中处理,失败操作的重新排队也是一样。 这意味着两者都不对筛选器可见,这具有以下重要含义:

  • 进程监视器等文件系统监视工具不会报告这些操作。
  • 如果需要涉及上层筛选器才能使重新发出的操作成功,则重新排队的操作将失败。 在这种情况下,需要筛选器编写器来确保第二个筛选器返回失败状态。

要求

要求
最低受支持的客户端 Windows 8
标头 ntifs.h

另请参阅

SET_PURGE_FAILURE_MODE_INPUT