如何从给定 LCN逻辑簇号的卷开头获取物理偏移量?

问题描述

LCN 的本质是什么?

根据documentation

逻辑簇号 (LCN) 描述了簇距 体积内的某个任意点。 LCN 应仅被视为 序数或相对数。没有保证的映射 逻辑集群到物理硬盘驱动器扇区。

然而,我不清楚 arbitrary point 的含义。如何获得这个arbitrary pointLCN一个“相对数字”,但问题是卷的哪一部分实际上与这个数字相关?换句话说,如何发现 LCN #0 的物理偏移量(从卷的开始以字节为单位的偏移量)是多少?

我最初的猜测是 LCN 是从卷开始的集群中的偏移量,即 LCN #0 是卷中的第一个物理集群。但是,根据文档(以及我的一些实验),它看起来不正确。那么真相在哪里?

看看让我问这个问题的例子。:

假设我有一个 32 GB 的卷,格式为 fat32,簇大小为 16384 字节,这里有一个 100Mb 的文件。使用 FSCTL_GET_RETRIEVAL_POINTERS 我可以获得此文件Extent(RETRIEVAL_POINTERS_BUFFER) 信息。就我而言,Lcn=1,NextVcn=6400。 根据这个输出,我假设我的文件位于卷的区域,从卷的开头偏移 Lcn * cluster_size 字节,大小为 NextVcn * cluster_size 字节。这是一个正确的假设吗?我不确定,因为根据the layout of FAT32,它在Reserver sectors之前包含FAT RegionRoot Directory RegionData Region,并且不能有文件数据在物理集群 #1 中。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)