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



我需要获取有关文件在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 可能会更改的事实并不让我高兴。

有什么想法吗?

使用碎片整理 IOCTL。例如,FSCTL_GET_RETRIEVAL_POINTERS将告诉您包含文件数据的盘区。

最新更新