5

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

有任何想法吗?

4

1 回答 1

6

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

于 2012-08-13T16:10:10.610 回答