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,FSCTL_SET_PURGE_FAILURE_MODE将与SET_PURGE_FAILURE_MODE_DISABLED集一起颁发。 虽然存在未完成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