我访问了$ MFT文件并解压缩了文件属性。
考虑到MFT的文件属性,如何从NTFS文件系统上的MFT记录中获取LBA文件?
要计算LBA,我知道文件的簇号。
可以使用簇号来计算吗?
答案 0 :(得分:1)
我不完全确定你的问题 - 但如果你只是想在磁盘上查找文件的逻辑位置,那么有各种IOCTL可以实现这一点。
例如,MFT文件记录:FSCTL_GET_NTFS_FILE_RECORD http://msdn.microsoft.com/en-us/library/windows/desktop/aa364568(v=vs.85).aspx
通过HANDLE在特定文件的磁盘上的位置:FSCTL_GET_RETRIEVAL_POINTERS http://msdn.microsoft.com/en-us/library/windows/desktop/aa364572(v=vs.85).aspx
如果你试图自己解析NTFS,你需要遵循$ DATA属性 - 这将永远是非驻留数据运行(除非它是一个可以驻留在MFT中的小文件) 。微软的数据运行是前两个半字节中包含的数据的相当简单的结构,它为下一次数据运行指定了偏移量和长度。
答案 1 :(得分:0)
恕我直言,你应该通过做一些基本的算法而不是使用IOCTL和FSCTL来编写代码。您应该知道磁盘的大小以及卷开始的偏移量(或者使用IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS的每个范围)并将这些值存储在某处。然后,只需将群集大小的LCN乘以磁盘上范围的偏移量即可。
大多数时候你只需处理一个范围。当您有多个范围时,您可以通过将LCN乘以一个集群的大小来确定集群的范围,然后按照它们返回的顺序减去IOCTL返回的每个范围的大小,如果要减去下一个数字大于您当前的数字,特定的LCN就在这个范围内。