0

我使用 msdn 中的删除微过滤器示例作为基础: http ://code.msdn.microsoft.com/windowshardware/Delete-File-System-b904651d

我需要完成的是:

  1. 在 DfPreCleanupCallback 中获取删除候选对象的句柄。
  2. 在 DfPostCleanupCallback 中 - 确定如果不是获取的句柄,该文件应该被删除。
  3. 同样在 DfPostCleanupCallback - 对将被删除的文件执行一些操作并释放句柄。还确保在下次进入 IRP_MJ_CLEANUP 时删除以避免无限循环。

我对微过滤器和过滤器管理器的理解非常模糊,因此在深入研究微过滤器世界之前,我想知道这在原则上是否可行。

短版 - 我需要一种方法来确定文件将被删除,并对该文件进行一些操作。

4

2 回答 2

1

您需要在 pre callback 中进行所有处理,因为所有删除相关信息都会在清理时提升到 FCB。

在 DfPreCleanupCallback 中获取删除候选对象的句柄。

在清理路径中检索句柄是个坏主意,因为它会导致文件对象的句柄计数增加,即在清理过程中。而不是只使用 FILE_OBJECT,它被赋予预回调(例如在使用 FltReadFile 的操作中)。

对文件执行一些操作

清理请求到达 fs 后,它会在 FILE_OBJECT 上设置 FO_CLEANUP_COMPLETE,并且您可以使用它执行的操作非常有限。同样确保文件删除只能在预回调中完成。

于 2014-03-27T04:50:58.093 回答
0

正如@izlesa 评论的那样,您无法确定该文件在所有情况下都会被删除。主要是如果使用缓存管理器打开文件,则可以保留对该文件的引用。

如果您担心删除其内容,您可以在尝试删除之前将其大小设置为 0。或者擦拭它。或者做那些事情并搬到其他隐藏的地方。

于 2014-03-28T14:44:12.607 回答