Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Dos7book

.pdf
Скачиваний:
97
Добавлен:
09.02.2015
Размер:
5 Мб
Скачать
☆

Приложение А.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 –

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]