【问题标题】:Direct access to harddrive?直接访问硬盘?
【发布时间】:2011-02-11 18:29:18
【问题描述】:

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

【问题讨论】:

标签: c++ c windows


【解决方案1】:

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 的行为方式 直接访问句柄与文件系统句柄不同。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我的印象是@user 希望直接访问驱动器。
    • @John:你的意思是他可能想完全绕过 Windows?打开物理驱动器时,您确实可以直接访问它的内容......它不是焊接您自己的 SATA 控制器,但它的级别比人们通常去的要低 :-) 我很确定 Windows 驱动程序开发工具包有示例如果有帮助,请使用磁盘驱动程序。
    猜你喜欢
    • 1970-01-01
    • 2010-11-01
    • 2015-02-01
    • 2011-04-01
    • 2011-04-12
    • 2012-03-27
    • 2015-07-18
    • 2023-03-09
    • 2012-05-15
    相关资源
    最近更新 更多