Драйвер устройства dos

Устанавливаемый драйвер устройства - это программа в специальном формате, загружаемая в память во время загрузки DOS. Программа драйвера устройства состоит из следующих основных частей:

· заголовка устройства,

· рабочей области драйвера,

· локальных процедур,

· процедуры СТРАТЕГИЯ,

· процедуры ПРЕРЫВАНИЕ,

· программ обработки команд DOS.

Первой частью файла должна быть 18-байтовая структура - заголовок устройства, структура которого приведена ниже. Поле Next_Device, имеющее при загрузке значение смещения –1 (0ffffh) модифицируется DOS так, чтобы указывать на начало следующего драйвера в цепочке. DOS поддерживает связный список драйверов, начиная с устройства НУЛЬ (nul:). Драйвер устройства НУЛЬ находится в списке первым и содержит указатель на следующий драйвер. Каждый следующий драйвер содержит такой же указатель, значение которого в последнем драйвере равно -1. Каждый драйвер содержит имя своего устройства, по которому DOS и находит нужный драйвер.

Заголовок драйвера устройства

Смещ. Длина Содержимое
+0 смещ. сегмент Next_Device: адрес след. устройства
                       
+4 DevAttr Атрибут устройства
                       
+6 Strategy Смещение программы СТРАТЕГИЯ
                       
+8 Intrupt Смещение программы ПРЕРЫВАНИЕ
                     
+0ah ‘L’ ‘P’ ‘T’ ‘1’ 20h 20h 20h 20h Имя устройства
                     

Значение поля Next_Device для последнего устройства в цепочке принимает значение –1 (0ffffh).

Поле "Имя устройства" содержит 8-символьное имя для символьного устройства или количество обслуживаемых устройств - для блоковых.

Поле DevAttr Заголовка устройства указывает свойства устройства. Ниже приведены значения отдельных разрядов слова состояния.



Бит   Маска
1 = стандартное входное устройство 0001h
1 = стандартное выходное устройство 0002h
1 = стандартное устройство NUL 0004h
1 = часы 0008h
1 = поддерживает логические устройства 0040h
1 = поддерживает open/close/RM 0800h
1 = не IBM блочное устройство 2000h
1 = поддерживает IOCTL 4000h
1 = символьное устройство; 0 = блочное устройство 8000h

Замечания:

· устройство NUL не может быть переназначено

· бит устройства не-IBM влияет на обработку запроса "построить блок ВРВ"

· бит символьного устройства влияет на запросы ввода и вывода и определяет смысл поля 'имя устройства' в Заголовке устройства. Если этот бит равен 0, устройство является блочным устройством (обычно дисковод)

· бит часов указывает на замещение устройства CLOCK$. CLOCK$ - это символьное устройство, обрабатывающее запросы устройства на ввод и вывод длиной ровно в 6 байтов. Запрос на ввод (код команды 4) должен возвратить 6 байтов, указывающих текущие время и дату. Запрос на вывод (код команды 8) должен принимать 6 байтов, содержащих значения часов и календаря.

При обращении к драйверу DOS формирует запрос устройства, в котором указывается, какую команду должен выполнить драйвер, а также передаются параметры команды, если это необходимо. Команды, используемые при вызове устройств в MS-DOS, приведены ниже.

Команда Наименование
Инициализировать устройство
Контроль носителя
Построить ВРВ
IOCTL ввод
Ввод (читать с устройства)
Неразрушающий ввод
Статус ввода
Сброс ввода
Вывод (писать на устройство)
Вывод с верификацией
0ah Статус вывода
Команда Наименование
0bh Сброс вывода
0ch IOCTL вывод
0dh Открыть устройство
0eh Закрыть устройство
0fh Съемный носитель
13h Общий запрос IOCTL
17h Дать логическое устройство
18h Установить логическое устройство

ОПИСАНИЕ КОМАНД ДРАЙВЕРА

0. Инициализация

Первая команда, выдаваемая в драйвер диска после загрузки. Она служит для настройки драйвера и для получения следующих сведений:

· сколько накопителей поддерживает драйвер

· адрес конца драйвера

· адрес таблицы BPB (количество ВРВ по числу поддерживаемых накопителей).

1. Контроль носителя

Эта команда всегда вызывается до дисковых операций считывания и записи для проверки смены носителя. Варианты ответа драйвера на запрос:

· носитель не сменялся

· носитель был сменен

· не знаю

2. Получение ВРВ

Эта команда выдается в драйвер, если была определена смена носителя. Для жестких дисков команда получения ВРВ вызывается только один раз.

Если драйвер в ответ на контроль смены носителя отвечает "не знаю", вызывается команда получения ВРВ, если в DOS нет "грязных" буферов, т.е. буферов, в которых содержатся модифицированные данные, еще не записанные на диск. Если "грязные буферы" есть, DOS считает, что носитель сменен не был.

По команде получения ВРВ драйвер должен прочесть с диска загрузочный сектор, где по смещению 11 находится ВРВ. ВРВ помещается в рабочую область DOS, и драйвер возвращает DOS указатель на ВРВ.

3. IOCTL-ввод

Наши рекомендации