0

我在从 NTFS 卷读取原始数据时遇到了一些问题。我已经使用 UNC 路径 ("\.\C") 打开了我的 C: 驱动器CreateFile,以便能够从中读取原始数据。

当我阅读第一个扇区时,我发现我正在阅读 MBR 扇区。C据我所知,卷(在本例中是我的驱动器)和物理驱动器(表示为)之间存在区别\\.\PhysicalDriveX

不同之处在于 MBR 仅位于物理驱动器的第一个扇区,而 Volume 代表一个逻辑驱动器(同一个硬盘驱动器内的一个或多个分区),因此从理论上讲,不应该读取它的第一个扇区, MBR(因为实际分区仅在 MBR 的分区表之后开始)。

对我来说更特别的是,当我期望在读取\\.\PhysicalDrive0(这是我的物理硬盘)的第一个扇区时获得 MBR 时,我只得到 NULL。

根据维基百科:

主引导记录 (MBR) 是一种特殊类型的引导扇区,位于已分区的计算机大容量存储设备(如固定磁盘或可移动驱动器)的开头

虽然我认为很清楚,但我附上了相关代码:

tNtfsVolumeContext.hVolume = CreateFile(_T("\\\\.\\C:"), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
if (INVALID_HANDLE_VALUE == tNtfsVolumeContext.hVolume)
{
    return -1;
}

if ((!ReadFile(tNtfsVolumeContext.hVolume, &tBootSector, NTFS_SECTOR_SIZE, &dwBytesRead, NULL)) || (dwBytesRead != NTFS_SECTOR_SIZE))
{
    return -2;
}

我将总结一下我的问题,是否有一个很好的解释,为什么从中读取扇区会导致读取 MBR,而从物理驱动器中读取却一无所获?

提前致谢。

4

0 回答 0