【发布时间】:2011-02-11 18:29:18
【问题描述】:
我想知道硬盘访问是如何工作的。例如,我如何查看/修改扇区?如果有帮助,我将目标对准 Windows。 谢谢
【问题讨论】:
-
您可能对 STXXL 感兴趣:stxxl.sourceforge.net
我想知道硬盘访问是如何工作的。例如,我如何查看/修改扇区?如果有帮助,我将目标对准 Windows。 谢谢
【问题讨论】:
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 的行为方式 直接访问句柄与文件系统句柄不同。
【讨论】:
您可以使用 win32 的 CreateFile() 函数打开逻辑卷(例如 c: 驱动器)或物理驱动器。使用返回的句柄,您可以根据需要读取和写入扇区。 MSDN 上的这个页面应该可以帮助您入门:CreateFile Function
我对造成的损坏不承担任何责任:-)
【讨论】: