Dos7book
.pdf
Приложение А.03: Системные данные для доступа к дискам
Продолжение таблицы А.03-2
|
|
– бит 1: дисковод с датчиком смены дисков; |
|
|
– бит 2: изменения данных BPB не допускаются; |
|
|
– бит 3: секторы диска – одинакового размера; |
|
|
– бит 4: нужно указывать LUN (примечание 1); |
|
|
– бит 5: на дисководе – не один логический диск; |
|
|
– бит 6: зарегистрирован факт смены диска; |
|
|
– бит 7: параметры изменены (примечание 2); |
|
|
– бит 8: диск переформатирован, BPB изменен; |
|
|
– бит 9: флаг запрета доступа (примечание 3). |
43h |
25 |
Блок данных BPB (примечание 4) |
7Dh |
12 |
11 байтов метки тома, кончающиеся байтом 00h |
89h |
4 |
Шестнадцатеричный серийный номер диска |
8Dh |
9 |
Название файловой системы, конечный байт 00h |
Примечание 1: номер LUN (Logical Unit Number) служит для различения устройств, имеющих общий шинный адрес. Это необходимо, в частности, для оптических дисководов класса DVD-RAM, которые в зависимости от номера LUN могут быть представлены либо как сменный магнитный диск, либо как диск CD/DVD-ROM. Адаптеры флэш-карт представляют карты в слотах разного типа отдельными логическими дисками, также различаемыми по номеру LUN.
Примечание 2: если параметры диска изменены, то данные в таблице DDT должны быть обновлены с помощью INT 21\AX=440Dh\CX=4840h (8.02-46).
Примечание 3: флаг запрета доступа применяется только по отношению к накопителям на жестких магнитных дисках, в особенности для пресечения доступа к другим первичным разделам (помимо основного загрузочного). INT 21\AX=440Dh\CX=4867h инверсно отображает состояние флага запрета доступа, а изменить его можно с помощью INT 21\AX=440Dh\CX=4847h (8.02-46).
Примечание 4: блок данных BPB (= BIOS Parameter Block, A.03-4), начинающийся со смещения 43h, относится не к фактическому диску, а к типу дисков, принимаемому по умолчанию для данного дисковода.
A.03-3 Структура блоков данных таблицы CDS
Таблица CDS (Current Directory Structure) содержит блоки данных, в которых
для каждого логического диска фиксируется путь к принимаемому по умолчанию (текущему) каталогу, а также ряд других важных характеристик. Все блоки данных CDS имеют одинаковую длину 58h байт. Адрес блока данных 1-го логического диска находится в ячейке со смещением 16h "Списка Списков" DOS (A.01-2). Там же в ячейке со смещением 21h записано общее число блоков данных в таблице CDS, заданное спецификацией команды LASTDRIVE (4.17) в файле CONFIG.SYS.
– 609 –
Приложение А.03: Системные данные для доступа к дискам
Рис. 10
Доступ к таблице CDS показан на рис. 10. Первый шаг – вызов INT 21\AH=52h, он возвращает адрес "Списка Списков" в регистрах ES:BX. Затем по полученному адресу (00C9:0026h) выводится дамп части "Списка Списков", причем длина дампа выбрана так, что последние 4 байта со смещениями 16h – 19h представляют адрес начала таблицы CDS (D203:0000h). Начиная с этого адреса выводится дамп длиной 58h, представляющий блок данных диска A:. Блоки данных всех других дисков расположены последовательно вслед за выведенным блоком с шагом 58h.
Среди блоков данных CDS имеются и такие, которые не относятся ни к одному из логических дисков. Они лишь резервируют букву для тех дисков, которые могут стать доступными потом с помощью загружаемых драйверов. Вся таблица CDS создается при интерпретации строк файла CONFIG.SYS, дополнить ее блоками данных позднее нельзя, поэтому нужное количество резервных блоков данных CDS необходимо заказывать заранее посредством команды LASTDRIVE (4.17). Структура одного блока данных CDS показана в приведенной ниже таблице.
Смещение |
Длина |
Содержание |
00h |
67 |
Путь к текущему каталогу (примечания 1 и 2). |
43h |
2 |
Атрибуты логического диска: |
|
|
бит 7: скрыть букву диска от переназначения; |
|
|
бит 12: диск создан программой SUBST.EXE; |
|
|
бит 13: диск создан программой JOIN.EXE; |
|
|
бит 14: диск – на физическом дисководе; |
|
|
бит 15: диск создан сетевым редиректором. |
45h |
4 |
Указатель на блок параметров DPB (A.03-1) |
49h |
2 |
1-ый кластер текущего каталога (примечание 5) |
– 610 –
Приложение А.03: Системные данные для доступа к дискам
Продолжение таблицы А.03-3
4Fh |
2 |
Число скрываемых знаков пути (примечание 6) |
52h |
4 |
Указатель на сетевой редиректор или IFS-драйвер, |
|
|
если они имеют отношение к созданию данного |
|
|
диска (иначе в это поле записываются нули) |
Примечание 1: для локальных дисков путь к текущему каталогу включает букву диска, двоеточие, разделительную обратную косую черту, и обычную оставшуюся часть. Путь должен кончаться байтом 00h.
Примечание 2: если в слове атрибутов установлен бит 12 или бит 13, то путь, указанный в блоке данных, не является реальным путем.
Примечание 3: если в слове атрибутов биты 14 и 15 сброшены в нуль, то диск будет считаться недействительным и будет скрыт.
Примечание 4: если в слове атрибутов оба бита 14 и 15 установлены в единицу, то данный диск представляет файловую систему IFS.
Примечание 5: начальный кластер считается в пределах логического диска; для корневого каталога он имеет номер 0000h. Если доступ к диску еще не производился, то в это поле записывается значение FFFFh.
Примечание 6: DOS может сообщать только конечную часть пути, если в ячейку со смещением 4Fh записано ненулевое число знаков, отсчитываемых от начала пути, которые надлежит скрыть.
Примечание 7: в ранних версиях DOS размер блока данных CDS был 51h байт; байты 51h-57h были добавлены начиная с MS-DOS4 для обслуживания сетевых дисков и IFS-систем.
A.03-4 Структура данных блока BPB
Блок данных BPB (BIOS Parameter Block) входит в состав boot-сектора каждого логического диска. На основе данных блока BPB оперативно корректируются сведения в таблицах DPB (A.03-1) и DDT (A.03-2) при каждой смене носителя (например, дискеты) в дисководе. В разделах диска с файловой системой FAT-16 структура данных блока BPB в boot-секторе занимает 39h байт; она показана в первой колонке "F16" приведенной ниже таблицы. Те же данные в составе таблиц DDT (A.03-2) имеют несколько иное, "стандартное" расположение, показанное в третьей колонке "Std". Блоки данных стандартной структуры принимаются функцией INT 21\AX=440Dh\CX=0840h и возвращаются функцией
INT 21\AX=440Dh\CX=0860h (8.02-46). Но обе эти функции обслуживают только диски с файловыми системами FAT-12 и FAT-16.
В разделах диска с файловой системой FAT-32 структура данных блока BPB в boot-секторе занимает 5Ah байт; она показана во второй колонке "F32" приведенной ниже таблицы. В составе таблиц DDT (A.03-2) применен новый, "расширенный" формат размещения тех же данных, показанный в четвертой колонке "Ext". С таким форматом данных работают новые функции MS-DOS7:
– 611 –
Приложение А.03: Системные данные для доступа к дискам
INT 21\AX=440Dh\CX=4840h для обновления данных BPB в таблицах DDT и INT 21\AX=440Dh\CX=4860h для считывания данных BPB из таблиц DDT. Эти новые функции (8.02-46) применимы к дискам с файловой системой FAT-32.
F16 |
F32 |
Std |
Ext |
Длина |
Содержание |
00h |
00h |
|
|
3 |
Команда перехода:EBh 3Ch 90h для |
|
|
|
|
|
FAT-16, EBh 5Ah 90h для FAT-32 |
03h |
03h |
|
|
8 |
Сигнатура создателя блока BPB |
0Bh |
0Bh |
00h |
00h |
2 |
Размер сектора в байтах |
0Dh |
0Dh |
02h |
02h |
1 |
Размер кластера (FFh = неизвестен) |
0Eh |
0Eh |
03h |
03h |
2 |
Число секторов до первой FAT |
10h |
10h |
05h |
05h |
1 |
Число таблиц FAT |
11h |
11h |
06h |
06h |
2 |
Число записей в корневом каталоге |
13h |
|
08h |
08h |
2 |
= 0000h (примечание 1) |
15h |
15h |
0Ah |
0Ah |
1 |
Идентификатор (примечание 2) |
16h |
16h |
0Bh |
0Bh |
2 |
Размер FAT (примечание 3) |
18h |
18h |
0Dh |
0Dh |
2 |
Число секторов на дорожке диска |
1Ah |
1Ah |
0Fh |
0Fh |
2 |
Число головок |
1Ch |
1Ch |
11h |
11h |
4 |
Номер 1-го сектора (примечание 4) |
20h |
20h |
15h |
15h |
4 |
Число секторов (примечание 1) |
|
24h |
|
19h |
4 |
Размер FAT (примечание 3) |
|
28h |
|
1Dh |
2 |
То же, что 23h в таблице А.03-1 |
|
|
1Fh |
|
2 |
Число цилиндров (примечание 5) |
|
2Ah |
|
1Fh |
2 |
Версия файловой системы |
|
|
21h |
|
1 |
То же, что 01h в таблице A.04-3 |
|
2Ch |
|
21h |
4 |
1-ый кластер корневого каталога |
|
|
22h |
|
2 |
То же, что 02h в таблице A.04-3 |
24h |
40h |
|
|
1 |
Номер физического дисковода |
|
|
|
25h |
2 |
То же, что 25h в таблице A.03-1 |
26h |
42h |
|
|
1 |
Сигнатура boot-сектора (= 29h) |
27h |
43h |
|
27h |
4 |
Серийный номер диска |
2Bh |
47h |
|
2Bh |
11 |
Метка тома (или "NO NAME ") |
36h |
52h |
|
36h |
8 |
Наименование файловой системы |
Примечание 1: для разделов жестких магнитных дисков размером менее 32 Мбайт четырехбайтовое число в ячейке со смещением 15h должно быть нулевым, полное число секторов для таких малых разделов должно быть указано в ячейке со смещением 08h.
Примечание 2: здесь используется идентификатор носителя, соответствующий спецификации INT 21\AH=1Ch (8.02-17). Если тип сменного диска не определен, то в поле идентификатора заносится значение 00h.
– 612 –
Приложение А.03: Системные данные для доступа к дискам
Примечание 3: в блоках BPB "расширенного" формата в ячейку со смещением 0Bh заносится значение 0000h, а число секторов в каждой таблице FAT выражается 4-байтовым значением в ячейке со смещением 19h.
Примечание 4: в блоках BPB, формируемых в разделах жестких магнитных дисков,
номер начального сектора логического диска в ячейке со смещением 1Ch совпадает с номером, записанным в дескриптор соответствующего раздела (A.13-5) в ячейку со смещением 08h.
Примечание 5: слово в ячейке со смещением 1Fh и следующие байты 21h, 22h стандартного блока BPB не включены в расширенный формат BPB и не входят в блоки данных BPB в составе таблиц DDT (A.03-2).
A.04 Таблицы данных для управления вводом-выводом
A.04-1 Формат блока данных для запросов серийного номера диска
Этот формат используется при вызове прерываний INT 21\AX=6901h (8.02-77)
и INT 21\AX=440Dh\CX=4846h (8.02-46) для записи серийного номера на диск, а
также возвращается после вызова прерываний INT 21\AX=6900h (8.02-77) и INT 21\AX=440Dh\CX=4866h (8.02-46), считывающих серийный номер с диска.
Смещение |
Длина |
Содержание |
00h |
2 |
= 0000h |
02h |
4 |
Серийный номер диска в двоичной форме |
06h |
11 |
Метка тома (или "NO NAME ", если метки нет) |
11h |
8 |
При возврате: наименование файловой системы |
Примечание 1: наименование "CDROM " означает файловую систему High-Sierra, а наименование "CD001 " – файловую систему ISO 9660.
A.04-2 Состав информационного слова номерной ссылки на файл
Информационное слово номерной ссылки считывается из ячейки со смещением 05h в соответствующем блоке описания таблицы SFT (A.01-4) и возвращается после запроса к обработчику прерывания INT 21\AX=4400h (8.02-40). Если запрос относится к номерной ссылке на файл, то возвращаемое слово следует интерпретировать согласно приведенной ниже таблице (данные для не-файловых ссылок показаны в таблице A.05-2). Отличительным признаком ссылки на файл является сброшенный в нуль бит 7 возвращаемого информационного слова.
– 613 –
Приложение А.04: Таблицы данных для управления вводом-выводом
|
Бит |
|
Значение |
|
15 |
|
Файл не локальный, доступен через сеть |
|
14 |
|
Не переустанавливать дату и время при закрытии файла |
|
11 |
|
Файл размещен на не-сменном жестком магнитном диске |
|
7 |
|
Сброс бита 7 – признак ссылки на файл |
|
6 |
|
Запись в файл не производилась |
|
5 - 0 |
|
Номер диска (000000b = A:, 000001b = B:, 000010b = C:, . . .) |
A.04-3 |
Блок данных для задания параметров ввода-вывода |
||
Указатель на этот блок данных должен быть помещен в регистры DS:DX при вызове INT 21\AX=440Dh\CX=4840h (8.02-46) для обновления сведений в таблицах DPB (A.03-1) и DDT (A.03-2). Блок данных такой же структуры возвращает INT 21\AX=440Dh\CX=4860h (8.02-46), адрес буфера для него следует подготовить в регистрах DS:DX. Флаги в буфере в байте со смещением 00h – не возвращаемые, они выражают условия запроса и должны быть указаны там заранее.
Смещение |
Длина |
Содержание |
00h |
1 |
Флаги (биты 3 – 7 должны быть обнулены): |
|
|
бит 0: использовать данный BPB (примечание 1) |
|
|
бит 1: задать раскладку дорожек (примечание 2) |
|
|
бит 2: все секторы – одинаковые (примечание 2) |
01h |
1 |
Тип устройства: |
|
|
= 00h – дисковод 320 кб/360 кб |
|
|
= 01h – дисковод 1.2 Мб |
|
|
= 02h – дисковод 720 кб |
|
|
= 05h – жесткий магнитный диск |
|
|
= 06h – ленточный накопитель |
|
|
= 07h – другие типы (включая 1.44 Мб) |
|
|
= 08h – оптический дисковод |
|
|
= 09h – дисковод 2.88 Мб |
02h |
2 |
Атрибуты устройства: |
|
|
бит 0: накопитель с несменным носителем |
|
|
бит 1: имеется датчик смены носителя |
04h |
2 |
Число цилиндров (или число дорожек) |
06h |
1 |
Флаги носителя: |
|
|
= 01h – дискета 320кб/360кб |
|
|
= F8h – сжатый логический диск |
|
|
= 00h – все другие типы носителей |
07h |
31 |
Блок данных BPB (примечание 3) |
– 614 –
Приложение А.04: Таблицы данных для управления вводом-выводом
Примечание 1: если бит 0 в байте флагов установлен, то обновление или копирование блока BPB (A.03-4) обязательно повлечет обращение к физическому носителю записи. Если же бит 0 в байте флагов сброшен, то обращение к носителю записи не произойдет: будет скопирована или обновлена копия блока BPB, размещенная в таблице DDT (A.03-2) начиная со смещения 43h и определяющая тип носителей, принимаемый для данного дисковода по умолчанию.
Примечание 2: биты 1 и 2 в байте флагов определяют интерпретацию
необязательного субблока данных о распределении секторов на дорожке. Этот субблок размером до 256 байт может начинаться со смещения 26h для подфункции CX=0840h и со смещения 5Ch для подфункции CX=4840h. Обслуживание дисков с секторами разного размера в этой книге не рассматривается. Для подфункции CX=4860h бит 1 в байте флагов должен быть сброшен.
Примечание 3: для подфункции CX=0840h блок BPB, начинающийся со смещения 07h, должен быть стандартного формата (A.03-4), причем в нем последние 6 байтов после смещения 1Eh игнорируются, если в показанном здесь блоке данных бит 0 начального байта флагов не установлен в единицу. Для подфункции CX=4840h блок BPB, начинающийся со смещения 07h, должен соответствовать расширенной спецификации (длиной 53 байта), показанной в 4-й колонке таблицы A.03-4.
A.04-4 Формат блока данных для операций записи и считывания
Указатель на этот блок данных принимают при вызове обработчики прерываний INT 21\AX=440Dh\CX=4861h для считывания и
INT 21\AX=440Dh\CX=4841h для записи (8.02-46). Обе эти операции могут быть исполнены в "окне DOS" операционной системы Windows только при условии, что конкурентный доступ к адресуемому диску заранее блокирован (8.01-58).
Смещение |
Длина |
Содержание |
00h |
1 |
= 00h |
01h |
2 |
Номер запрашиваемой головки |
03h |
2 |
Номер запрашиваемого цилиндра |
05h |
2 |
Номер сектора, с которого надо начать |
07h |
2 |
Сколько секторов надо считать или записать |
09h |
4 |
Адрес буфера с данными или для данных |
– 615 –
Приложение А.04: Таблицы данных для управления вводом-выводом
A.04-5 Формат блока данных для операций форматирования и сверки
Указатель на этот блок данных принимают при вызове обработчики прерываний INT 21\AX=440Dh\CX=4842h для форматирования и
INT 21\AX=440Dh\CX=4862h для верификации (8.02-46). Обе эти операции могут быть исполнены в "окне DOS" операционной системы Windows только при условии, что конкурентный доступ к адресуемому диску блокирован (8.01-58).
Смещение |
Длина |
Содержание |
|
00h |
1 |
Бит 0: |
не форматировать, но выдать код статуса |
|
|
бит 1: |
многодорожечное форматирование (только |
|
|
|
для жестких магнитных дисков) |
01h |
2 |
Номер запрашиваемой головки |
|
03h |
2 |
Номер запрашиваемого цилиндра |
|
05h |
2 |
Сколько дорожек надо форматировать или сверить |
|
Примечание 1: если сброшен бит 1 в байте со смещением 00h, то форматируется только одна дорожка; слово со смещением 05h игнорируется.
Примечание 2: для операции верификации заявленное число дорожек в слове со смещением 05h не должно содержать более 255 секторов, бит 0 в байте со смещением 00h должен быть установлен в единицу для верификации нескольких дорожек сразу, а бит 1 в том же байте должен быть сброшен в нуль.
Примечание 3: при возврате в байт со смещением 00h записывается код статуса: 00h – данная функция поддерживается системой BIOS
01h – данная функция не поддерживается системой BIOS
02h – параметры для данного логического диска не подходят
03h – сменный диск в дисководе отсутствует,
причем возврат значения 00h в ответ на запрос кода статуса не гарантирует успешного проведения форматирования или сверки.
A.05 Структуры данных для драйверов
A.05-1 Структура заголовка драйвера
В приведенной ниже таблице показаны структуры данных для трех типов драйверных заголовков:
вколонке "B" – для ленточных и дисковых накопителей ("block" devices);
вколонке "C" – для каналов обмена данными ("character" devices);
вколонке "D" – для драйверов CD/DVD-ROM.
–616 –
Приложение А.05: Структуры данных для драйверов
Адрес начала драйверного заголовка для ленточных и дисковых накопителей содержится в ячейке со смещением 13h в блоке DPB (A.03-1) соответствующего накопителя. Заголовки драйверов, относящихся к каналам обмена, могут быть идентифицированы по сигнатуре, которая начинается со смещения 0Ah, при прослеживании последовательности драйверных заголовков с адреса в ячейке 22h "Списка Списков" (A.01-2), или с адреса, возвращаемого обработчиком прерывания
INT 2F\AX=122Ch (8.03-12).
B |
C |
D |
Длина |
Содержание |
00h |
00h |
00h |
4 |
Адрес следующего драйвера (примечание 1) |
04h |
04h |
04h |
2 |
Атрибуты драйвера (A.05-2) |
06h |
06h |
06h |
2 |
Смещение начала программы стратегии |
08h |
08h |
08h |
2 |
Смещение начала программы прерывания |
|
0Ah |
0Ah |
8 |
Поле для размещения сигнатуры драйвера |
|
|
14h |
1 |
1-ый обслуживаемый диск (примечание 2) |
0Ah |
|
15h |
1 |
Число дисков, обслуживаемых драйвером |
Примечание 1: до загрузки данного драйвера в поле адреса следующего драйвера должно быть записано значение FFFF:FFFFh; конкретный адрес в это поле впишет DOS, когда будет загружать следующий драйвер. Если же данный драйвер окажется последним, то значение FFFFh останется и будет означать окончание цепи ссылок.
Примечание 2: до загрузки данного драйвера в поле буквы диска должно быть вписано значение 00h; позже, при инициализации программы
MSCDEX.EXE (5.08-03) или программы SHSUCDX.COM (5.08-04)
начальное нулевое значение будет заменено номером (примечание 1 к 8.02-17) первого из дисков, обслуживаемых данным драйвером.
A.05-2 Атрибуты драйверов
Слово атрибутов помещено в ячейку со смещением 04h в заголовке драйвера (A.05-1). Но значение большинства битов в слове атрибутов различно для драйверов каналов обмена (во второй колонке приведенной ниже таблицы) и для драйверов дисковых и ленточных накопителей (в третьей колонке). Драйверы оптических дисководов, взаимодействующие с программой MSCDEX.EXE (5.08-03) или с программой SHSUCDX.COM (5.08-04), а также драйверы фиктивных дисков, сформированных программой SUBST.EXE (6.23), формально относятся к драйверам каналов обмена: у них бит 15 установлен в единицу.
Запросить слово атрибутов по известному номеру логического диска можно посредством INT 21\AX=4409h (8.02-44). Биты атрибутов, не упомянутые в приведенной ниже таблице, нормально должны быть сброшены в нуль.
– 617 –
Приложение А.05: Структуры данных для драйверов
Слово атрибутов драйверов каналов служит основой для формирования информационного слова номерной ссылки на не-файловые объекты, которое записано в ячейку со смещением 05h в соответствующем блоке данных таблицы
SFT (A.01-4). Обработчик прерывания INT 21\AX=4400h (8.02-40) возвращает это слово в регистре DX после запроса данных о не-файловом объекте (об информационном слове номерной ссылки на файл написано в A.04-2). Отличия проявляются в битах 4 – 7 второй колонки таблицы: у слова атрибутов драйвера эти биты, как правило, сброшены в нуль. А у информационного слова не-файловой номерной ссылки бит 7 установлен в единицу и является признаком отличия от информационных слов, относящихся к номерным ссылкам на файлы.
Бит |
Драйверы каналов обмена |
Драйверы накопителей |
||
0 |
Канал STDIN (примечание 1) |
= 0 (резервировано) |
||
1 |
Канал STDOUT (примечание 1) |
32-битовая адресация |
||
2 |
Канал NUL (примечание 1) |
= 0 (резервировано) |
||
3 |
Канал CLOCK (примечание 1) |
= 0 |
(резервировано) |
|
4 |
Поддержка INT 29 |
= 0 |
(резервировано) |
|
5 |
Бинарный вывод (примечание 2) |
= 0 |
(резервировано) |
|
6 |
Автоматически добавлять EOF |
IOCTL (примечание 3) |
||
7 |
= 1 |
(= не-файловый объект) |
IOCTL (примечание 4) |
|
9 |
= 0 |
(резервировано) |
Доступа нет (примечание 5) |
|
11 |
Блокировка (примечание 6) |
Блокировка (примечание 6) |
||
12 |
= 0 |
(резервировано) |
Сетевой или оптический диск |
|
13 |
Поддержка вывода до занятости |
IBM-несовместимый формат |
||
14 |
IOCTL (примечание 7) |
IOCTL (примечание 7) |
||
15 |
= 1 |
(драйвер канала) |
= 0 |
(драйвер накопителя) |
Примечание 1: в атрибутах драйверов каналов обмена из битов 0 – 3 только один бит может быть установлен в единицу (или вообще ни один).
Примечание 2: при бинарном выводе ни один из выводимых знаков не исполняется драйвером как команда (так, как показано в разделе A.02-08).
Примечание 3: установление в единицу бита 6 означает, что драйвер обслуживает вызовы прерываний INT 21\AX=440Ch, 440Dh, 440Eh, 440Fh.
Примечание 4: установление в единицу бита 7 означает, что драйвер обслуживает вызовы прерываний INT 21\AX=4410h, 4411h.
Примечание 5: установление в единицу бита 9 означает, что доступ к дискам, обслуживаемым данным драйвером, не обеспечивается функциями BIOS. Установленное состояние бита 9 характерно для драйверов, обслуживающих IFS-диски, сетевые диски, а также диски, параметры которых подменены командой DRIVPARM (4.09).
– 618 –
