![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
End LBA в HDD [D7, WinXP]
kernel © (2007-09-06 16:15:00)Здравствуйте, уважаемые!
Как можно получить конечныйLBA жесткого диска? Пробовал переводить из CHS => LBA: Пользую DeviceIoControl для вычисления кол-ва цилиндров, для получения всего остального заполняю TIdSector. Перевожу по формуле
LBA = ((cylinder * heads_per_cylinder + heads ) * sectors_per_track)+ sector – 1
, где вместо heads_per_cylinderпишу (heads / cylinder), на место sectorставлю последний сектор
но ничего не выходит - вычисление происходит неверно :(
Что делать?
kernel (2007-10-21 14:20:00) [1]А "стандартного" метода нет? :)
Anatoly Podgoretsky (2007-10-21 12:04:00) [2]> kernel (21.10.2007 08:28:14) [14]
DOS апи, INT 21
По крайней мере начиная со второй версии.
kernel (2007-10-21 08:28:00) [3]
> АПИ практически изначально поддерживал два вида адресации
> - абсолютную (где сектора считались последовательно с 0
> и до конца) и псевдо-аппаратную (HTS).
Что-то я ничего не понимаю :)
Какой АПИ? Где его взять?
Anatoly Podgoretsky (2007-10-20 22:43:00) [4]АПИ практически изначально поддерживал два вида адресации - абсолютную (где сектора считались последовательно с 0 и до конца) и псевдо-аппаратную (HTS).
Anatoly Podgoretsky (2007-10-20 22:41:00) [5]> DrPass (20.10.2007 22:35:11) [11]
В можно сказать наоборот, это истинная, а головки, дорожки, сектора виртуальная, кроме случая старинных винчестеров 80 годов.
DrPass (2007-10-20 22:35:00) [6]
> Так и не разобрался с определением этого LBA
Подозреваю, что единственный способ - спросить у жесткого диска, как это делает BIOS. Т.к. LBA - это всего лишь виртуальная адресация, и ни по каким формулам она не вычисляется.
kernel (2007-10-20 18:10:00) [7]Так и не разобрался с определением этого LBA :(
Может быть вариант umbra © (06.09.07 17:32) [3]подходит, но у меня неверно определяется кол-во секторов?
Anatoly Podgoretsky (2007-09-06 20:30:00) [8]> kernel (06.09.2007 18:21:08) [8]
Я уже не помню API, вроде есть функции получения информации об LBA
kernel (2007-09-06 18:21:00) [9]
> Не надо пытаться работать с секторам, головками - это только
> для совместимости с ДОС, после определенного размера диска
> они вообще не имеют смысла
А каким образом еще можно получить LBA? :)
Я только про перевод chs->lba слышал...
Anatoly Podgoretsky (2007-09-06 18:03:00) [10]> kernel (06.09.2007 17:54:06) [6]
Не надо пытаться работать с секторам, головками - это только для совместимости с ДОС, после определенного размера диска они вообще не имеют смысла
kernel (2007-09-06 17:54:00) [11]mhdd, hddscan etc. :)
umbra (2007-09-06 17:48:00) [12]а откуда Вы знаете ТО число?
kernel (2007-09-06 17:47:00) [13]
> Там разная адресация. Цилиндры от CHS к LBA не проходят.
> Можешь в BIOS посмотреть.
Хм...
Слишком много кода накрутить потребуется :/
> количество секторов на винчестере - 1
получается число ближе к lba, но все_равно не то... :(
umbra (2007-09-06 17:32:00) [14]
> Как можно получить конечный LBA жесткого диска
количество секторов на винчестере - 1
tesseract (2007-09-06 17:11:00) [15]
> А кто такой LBA ? Максимальный валидный адрес ?
Logic block adress для HDD.
> Пробовал переводить из CHS => LBA
Там разная адресация. Цилиндры от CHS к LBA не проходят. Можешь в BIOS посмотреть.
Riply (2007-09-06 17:01:00) [16]>[0] kernel © (06.09.07 16:15)
А кто такой LBA ? Максимальный валидный адрес ?
>но ничего не выходит - вычисление происходит неверно :(
А что получается и почему "неверно" ?