Функция 18, подфункция 11 - получить информацию о дисковой подсистеме.
Параметры:
- eax = 18 - номер функции
- ebx = 11 - номер подфункции
- ecx = тип таблицы:
- 1 = короткая версия, 10 байт
- 2 = полная версия, 65536 байт
- edx = указатель на буфер (в приложении) для таблицы
Возвращаемое значение:
- функция не возвращает значения
Формат таблицы: короткая версия:
- +0: byte: информация о НГМД (дисководах для дискет), AAAABBBB,
где AAAA задаёт тип первого дисковода, BBBB - второго согласно
следующему списку:
- 0 = нет дисковода
- 1 = 360Kb, 5.25''
- 2 = 1.2Mb, 5.25''
- 3 = 720Kb, 3.5''
- 4 = 1.44Mb, 3.5''
- 5 = 2.88Mb, 3.5'' (такие дискеты сейчас уже не используются)
Например, для стандартной конфигурации из одного 1.44-дисковода
здесь будет 40h, а для случая 1.2Mb на A: и 1.44Mb на B:
значение оказывается 24h.
- +1: byte: информация о жёстких дисках и CD-приводах, AABBCCDD,
где AA соответствует контроллеру IDE0, ..., DD - IDE3:
- 0 = устройство отсутствует
- 1 = жёсткий диск
- 2 = CD-привод
Например, в случае HD на IDE0 и CD на IDE2 здесь будет 48h.
- +2: 4 db: число найденных разделов на жёстких дисках с
соответственно IDE0,...,IDE3.
При отсутствии жёсткого диска на IDEx соответствующий байт
нулевой, при наличии показывает число распознанных разделов,
которых может и не быть (если носитель не отформатирован или
если файловая система не поддерживается). В текущей версии ядра
для жёстких дисков поддерживаются только FAT16 и FAT32.
- +6: 4 db: зарезервировано
Формат таблицы: полная версия:
- +0: 10 db: такие же, как и в короткой версии
- +10: 100 db: данные для первого раздела
- +110: 100 db: данные для второго раздела
- ...
- +10+100*(n-1): 100 db: данные для последнего раздела
Разделы расположены в следующем порядке: сначала последовательно все
распознанные разделы на HD на IDE0 (если есть),
затем на HD на IDE1 (если есть) и т.д. до IDE3.
Формат информации о разделе (пока поддерживается только FAT):
- +0: dword: начальный физический сектор раздела
- +4: dword: последний физический сектор раздела
(принадлежит разделу)
- +8: dword: секторов в одной копии FAT
- +12 = +0xC: dword: число копий FAT
- +16 = +0x10: dword: число секторов в кластере
- +20 = +0x14: dword: байт в секторе; текущая реализация ожидает,
что здесь 0x200 = 512
- +24 = +0x18: dword: первый кластер корневого каталога в FAT32,
0 для FAT16
- +28 = +0x1C: dword: начальный физический сектор FAT
- +32 = +0x20: dword: первый физический сектор корневого каталога
для FAT16, игнорируется для FAT32
- +36 = +0x24: dword: число секторов в корневом каталоге для FAT16,
0 для FAT32
- +40 = +0x28: dword: физический сектор начала области данных
- +44 = +0x2C: dword: максимальный номер кластера
- +48 = +0x30: dword: физический сектор информации о
файловой системе для FAT32, игнорируется для FAT16
- +52 = +0x34: dword: значение, используемое как граница
специальных значений в FAT
- +56 = +0x38: dword: значение, используемое для плохих кластеров
в FAT
- +60 = +0x3C: dword: значение, используемое как маркер конца
при записи цепочки в FAT
- +64 = +0x40: dword: маска, накладываемая на элемент FAT
- +68 = +0x44: byte: тип файловой системы: 16 или 32
- +69 = +0x45: 31 db: зарезервировано
Замечания:
- Короткая таблица может быть использована для получения информации
об имеющихся устройствах.
- Первые два поля информации о разделе в полной версии таблицы
сообщают параметры раздела, оставшиеся - параметры файловой
системы FAT. Для других файловых систем (когда они будут
поддерживаться) специфическая для файловой системы информация,
естественно, будет другой, но первые два поля
сохранятся неизменными.