Низкоуровневое програмирование Главная - Реальный режим - Прерывания DOS - INT 21h: Сервис DOS. - Функция 32h: Дать дисковую информацию DOS.

Функция 32h: Дать дисковую информацию DOS.

Вход:
AH=32h

DL = Номер диска (0 - текущий, 1 - A:, ...) Выход:
AL == 0 успех, AL == ffh диск не найден
DS:BX - Данные о диске(DPB)

Примечание:
Для DOS 2.0 и выше.
Значение регистра DS может измениться
Структура DPB:
БайтыСмысл
0Номер диска (0 - А:, 1 - В:, ...)
1Номер устройства
2-3Байт в секторе
4Секторов в кластере (0=1, 1=2 ...)
5Сдвиг для секторов в кластеры
6-7Количество зарезервированнх секторов в начале диска
8Количество таблиц FAT
9-10Количество директорий
11-12Номер первого сектора данных
13-14наибольший номер кластера (в FAT 16 - FF6h)
Dos 1.0 - 4.0
15Количество секторов на таблицу FAT
16-17Первый сектор корневого каталога
18-21Адрес заголовка устройства
22Байт Media ID
23==0 если к диску обращалися, ==FFh если нет
24-27Указатель к следующей DPB
Dos 2.x
28-29Первый секктор текушего каталога (==0 если корневая директория, ==ffffh если непонятный каталог)
30-93ASCIZ полный путь текущей директории
Dos 3.x
28-29Кластер, с которого надо начинать поиск пустого места
30-31Количесво пустых кластеров. (==ffffh - неизвестно)
Dos 4.0+
15-16Количество секторов на таблицу FAT
17-18Первый сектор корневого каталога
19-22Адрес заголовка устройства
23Байт Media ID
24==0 если к диску обращалися, ==FFh если нет
25-28Указатель к следующей DPB
29-30Кластер, с которого надо начинать поиск пустого места
31-32Количесво пустых кластеров. (==ffffh - неизвестно)

Байт MediaID может принимать следующие значения:
FFh - двухсторонняя дискета, 8 секторов на дорожку (320 Кб)
FEh - односторонняя дискета, 8 секторов на дорожку (160 Кб)
FDh - двухсторонняя дискета, 9 секторов на дорожку (360 Кб)
FCh - односторонняя дискета, 9 секторов на дорожку (180 Кб)
FAh - ROM диск, 16 секторов на дорожку
F9h - двухсторонняя дискета, 15 секторов на дорожку (1,2 Мб) или 9 секторов на дорожку (720 Кб)
F8h - Жёсткий диск
F0h - иные устройства (в том числе двухсторонняя дискета, 18 секторов на дорожку (1,44 Мб))
Стоит заметить, что это значение соответствует байту "тип носителя" в заголовке файловой системы FAT. На флешках, отформатированных в этой файловой системы указывается значение F8h

Заголовок устройства имеет следующий вид:
БайтыСмысл
0-3Указатель к следующену заголовку устройства (==ffffh если последний заголовок в списке)
4-5Аттрибуты устройства
6-7Адрес вызова драйвера
8-9Адрес обработчика прерывания
Знаковые устройства
10-17Имя устройства
Блочные устройства
10Количество поддрайверов поддерживаемых драйвером
11-17Обычно не используется, но вот примеры, когда используется:
"$PCMATA" драйвер PCMATA.SYS (PCMCIA)
"AHADDVR" Драйвер ASPIDISK.SYS (Adaptec SCSI)
"DBLSPAC" MS DoubleSpace или DriveSpace
"DSKREET" NortonUtils v5+ Diskreet
"GFS " драйвер DD.BIN (LapLink III)
"SIDExxx" драйвер ATADRV.EXE (PCMCIA)
"STAC-CD" Stacker/Stacker Anywhere
Для CD-Rom
18-19=0000
20Имя диска (00 - неизвестно, 01 - A:, 02 - B: ...)
21Количество юнитов
22-25ASCI строка "MSCD"
26-27Версия записанная в ASCI
Для MS DoubleSpace или DriveSpace
18-19ASCI строка ",."
20-??Адрес точки входа API

Аттрибуты блочного устройства:
БитыСмысл
15=0
14Поддержка IOCLT
13Не-IBM формат
12Он-лайн устройство
11Поддержка OPEN/CLOSE/RemMedia вызовов
DOS 3.0+
10Зарезервированно
9Разрешён прямой доступ
Dos 3.3+, драйвер Driver.sys
8Используется Driver.sys
Dos 3.3+
7Поддержка запроса наличия IOCLT
Dos 5.0+
6Поддержка обобщённых функций IOCLT
Dos 3.2+
5-2Зарезервированно
1Драйвер поддерживает 32-х битную адресацию
Dos 3.31+
0Зарезервированно

Аттрибуты символьного устройства:
БитыСмысл
15=1
14Поддержка IOCLT
13Поддержка вывода до занятости
DOS 3.0+
12Резерв
11Поддержка OPEN/CLOSE/RemMedia вызовов
DOS 3.0+
10-8Версия:
000 - DOS 3.0 или 3.1
001 - DOS 3.2
010 - Европейский DOS 4.0
Не всегда устонавливается корректно. требует установленного бита 11
7Поддержка запроса наличия IOCLT
Dos 5.0+
6Поддержка обобщённых функций IOCLT
Dos 3.2+
5Зарезервированно
4Специальное устройство
3Это CLOCK$
2Это NUL
1Это стандартный выход
0Это стандартный вход