Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

геометрия дисков

78K
14 мая 2012 года
pashtet13
15 / / 02.05.2012
Здравствуйте! Че то я совсем запутался:( Кто то может объяснить мне что я не так считаю? Вот смотрите функция DeviceIoControl(,IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,,,,,); ворачивает следующие:
 
Код:
Cylinders 61
SectorsPerTrack 63
TracksPerCylinder 255
BytesPerSector 512
SizeDisk 509083648
что бы получать последний сектор в режиме LBA я считаю SizeDisk/BytesPerSector-1(509083648/512-1=994303) теперь полученное значение я перевожу в CHS по формуле от сюда (также пробовал по этим формулам и на этом калькуляторе.) В результате получаю
 
Код:
Cylinders 61
Sectors 38
Head 227
Почему так, а не С=61 S=63 H=255 ?
252
15 мая 2012 года
koderAlex
1.4K / / 07.09.2005
по восьмому смещению - LBA адрес начала раздела .
по смещению 0Ch - размер раздела в секторах .
что ещё нужно ? :)
остальные поля заполните по уже известным вам формулам , но не используйте .
277
14 мая 2012 года
arrjj
1.7K / / 26.01.2011
Цитата:

Cylinders 61
SectorsPerTrack 63
TracksPerCylinder 255
BytesPerSector 512
SizeDisk 509083648


А теперь берем обычные счеты и получаем: 255*63*61*512 = 501742080
Последний сектор будет 979964.
CHS 60 254 63.
61 255 63 ты не получишь.

78K
14 мая 2012 года
pashtet13
15 / / 02.05.2012
arrjj да вот дело в том, что программы HxD или WinHex показывают, что на флешке именно 994304 сектора. 994304х512=509083648 байт. Вот начало темы, если не трудно посмотрите.
252
14 мая 2012 года
koderAlex
1.4K / / 07.09.2005
не обращайте внимание на цилиндры и прочее . они выбираются биосом и системой как ближайшие правдоподобные .
пользуйтесь LBA адресацией .
78K
14 мая 2012 года
pashtet13
15 / / 02.05.2012
Цитата:
не обращайте внимание на цилиндры и прочее . они выбираются биосом и системой как ближайшие правдоподобные .
пользуйтесь LBA адресацией .


я пишу свою MBR на флешке, мне нужно что бы логический диск начинался не со смещения 3F(63 сектора) CHS 0/1/1 , а с другого смещения, которое будет вычисляться динамически в зависимости от объема нужных мне данных, которые будут храниться в неразмечанной области диска сразу за MBR.

Смещение Длина Описание
00h 1 Признак активности раздела
01h 1 Начало раздела — головка
02h 1 Начало раздела — сектор (биты 0—5), дорожка (биты 6, 7)
03h 1 Начало раздела — дорожка (старшие биты 8, 9 хранятся в байте номера сектора)
04h 1 Код типа раздела
05h 1 Конец раздела — головка
06h 1 Конец раздела — сектор (биты 0—5), дорожка (биты 6, 7)
07h 1 Конец раздела — дорожка (старшие биты 8, 9 хранятся в байте номера сектора)
08h 4 Смещение первого сектора
0Ch 4 Количество секторов раздела

Как мне тогда заполнять поля структуры со смещения 01h-03h и 05h-07h?

277
14 мая 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: pashtet13

Как мне тогда заполнять поля структуры со смещения 01h-03h и 05h-07h?


Перевести LBA в CHS

78K
14 мая 2012 года
pashtet13
15 / / 02.05.2012
Цитата: arrjj

Перевести LBA в CHS


Надо же как просто, я бы и не догадался. А то, что перед переводом надо знать "геометрию" диска?

277
14 мая 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: koderAlex
они выбираются биосом и системой как ближайшие правдоподобные

78K
15 мая 2012 года
pashtet13
15 / / 02.05.2012
Цитата: koderAlex
по восьмому смещению - LBA адрес начала раздела .
по смещению 0Ch - размер раздела в секторах .
что ещё нужно ? :)
остальные поля заполните по уже известным вам формулам , но не используйте .


Уже так и сделал. Спасибо вам ребята за ответы!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог