我在从 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,而从物理驱动器中读取却一无所获?
提前致谢。