Я использую команду scsi readcapacity16. Я хочу, чтобы получить значение для максимального LBA любого диска, я запускаю этот код, чтобы я мог сделать некоторые тесты на диске. Я запускаю команду чтения и получаю вывод. Я не знаю, что делать с этим выходом, например, где максимальная емкость, а затем как я беру это значение из вывода, которое будет использоваться позже в программе. Также я делаю это на Visual C++. Вот ссылка на то, на что я ссылаюсь http://www.seagate.com/staticfiles/support/disc/manuals/scsi/100293068a.pdfПоиск Max LBA жесткого диска SCSI
0
A
ответ
2
Если вы хотите сделать это правильно, то порядок команд SCSI должен быть ЗАПРОСОВ, чтобы убедиться, что вы разговариваете с диском, а затем TEST UNIT READY, чтобы убедиться, что он находится в состоянии, в котором он будет реагировать на команды, затем READ CAPACITY (10). Только если диск слишком велик для READ CAPACITY (10), вы отправляете READ CAPACITY (16).
READ CAPACITY (10) возвращает 8 байтов. Первые 4 - это последние LBA (начиная с 0), а остальные - размер блока в байтах (обычно 512). LBA будет -1, если диск слишком велик.
READ CAPACITY (16) возвращает 8-байтовый размер блока LBA, 4 байта, плюс 20 байтов материала, который вы можете игнорировать.
Обратите внимание, что параметры SCSI являются большими endian, поэтому вы можете использовать ntohl для преобразования полей в порядок размещения. – stark
Итак, если я скажу: сделайте readcap10 (буфер) и сохраните первые 4 байта, которые дадут мне max lba, а затем, если эти четыре байта = -1 сделать readcap16 (буфер) и сохранить первые 8 байтов? Спасибо за вашу помощь! – diggers3