直接访问硬盘?

时间:2010-04-24 01:36:26

标签: c++ c windows

我想知道硬盘访问是如何工作的。例如,我如何查看/修改扇区?如果有帮助,我会针对Windows。 感谢

3 个答案:

答案 0 :(得分:5)

This page似乎有关于此主题的一些相关信息:

  

您可以打开物理或逻辑   使用CreateFile()驱动   应用程序接口   (API)提供了这些设备名称   您有适当的访问权限   驱动器的权利(也就是说,你必须   是管理员)。你必须使用   两个CreateFile()FILE_SHARE_READ   和FILE_SHARE_WRITE标志获得   访问驱动器。

     

逻辑或物理驱动器具有   打开后,你就可以表演了   直接对整个数据进行I / O操作   驾驶。执行直接磁盘时   I / O,你必须寻找,阅读和写入   多个扇区大小的   设备和部门边界。呼叫   DeviceIoControl()使用   得到IOCTL_DISK_GET_DRIVE_GEOMETRY   每个扇区的字节数   各个部门,每个部门的部门等等   第四,这样你就可以计算出来了   你需要的缓冲区大小。

documentation of CreateFile也提供了一些线索:

  

您可以使用CreateFile功能打开物理磁盘驱动器或卷,   它返回一个可以的直接访问存储设备(DASD)句柄   与DeviceIoControl函数一起使用。这使您可以访问   磁盘或卷直接,例如像分区这样的磁盘元数据   表。但是,这种类型的访问还会暴露磁盘驱动器或   卷到潜在的数据丢失,因为写入磁盘不正确   使用这种机制可能使其内容无法访问   操作系统。为确保数据完整性,请务必成为   熟悉DeviceIoControl以及其他API的行为方式   不同于直接访问句柄而不是文件系统句柄。

答案 1 :(得分:1)

您可以使用win32的CreateFile()函数打开逻辑卷(例如c:驱动器)或物理驱动器。使用返回的句柄,您可以根据需要读取和写入扇区。 MSDN上的这个页面可以帮助您入门:CreateFile Function

我对造成的损坏不承担任何责任: - )

答案 2 :(得分:0)

STXXL可能对您感兴趣: http://stxxl.sourceforge.net/