є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ¦ X ¦ Симв. драйверы є
є +02 : 00 Команда АДДДЩ є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД є
є +03 : Статус є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ЧТЕНИЕ ЗАПИСЬ є
є Зарезервировано є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ЪДДД¬ ДДДДД ЪДДД¬ ДДД є
є +13 : Количество устройств ¦ ¦ ¦ X ¦ є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ГДДДґ ДДДДД ГДДДґ ДДД є
є +14 : Адрес конца ¦ ¦ ¦ X ¦ є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ГДДДґ ДДДДД ГДДДґ ДДД є
є +18 : Команда/Адрес BPB ¦ X ¦ ¦ X ¦ є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ГДДДґ ДДДДД ГДДДґ ДДД є
є +22 : Номер устройства ¦ X ¦ ¦ ¦ є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД АДДДЩ ДДДДД АДДДЩ ДДД є
є є
є Адрес таблицы BPB возвращается только блоковыми драйверами. є
є Номер устройства поддерживается начиная с DOS 3.10. є
є є
ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
Команда INIT (инициализация) всегда является самой первой вы-
зываемой командой и обрабатывается на этапе установки драйвера.
- 6-30 -
MS-DOS выдает эту команду для каждого драйвера только один раз.
На команду INIT возложена ответственность за информирование
MS-DOS об особых характеристиках драйвера и за выполнение необхо-
димых действий по инициализации драйвера. Последние зависят от
типа устройства, управляемого драйвером. Возвращаемые драйвером
характеристики также зависят от типа драйвера.
Все драйверы должны возвращать адрес последнего байта памяти,
занимаемой драйвером и количество устройств, управляемых драйве-
ром. Драйверы символьных устройств могут поддерживать не более
одного устройства. Блоковые драйверы могут поддерживать несколько
устройств (например, если в одном устройстве содержится несколько
дисководов). Кроме того, драйвер может вернуть ноль в качестве
параметра количества поддерживаемых устройств, для прекращения
процесса инициализации. Это может потребоваться, к примеру, при
обнаружении отсутствия устройства. В такой ситуации драйвер дол-
жен также установить адрес последнего используемого байта равным
CS:0 (текущий кодовый сегмент, нулевое смещение) для того, чтобы
MS-DOS могла использовать всю занимаемую драйвером память. В нор-
мальной ситуации адрес завершения представляет собой адрес (сег-
мент и смещение) первого свободного после драйвера байта памяти.
MS-DOS продолжает загрузку системы начиная со следующего после
адреса завершения параграфа памяти (или начиная с адреса заверше-
ния, если он приходится на границу параграфа).
Третий параметр, определяемый командой INIT - это адрес табли-
цы BPB. Этот указатель, возвращаемый MS-DOS командой INIT, предс-
тавляет собой адрес таблицы, которая сама представляет собой со-
вокупность указателей на блоки параметров BIOS. Таблица BPB
содержит по одному указателю на каждое устройство, поддерживаемое
драйвером. Блок параметров BIOS (или, короче, BPB) это структура,
которая определяет формат блокового устройства (см. рис.6-6). Так
как этот параметр имеет смысл только для блоковых устройств, он
не возвращается символьными драйверами. Однако поле указателя
таблицы BPB в блоке запроса несет еще одну полезную нагрузку, ко-
торая может быть использована обоими типами драйверов - это поле
содержит адрес командной строки драйвера. У нас еще будет возмож-
ность подробнее обсудить назначение этого поля.
СМЕЩЕНИЕ СОДЕРЖАНИЕ РАЗМЕР
(hex)
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД·
+0 ¦ Размер сектора в байтах є Слово
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¶
+2 ¦ Количество секторов в кластере є Байт
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¶
+3 ¦ Количество зарезервированных секторов є Слово
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¶
+5 ¦ Количество таблиц FAT є Байт
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¶
+6 ¦ Количество элементов директория є Слово
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¶
+8 ¦ Количество логических секторов є Слово
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¶
+A ¦ Описатель носителя є Байт
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¶
+B ¦ Количество секторов в одной FAT є Слово
ФНННННННННННННННННННННННННННННННННННННННј
Рисунок 6-6. Блок параметров BIOS
- 6-31 -
Последний параметр, уникальный для команды INIT, это номер ус-
тройства. Этот параметр, который поддерживается только в MS-DOS
версии 3.10 и более поздних, используется для задания начального
номера устройства. К примеру, если драйвер должен управлять дис-
ками C: и D:, содержимое этого поля будет равно 2 и количество
устройств будет равным двум. Если драйвер должен управлять только
дисководом A:, то номер устройства будет равен 0, а количество
устройств 1. Эта возможность очень важна, так как она позволяет в
конце концов заменять стандартные блоковые драйверы на драйверы,
устанавливаемые пользователем.
Команда INIT является уникальной, так как из всех команд драй-
вера, она выполняется в среде, близкой к той, в которой выполня-
ются обычные программы. В отличие от остальных команд, команда
INIT может использовать функции MS-DOS с 01H по 0CH и 30H. Ука-
занные функции позволяют драйверу выдать идентифицирующее сообще-
ние во время установки и, если нужно, отобразить состояние конфи-
гурации драйвера. Функция 30H ("Получить версию DOS") позволяет
драйверу настроиться на определенную версию MS-DOS, что дает воз-
можность разработчику писать драйверы, работающие с любой версией
операционной системы.
Другое сходство команды INIT с обычными программами MS-DOS
заключается в том, что INIT может прочитать командную строку
драйвера и использовать ее для конфигурации драйвера. Как уже
указывалось, команда DEVICE в файле CONFIG.SYS имеет следующий
формат :
DEVICE=[d:][path]filename[.ext][ parameters]
При обращении к драйверу с командой INIT драйверу передается
адрес буфера, содержащего текст командной строки. Этот адрес пе-
редается в поле указателя таблицы BPB блока заголовка и указывает
на первый после знака "=" символ командной строки. Для получения
необходимой информации процедура инициализации должна просмотреть
командную строку, пропустив спецификации файла, и обработать пе-
реданные параметры. Однако, в отличие от стандартных программ,
команде INIT передается только адрес командной строки, а не сама
строка. Командную строку при этом можно только читать (и ни в ко-
ем случае не модифицировать). Для блоковых драйверов это адрес,
конечно же, должен будет перекрыт адресом таблицы BPB.
MS-DOS обращается к драйверу с командой INIT только единожды
во время загрузки системы, поэтому код, реализующий обработку
этой команды после завершения последней, будет бесполезно зани-
мать память. Для того, чтобы минимизировать использование памяти
драйвером, можно располагать код команды INIT после предполагае-
мого адреса завершения или отводить место, занимаемое процедурой
инициализации, для внутренних буферов драйвера (драйвер RDISK ис-
пользует пространство, занимаемое командой INIT, как часть буфера
памяти). В любом случае память будет заново использована либо
MS-DOS либо драйвером. Все остальные процедуры, реализующие ос-
тальные команды, должны располагаться до адреса завершения.
- 6-32 -
Команда MEDIA CHECK
~~~~~~~~~~~~~~~~~~~~~
ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
є є
є Команда MEDIA CHECK (1) є
є є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ЪДДД¬ є
є +00 : 19 Длина ¦ X ¦ Блок. драйверы є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД АДДДЩ є
є +01 : номер # Устройство ЪДДД¬ є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ¦ ¦ Симв. драйверы є
є +02 : 01 Команда АДДДЩ є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД є
є +03 : Статус є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ЧТЕНИЕ ЗАПИСЬ є
є Зарезервировано є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ЪДДД¬ ДДДДД ЪДДД¬ ДДДД є
є +13 : Описатель носителя ¦ X ¦ ¦ ¦ є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ГДДДґ ДДДДД ГДДДґ ДДДД є
є +14 : Состояние носителя ¦ ¦ ¦ X ¦ є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ГДДДґ ДДДДД ГДДДґ ДДДД є
є +15 : Адрес имени тома ¦ ¦ ¦ X ¦ є
є ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД АДДДЩ ДДДДД АДДДЩ ДДДД є
є є
є Состояние носителя : (-1) - носитель заменен, 0 - носитель неоп- є
є ределен, 1 - носитель не изменялся. є
є Имя тома возвращается только,если : (a) DOS версии не ниже 3.00, є
є (b) установлен атрибут OCRM и (c) возвращаемый статус носителя є
є равен (-1). є
є є
ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
Команда MEDIA CHECK (Проверить носитель) всегда выполняется
блоковыми драйверами и никогда не используется для драйверов сим-
вольных устройств. Эта команда используется MS-DOS для разрешения
проблемы, которая может возникнуть при работе с устройствами, ис-