微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NtQueryInformationFile(FileBothDirectoryInformation) 间歇性地报告某些子目录的非零大小 (EndOfFile/AllocationSize)

如何解决NtQueryInformationFile(FileBothDirectoryInformation) 间歇性地报告某些子目录的非零大小 (EndOfFile/AllocationSize)

我有一个简单的实用程序,可以递归扫描目录(使用 NtQueryinformationFile(FileBothDirectoryinformation))并计算各种统计信息。它通常针对各种 SMB 共享(托管在 Win12 服务器上)执行。

特别是它计算 total-bytes(使用 FILE_BOTH_DIR_informatION::EndOfFile 字段)。

通常所有的子目录也都报告为大小为0,但如果我重新运行5秒钟之内我的实用程序(因为上次运行) - 一些子目录也都报告有大小4096如果我重新运行实用程序之前数到5 - 一切行。这导致不稳定的结果和不希望的报警。

所有受影响的目录似乎都有相同的共同点——每个目录:

  • 要么包含 Thumbs.db文件
  • or 是包含 Thumbs.db 文件的目录的父目录
    • ...但并非总是如此——有时父目录大小是稳定的 0

问题:

  1. 为什么会发生这种情况,为什么是 5 秒?
  2. 如何避免这种情况?我是否应该始终将子目录视为“使用零字节”?

附言FILE_BOTH_DIR_informatION::AllocationSize 字段也是如此。

解决方法

我认为 SMB 客户端正在对目录进行一些本地缓存,并使用“默认数据流”来存储与缓存相关的信息,这就是您所看到的。

我认为您应该简单地忽略目录的分配大小。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。