我正在开发一种文件系统驱动程序。 Windows对我的文件系统的所有读取请求都来自驱动程序实现。
我想区分“正常”读取请求和那些只想从文件中获取元数据的请求。 (Windows首先读取文件的4K,然后停止阅读。)
Windows是否以某种方式标记此元数据?为了以不同的方式处理这两种操作,这将非常有用。
在典型的CreateFile调用中,我们有AccessMode,ShareMode,CreationDisposition和FlagsAndAttributes参数(是DWORD),我不确定是否可以提取所请求操作的一些线索。
感谢阅读:)
答案 0 :(得分:0)
我建议您使用SysInternals文件监控工具。它捕获每个调用的堆栈跟踪,因为它了解PDB甚至可以显示函数名称。这应该可以让你弄清楚这个特定电话的许多细节。
答案 1 :(得分:0)
在重新阅读时,似乎问题是查找错误的优化位置。为什么不将前4KB的每个请求都视为元数据请求?这个假设几乎没有什么害处。
如果你真的需要4KB时,如果你正在进行100 MB的实际I / O,那么假设反过来会有害。但是如果你需要100 MB,那么对于前4KB的小优化最多会导致一次性小的hickup,这是一个固有的冗长操作。答案 2 :(得分:0)
不是Windows,而是执行文件扫描以提取元数据的Windows资源管理器。此外,您还将面对读取以创建缩略图。
将驱动器作为远程/网络报告给Windows将使Explorer读取更少的信息并减少文件系统的负载,但遗憾的是似乎无法完全阻止此类读取。