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

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

那是CurrentTaskFile[2] = 0xFF是扇区号寄存器,CurrentTaskFile[3] = 0xFF是气缸低位寄存器,CurrentTaskFile[3] = 0xFF是Cylinder High寄存器。

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

最佳答案

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

08-19 18:54