在Windows文件系统中检测仅元数据读取请求

时间:2009-10-29 13:46:38

标签: c++ windows winapi file-io dokan

我正在开发一种文件系统驱动程序。 Windows对我的文件系统的所有读取请求都来自驱动程序实现。

我想区分“正常”读取请求和那些只想从文件中获取元数据的请求。 (Windows首先读取文件的4K,然后停止阅读。)

Windows是否以某种方式标记此元数据?为了以不同的方式处理这两种操作,这将非常有用。

在典型的CreateFile调用中,我们有AccessMode,ShareMode,CreationDisposition和FlagsAndAttributes参数(是DWORD),我不确定是否可以提取所请求操作的一些线索。

感谢阅读:)

3 个答案:

答案 0 :(得分:0)

我建议您使用SysInternals文件监控工具。它捕获每个调用的堆栈跟踪,因为它了解PDB甚至可以显示函数名称。这应该可以让你弄清楚这个特定电话的许多细节。

答案 1 :(得分:0)

在重新阅读时,似乎问题是查找错误的优化位置。为什么不将前4KB的每个请求都视为元数据请求?这个假设几乎没有什么害处。

如果你真的需要4KB时,如果你正在进行100 MB的实际I / O,那么假设反过来会有害。但是如果你需要100 MB,那么对于前4KB的小优化最多会导致一次性小的hickup,这是一个固有的冗长操作。

答案 2 :(得分:0)

不是Windows,而是执行文件扫描以提取元数据的Windows资源管理器。此外,您还将面对读取以创建缩略图。

将驱动器作为远程/网络报告给Windows将使Explorer读取更少的信息并减少文件系统的负载,但遗憾的是似乎无法完全阻止此类读取。