Windows筛选器驱动程序:快速IO和IRP

时间:2013-07-09 00:17:46

标签: windows minifilter filter-driver

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

过滤器驱动程序会消除它不关心的内容:

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

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

我应该关注哪些写作?

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

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

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

1 个答案:

答案 0 :(得分:2)

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

这里的解决方案是将发送到用户模式的数据包加上更多信息(如offset),然后对结果写入应用一些重复数据删除检测。数据包也可能出现故障;所以也需要一些小心处理这种情况。