如何解决NtQueryInformationFile(FileBothDirectoryInformation) 间歇性地报告某些子目录的非零大小 (EndOfFile/AllocationSize)
我有一个简单的实用程序,可以递归扫描目录(使用 NtQueryinformationFile(FileBothDirectoryinformation)
)并计算各种统计信息。它通常针对各种 SMB 共享(托管在 Win12 服务器上)执行。
特别是它计算 total-bytes
(使用 FILE_BOTH_DIR_informatION::EndOfFile
字段)。
通常所有的子目录也都报告为大小为0,但如果我重新运行5秒钟之内我的实用程序(因为上次运行) - 一些子目录也都报告有大小4096如果我重新运行实用程序之前数到5 - 一切行。这导致不稳定的结果和不希望的报警。
所有受影响的目录似乎都有相同的共同点——每个目录:
问题:
- 为什么会发生这种情况,为什么是 5 秒?
- 如何避免这种情况?我是否应该始终将子目录视为“使用零字节”?
附言FILE_BOTH_DIR_informatION::AllocationSize
字段也是如此。
解决方法
我认为 SMB 客户端正在对目录进行一些本地缓存,并使用“默认数据流”来存储与缓存相关的信息,这就是您所看到的。
我认为您应该简单地忽略目录的分配大小。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。