2015-05-13 4 views
2

Я хочу прочитать диск большой емкости, используя команды ATA, отправляющие через DeviceIoControl(). Передача команд с использованием структуры ATA_PASS_THROUGH_EX является основной проблемой. На самом деле CurrentTaskFile[] arary из UCHAR типа не в состоянии послать сектор не больше, чем 16777215.Как читать большой диск (например, 1, 2 ТБ) с помощью команд ATA через функцию DeviceIoControl?

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], который является регистратором устройства/головки. Его диапазон depends on the disk capacity, например для диска 4Tb, от 0 до 127. Таким образом, максимальное количество адресуемых секторов для этого диска равно 256*256*256*128 == 2147483648, что кажется достаточно.

+0

Спасибо @AntonSavin за вашу помощь. Но я не могу понять, как использовать регистр CurrentTaskFile [5] (Device/head) в других регистрах. Можете ли вы описать, как читать сектор не более 16777215 с комбинацией всех остальных регистров (CurrentTaskFile [2], CurrentTaskFile [3], CurrentTaskFile [4]). Пожалуйста помоги. – Sam

+0

@ Сэм Я не совсем понимаю ваш вопрос. Просто установите соответствующие значения (номер сектора, номер цилиндра и номер главы) и прочитайте любой сектор, который вы хотите. –

 Смежные вопросы

  • Нет связанных вопросов^_^