获取磁盘/群集号上的文件偏移量

时间:2012-08-13 12:47:06

标签: windows winapi file-io ntfs

我需要获取有关文件在NTFS磁盘上的物理位置的任何信息。绝对偏移,集群ID ......一切。 我需要扫描磁盘两次,一次是为了获得分配的文件,还有一次我需要在RAW模式下直接打开分区并尝试查找剩余的数据(来自已删除的文件)。我需要一种方法来理解我发现的数据与我之前作为文件处理过的数据相同。当我在原始模式下扫描磁盘时,我发现的数据的偏移量可以某种方式转换为文件的偏移量(具有关于磁盘几何的信息)。有没有办法做到这一点?其他解决方案也被接受。 现在我正在玩FSCTL_GET_NTFS_FILE_RECORD,但目前无法使其工作,我不确定它会有所帮助。

更新

我找到了以下功能 http://msdn.microsoft.com/en-us/library/windows/desktop/aa364952(v=vs.85).aspx 它返回包含nFileIndexHigh和nFileIndexLow变量的结构。 文档说

The identifier that is stored in the nFileIndexHigh and nFileIndexLow members is called the file ID. Support for file IDs is file system-specific. File IDs are not guaranteed to be unique over time, because file systems are free to reuse them. In some cases, the file ID for a file can change over time.

我真的不明白这是什么。我无法将其连接到文件的物理位置。以后可以从MFT中提取这个文件ID吗?

更新

发现这个: This identifier and the volume serial number uniquely identify a file. This number can change when the system is restarted or when the file is opened.

这不符合我的要求,因为我打算打开文件,ID可能会改变的事实并不能让我满意。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

使用Defragmentation IOCTLs。例如,FSCTL_GET_RETRIEVAL_POINTERS将告诉您包含文件数据的范围。