检索 CIFS 文件元数据的最快方法
fastest way to retrieve CIFS file metadata
情况:
我正在使用 NtQueryDirectoryFile(..., FileBothDirectoryInformation, ...)
扫描目录。除了此调用返回的数据外,我还需要安全数据(通常由 GetKernelObjectSecurity
返回)和备用流列表 (NtQueryInformationFile(..., FileStreamInformation)
)。
问题:
要检索安全和备用流信息,我需要打开(和关闭)每个文件。在我的测试中,它使操作速度减慢了 3 倍。添加 GetKernelObjectSecurity
和 NtQueryInformationFile
使其减慢了 4 倍(使其成为 12 倍)。
问题:
是否有 better/faster 获取此信息的方法(通过更快地打开文件或完全避免打开文件)?
想法:
如果目标文件系统是本地的,我可以直接访问它并且(知道 NTFS/FAT/etc 详细信息从原始数据中提取信息)。但它不适用于远程文件系统。
自定义 SMB 客户端似乎就是答案。跳过 Windows/NT API 层打开所有门。
情况:
我正在使用 NtQueryDirectoryFile(..., FileBothDirectoryInformation, ...)
扫描目录。除了此调用返回的数据外,我还需要安全数据(通常由 GetKernelObjectSecurity
返回)和备用流列表 (NtQueryInformationFile(..., FileStreamInformation)
)。
问题:
要检索安全和备用流信息,我需要打开(和关闭)每个文件。在我的测试中,它使操作速度减慢了 3 倍。添加 GetKernelObjectSecurity
和 NtQueryInformationFile
使其减慢了 4 倍(使其成为 12 倍)。
问题: 是否有 better/faster 获取此信息的方法(通过更快地打开文件或完全避免打开文件)?
想法: 如果目标文件系统是本地的,我可以直接访问它并且(知道 NTFS/FAT/etc 详细信息从原始数据中提取信息)。但它不适用于远程文件系统。
自定义 SMB 客户端似乎就是答案。跳过 Windows/NT API 层打开所有门。