gpt4 book ai didi

c++ - FSCTL_GET_RETRIEVAL_POINTERS 在 NT 文件系统上的非常小的文件上失败

转载 作者:行者123 更新时间:2023-11-30 02:06:36 24 4
gpt4 key购买 nike

我的问题是:如果这个文件(非常重要)很小(不到一个簇,只有几个字节),怎么可能得到文件磁盘偏移量。

目前我使用这个 Windows API 函数:

DeviceIOControl(FileHandle, FSCTL_GET_RETRIEVAL_POINTERS, @InBuffer, SizeOf(InBuffer), @OutBuffer, SizeOf(OutBuffer), Num, Nil);
FirsExtent.Start := OutBuffer.Pair[0].LogicalCluster ;

对于比簇大的文件,它完美 工作,但对于较小的文件它就失败了,因为它总是返回一个空偏移量。

处理小文件的程序是什么?它们位于 NTFS 卷的什么位置?有没有其他方法可以知道文件偏移量?这种微妙之处似乎没有任何记载。

注意:问题被标记为 Delphi,但 C++ 样本或示例也将受到赞赏。

最佳答案

该文件可能是驻留的,这意味着它的数据足够小以适合其 MFT 条目。请参阅此处以获得更长的描述:

http://www.disk-space-guide.com/ntfs-disk-space.aspx

所以您基本上需要找到 MFT 条目的位置才能知道数据在磁盘上的位置。你控制这个文件吗?如果是这样,最简单的做法是确保它始终大于 MFT 条目的大小(不是记录的值,但您总是可以只做 4K 或其他)。

关于c++ - FSCTL_GET_RETRIEVAL_POINTERS 在 NT 文件系统上的非常小的文件上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8682960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com