如何使用ATA命令通过DeviceIocontrol Funtion读取大磁盘(例如1,2 TB)

How to read a large disk(like 1 ,2 TB) using ATA commands through DeviceIoControl funtion?

本文关键字:例如 磁盘 TB 读取 命令 ATA 何使用 Funtion DeviceIocontrol      更新时间:2023-10-16

我想使用ATA命令来读取大容量磁盘,该命令通过deviceiocontrol()发送。使用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是气缸高寄存器。

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

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