直接访问硬盘?

4

我想知道硬盘访问是如何工作的,例如,我如何查看/修改扇区?如果可以的话,请针对Windows进行解答。 谢谢。


STXXL可能会引起您的兴趣: http://stxxl.sourceforge.net/ - Chris J
2个回答

5

这个页面似乎包含一些相关信息:

您可以使用CreateFile()应用程序编程接口(API)打开物理或逻辑驱动器,只要您具有访问该驱动器的适当权限(即,您必须是管理员)。您必须同时使用CreateFile() FILE_SHARE_READ和FILE_SHARE_WRITE标志来访问驱动器。

一旦打开了逻辑或物理驱动器,您就可以对整个驱动器上的数据执行直接I/O。在执行直接磁盘I/O时,您必须按设备的扇区大小和扇区边界进行寻址、读取和写入。调用DeviceIoControl()使用IOCTL_DISK_GET_DRIVE_GEOMETRY获取每扇区字节数、扇区数、每磁道扇区数等信息,以便计算所需缓冲区的大小。

CreateFile的文档也提供了一些线索:

您可以使用CreateFile函数打开物理磁盘驱动器或卷,返回可与DeviceIoControl函数一起使用的直接访问存储设备(DASD)句柄。这使您可以直接访问磁盘或卷,例如分区表等磁盘元数据。但是,这种类型的访问也会使磁盘驱动器或卷暴露于潜在的数据丢失风险中,因为使用此机制对磁盘进行错误写入可能会使其内容对操作系统不可访问。为确保数据完整性,请确保熟悉DeviceIoControl以及其他API如何与直接访问句柄和文件系统句柄的行为不同。


1

您可以使用win32的CreateFile()函数打开逻辑卷(例如c:驱动器)或物理驱动器。通过返回的句柄,您可以根据需要读取和写入扇区。

MSDN上的此页面应该可以帮助您入门:CreateFile Function

我对造成的损坏不负责任 :-)


我有这样的印象,@user想要直接访问驱动器。 - John Dibling
@John:你的意思是他可能想要完全绕过Windows吗? 当打开物理驱动器时,您确实可以直接访问其内容...这不是焊接自己的SATA控制器,但它比人们通常使用的级别更低 :-) 我相信Windows驱动程序开发工具包中有磁盘驱动程序示例,如果有帮助的话。 - Jacob O'Reilly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接