0

我编写了一个只关心写入的简单过滤器驱动程序。过滤器只注册 IRP_MJ_WRITEs。

过滤器驱动程序削减了它不关心的内容:

  • 如果写入长度为 0 字节
  • 如果请求者是 KernelMode
  • 如果元数据中的文件名与我们感兴趣的特定文件匹配

我要捕获的是实际上将写入磁盘的所有写入。

我应该关心哪些写入?

目前我正在捕获所有 IRP 和 FAST_IO。但同时捕获两者会产生一些重复。仅捕获 IRP,我似乎错过了一些数据,就像仅捕获 FAST_IO 一样。

我已阅读http://msdn.microsoft.com/en-us/library/ff548576.aspx(“IRP 与快速 I/O 不同”),但这并没有澄清我的经验数据。

我正在尝试做的是在过滤器驱动程序级别执行“tee”的等效性。

4

1 回答 1

2

看来我误解了通过过滤器驱动程序的数据包与最终写入磁盘的数据包之间的关系。

这里的解决方案是在发送到用户模式的数据包中添加更多信息,如偏移量——然后对结果写入应用一些去重检测。数据包也可能乱序;因此,处理这种情况也需要一些小心。

于 2013-09-18T19:59:38.767 回答