0

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

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

通常所有子目录都报告为大小为 0,但如果我在 5 秒内重新运行我的实用程序(自上次运行以来)——报告一些子目录的大小为 4096。如果我在重新运行实用程序之前数到 5——一切正常。这会导致不稳定的结果和不必要的警报。

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

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

问题:

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

PS 同样的情况也发生在FILE_BOTH_DIR_INFORMATION::AllocationSize字段上。

4

1 回答 1

0

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

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

于 2021-06-07T04:40:29.023 回答