Функция 58, подфункция 8 - LBA-чтение с устройства.
Параметры:
- eax = 58 - номер функции
- ebx = указатель на информационную структуру
Формат информационной структуры:
- +0: dword: 8 = номер подфункции
- +4: dword: номер блока для чтения (считая с 0)
- +8: dword: игнорируется (устанавливайте в 1)
- +12 = +0xC: dword: указатель на буфер, куда будут записаны данные
(512 байт)
- +16 = +0x10: dword: указатель на буфер для работы системы
(4096 байт)
- +20 = +0x14: ASCIIZ-имя устройства: нечувствительно к регистру,
одно из /rd/1 = /RamDisk/1, /hd/n = /HardDisk/n,
1≤n≤4 - номер устройства: 1=IDE0, ..., 4=IDE3.
Вместо цифр допускается, хотя и не рекомендуется для удобства
перехода на будущие расширения,
использование 'first','second','third','fourth'.
Возвращаемое значение:
- если указано имя устройства /hd/xxx, где xxx не находится
в списке выше:
- если указано неправильное имя устройства
(за исключением предыдущего случая):
- если LBA-доступ запрещён подфункцией 11 функции 21:
- для рамдиска: попытка чтения блока за пределами рамдиска
(18*2*80 блоков) приводит к
- при успешном чтении:
Замечания:
- Размер блока - 512 байт; читается один блок.
- Не следует полагаться на возвращаемое значение,
оно может измениться в следующих версиях.
- Требуется, чтобы был разрешён LBA-доступ к устройствам
подфункцией 11 функции 21. Узнать это можно вызовом
подфункцией 11 функции 26.
- LBA-чтение дискеты не поддерживается.
- Функция считывает данные физического жёсткого диска;
если по каким-то причинам нужны данные конкретного раздела,
придётся определять начальный сектор этого раздела
(либо напрямую через MBR, либо из расширенной структуры,
возвращаемой той же подфункцией 11 функции 18).
- Функция не проверяет код ошибки жёсткого диска, так что запрос
несуществующего сектора всё равно что-то прочитает
(вероятнее всего, нули, но это определяется устройством) и
это будет считаться успехом (eax=0).