我想使用通过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磁盘,范围是0
到127
。因此,该磁盘的最大可寻址扇区数是256*256*256*128 == 2147483648
,这似乎足够了。