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

C++ 如何通过DeviceIoControl功能使用ATA命令读取大型磁盘(如1,2 TB)?,c++,visual-c++,disk,ata,C++,Visual C++,Disk,Ata,我想通过DeviceIoControl()使用ATA命令读取大容量磁盘。使用ATA\u PASS\u THROUGH\u EX结构发送命令是主要问题。实际上,CurrentTaskFile[]UCHAR类型的arary无法发送不大于16777215的扇区 CurrentTaskFile[2] = 0xFF; CurrentTaskFile[3] = 0xFF; CurrentTaskFile[4] = 0xFF; 那就是 CurrentTaskFile[2]=0xFF是扇区号寄存器, Curr

我想通过DeviceIoControl()使用ATA命令读取大容量磁盘。使用
ATA\u PASS\u THROUGH\u EX
结构发送命令是主要问题。实际上,
CurrentTaskFile[]
UCHAR类型的arary无法发送不大于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的磁盘。

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

感谢@AntonSavin的帮助。但我不明白如何将CurrentTaskFile[5](设备/头)寄存器与其他寄存器一起使用。您能否描述如何结合所有其他寄存器(CurrentTaskFile[2]、CurrentTaskFile[3]、CurrentTaskFile[4])读取不超过16777215的扇区。请帮忙。@Sam我不太明白你的问题。只需相应地设置值(扇区号、气缸号和缸盖号),然后读取所需的任何扇区。