筛选器管理器使用 FSCTL_SET_PURGE_FAILURE_MODE 控制代码在为 数据扫描创建的节的生存期内同步作。 筛选器绝不应发出此控制代码。
主要代码
输入缓冲区
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 |