如何通过DeviceIoControl功能使用ATA命令读取大磁盘(如1,2 TB)?

时间:2015-05-13 10:43:13

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

我想使用通过DeviceIoControl()发送的ATA命令读取大容量磁盘。使用ATA_PASS_THROUGH_EX结构发送命令是主要问题。实际上CurrentTaskFile[] UCHAR类型的CurrentTaskFile[2] = 0xFF; CurrentTaskFile[3] = 0xFF; CurrentTaskFile[4] = 0xFF; 类型无法发送不超过16777215的扇区。

CurrentTaskFile[2] = 0xFF

那是
CurrentTaskFile[3] = 0xFF是扇区号寄存器,
CurrentTaskFile[3] = 0xFF是Cylinder低位寄存器,
{{1}}是Cylinder High注册。

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

1 个答案:

答案 0 :(得分:2)

还有CurrentTaskFile[5]是设备/头注册。它的范围为depends on the disk capacity,例如从0127的4Tb磁盘。因此,该磁盘的最大可寻址扇区数为256*256*256*128 == 2147483648,这似乎已足够。