【问题标题】:How to read a large disk(like 1 ,2 TB) using ATA commands through DeviceIoControl funtion?如何通过 DeviceIoControl 功能使用 ATA 命令读取大磁盘(如 1 ,2 TB)?
【发布时间】:2015-07-24 14:30:04
【问题描述】:

我想使用通过 DeviceIoControl() 发送的 ATA 命令读取大容量磁盘。使用ATA_PASS_THROUGH_EX 结构发送命令是主要问题。实际上,CurrentTaskFile[] 类型的 UCHAR 数组无法发送不大于 16777215 的扇区。

CurrentTaskFile[2] = 0xFF;
CurrentTaskFile[3] = 0xFF;
CurrentTaskFile[4] = 0xFF;


CurrentTaskFile[2] = 0xFF是扇区号寄存器,
CurrentTaskFile[3] = 0xFF是圆柱低寄存器,
CurrentTaskFile[3] = 0xFF是圆柱高寄存器。

现在如果我想读取不超过 16777215 的扇区该怎么办(如果我想读取 1 TB 磁盘的最后一个扇区)。如何发送不超过 16777215 的扇区。实际上我必须读取容量高达 4 TB 的磁盘。

【问题讨论】:

    标签: c++ visual-c++ disk ata


    【解决方案1】:

    还有CurrentTaskFile[5] 是设备/头寄存器。它的范围depends on the disk capacity,例如对于 4Tb 磁盘它是从0127。所以该磁盘的最大可寻址扇区数是256*256*256*128 == 2147483648,这似乎足够了。

    【讨论】:

    • 感谢@AntonSavin 的帮助。但我不明白如何将 CurrentTaskFile[5](Device/head) 寄存器与其他寄存器一起使用。您能否描述如何结合所有其他寄存器(CurrentTaskFile[2]、CurrentTaskFile[3]、CurrentTaskFile[4])读取不超过 16777215 的扇区。请帮忙。
    • @Sam 我不太明白你的问题。只需相应地设置值(扇区号、柱面号和磁头号)并读取您想要的任何扇区。
    猜你喜欢
    • 2015-07-18
    • 2023-03-05
    • 2021-09-05
    • 2010-09-07
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    相关资源
    最近更新 更多