Как читать большой диск (например, 1, 2 ТБ) с помощью команд ATA через функцию DeviceIoControl?

Я хочу читать диск большой емкости с помощью отправки команд ATA через DeviceIoControl (). Отправка команд с помощью ATA_PASS_THROUGH_EX структура является главной проблемой. На самом деле CurrentTaskFile[] арена из UCHAR Тип не может отправить сектор не более 16777215.

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

То есть
CurrentTaskFile[2] = 0xFF регистр номера сектора,
CurrentTaskFile[3] = 0xFF Цилиндр низкого регистра,
CurrentTaskFile[3] = 0xFF Цилиндр Высокий регистр.

Что делать, если я хочу прочитать сектора не более 16777215 (если я хочу прочитать последний сектор диска объемом 1 ТБ). Как отправить сектор не более 16777215. На самом деле мне приходится читать диск объемом до 4 ТБ.

2

Решение

Существует также CurrentTaskFile[5] который является устройством / головным регистром. Его ассортимент зависит от емкости диска, например для диска 4Tb это от 0 в 127, Таким образом, максимальное количество адресуемых секторов для этого диска 256*256*256*128 == 2147483648 что кажется достаточно.

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector