На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 6 / Слово атрибутов Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Слово атрибутов

Следующее слово заголовка драйвера называется словом атрибутов. Оно содержит ряд однобитовых полей, которые характеризуют тип и возможности драйвера. На рис.6-4 показано расположение и значение битов в слове атрибутов. Слово атрибутов для разных драйверов может иметь, например, следующее значение :


                Драйвер диска формата IBM - 0000H
                Стандартный драйвер консоли - 8003H
                Драйвер стандартного устройства (напр. PRN) - 8000H

БИТ15: CHR. Бит CHR должен быть сброшен в 0, если драйвер предназначен для блоковых устройств, и должен быть установлен в 1, если драйвер будет обслуживать символьное устройство (см. раздел "Типы драйверов устройств").


БИТ14: IOCTL. Бит IOCTL является необязательным. Его установка информирует MS-DOS о том, что драйвер поддерживает средства канала прямого управления. Если IOCTL бит установлен, то драйвер ОБЯЗАН поддерживать команды 3 и 12 (IOCTL ввод и вывод), в противном случае бит 14 должен быть сброшен. Указанные команды доступны при помощи подфункций 2 и 3 (для символьных устройств) или 4 и 5 (для блоковых устройств) функции MS-DOS 44H.


БИТ13: NONIBM/OTB. Для блоковых драйверов этот бит называется также NONFAT бит. Будучи установленным, этот бит указывает на то, что блоковое устройство может не поддерживать стандартной для IBM /MS-DOS структуры диска. В этом случае обработка драйвером команд INIT и BUILD BPB будет происходить особым образом. Для символьных драйверов в MS-DOS версий 3.2 и более поздних, этот бит носит название OTB (Output Until Busy) -- "Вывод пока не занято", и указывает на то, что драйвер поддерживает дополнительную команду 9 (Output Until Busy). Эта команда полезна для символьных устройств, имеющих буфер большой емкости, таких как некоторые принтеры. Символьные драйверы, используемые с MS-DOS версий 3.1 и ниже, должны иметь этот бит сброшенным в 0.


БИТ12: NETWORK. Этот бит является необязательным атрибутом, впервые определенный в MS-DOS версии 3.10. Интересно, что бит NETWORK не упоминался в последующей документации по MS-DOS версий 3.2 или 3.3, так что использование его в настоящее время оставляет некоторые вопросы. Это бит предназначен для информирования MS-DOS о том, что драйвер обслуживает сетевое устройство. Сетевые устройства помечаются как блоковые устройства в слове атрибутов; при этом делается допущение, что обслуживаемое сетевое устройство является "окном" в сеть, позволяя, таким образом, целиком перенаправлять на обработку удаленному устройству системные вызовы. Конечно, для того, чтобы воспользоваться услугами сети для указанного перенаправления, необходима поддержка соответствующего средства, такого как MS-NET.


БИТ11: OCRM. Атрибут OCRM (Open/Close/Removable Media) появляется начиная с MS-DOS версии 3.0. Он может использоваться как для символьных, так и для блоковых драйверов. Этот бит является не обязательным, хотя Microsoft рекомендует устанавливать его для всех новых драйверов. Поняв назначение этого атрибута, программист несомненно сможет определиться в его использовании (или не использовании).


Как для символьных, так и для блоковых драйверов установка этого бита означает поддержку драйвером команд DEVICE OPEN и DEVICE CLOSE (команды 13 "Открыть устройство" и 14 "Закрыть устройство"). Блоковые драйверы с установленным битом OCRM должны также поддерживать команду CHECK FOR REMOVABLE MEDIA (команда 15, "Проверка замены носителя").


Для блоковых устройств команды DEVICE OPEN и DEVICE CLOSE выдаются только в режиме совместного использования файлов (file sharing). Этот режим включается после запуска команды SHARE.EXE. При установленном режиме совместного использования файлов, команда DEVICE OPEN выдается драйверу при вызове функций MS-DOS 0FH ("Открыть файл, используя FCB") или 3DH ("Открыть файл при помощи вызова функций 10H ("Закрыть файл, используя FCB") или 3H ("Закрыть файл при помощи описателя"). Для дисковых устройств команды DEVICE OPEN и DEVICE CLOSE можно использовать для подсчета числа открытий определенного устройства, например, числа открытых файлов на диске. Это может быть полезно при определении недопустимости смены дискеты в дисководе, если на момент замены носителя оставались открытые файлы.


Для символьных устройств команды DEVICE OPEN и DEVICE CLOSE выдаются всегда, когда соответствующее устройство открывается и закрывается, независимо от режима совместного использования файлов, так что загрузка команды SHARE.EXE не требуется. При работе с устройствами могут быть использованы только функции MS-DOS 3DH ("Открыть файл при помощи описателя") и 3H ("Закрыть файл при помощи описателя"), так как FCB-метод не работает с устройствами. Для символьных устройств команды DEVICE OPEN и DEVICE CLOSE могут быть использованы для предотвращения одновременного доступа к таким устройствам, как принтер или модем, а также для вызова процедур пред- и после обработки, таких как процедуры настройки принтера или завершение сеанса связи для модема.


Заметим, что устройства CON, AUX и PRN открыты всегда, так как связаны с описателями 0, 1, и 2 (STDIN, STDOUT и STDERR -- все отображаются на устройство CON), описателем 3 (STDAUX, отображаемый на устройство AUX) и описателем 4 (STDPRN, отображаемый на устройство PRN).


Команда CHECK FOR REMOVABLE MEDIA выдается при вызове пользователем функции MS-DOS 44H ("Управление работой устройств") с подкомандой номер 8. Драйвер должен вернуть информацию о наличии сменного либо несменного носителя.


Атрибут OCRM (Open/Close/Removable Media) также учитывается при обработке драйвером команды BUILD BPB ("Построить блок параметров BIOS"). Сменный носитель может содержать "идентификатор тома", одиннадцатисимвольное имя диска. Если устройство поддерживает сменный носитель, имя тома должно быть определено и обработано драйвером. Подробнее об этом можно найти при описании команды BUILD BIOS PARAMETER BLOCK.


         БИТЫ с 10 по 7 : Зарезервированы.
         ---------------------------------

БИТ6: GIOCTL. В MS-DOS версии 3.3 бит GIOCTL ("Группа команд управления") устанавливается в 1 для индикации того, что блоковый или символьный драйвер поддерживает дополнительные подкоманды командой 19 (GENERIC I/O CONTROL REQUEST). Если этот бит разрешает использование команды 19, драйвер должен также поддерживать команды 23 и 24 (GET/SET LOGICAL DRIVE -- Получить/Установить имя логического диска).


При поддержке драйвером указанных команд, программа пользователя может выдать команду GENERIC I/O CONTROL REQUEST с помощью функции 44H MS-DOS (подфункции 0CH и 0DH). Для блоковых драйверов команды GET/SET LOGICAL DRIVE могут быть выполнены вызовом подфункций 0H (GET LOGICAL DRIVE) и 0FH (SET LOGICAL DRIVE) функции MS-DOS 44H. Для получения более подробной информации обратитесь к описанию функции 44H и описанию команд драйвера GENERIC IOCTL и GET/SET LOGICAL DRIVE.


         БИТ 5 : Зарезервирован.
         -----------------------

БИТ4: SPECL. Бит SPECL является необязательным атрибутом, используемым только драйвером консоли, и информирующим MS -DOS о том, что драйвер установил специальный обработчик INT 29H для выполнения высокоскоростного вывода на консоль (устройство CON). Если этот бит установлен, то при необходимости быстрого вывода на консоль MS-DOS выдает программное прерывание INT 29H, передавая выводимый символ в регистр AL. Режим быстрого вывода управляется и индицируется битом 5 (режим двоичного вывода) в слове конфигурации. При выдаче прерывания INT 29H ожидается, что драйвер выведет переданный в регистре AL символ и вернет управление. Обычные процедуры ввода/вывода пропускаются. Как стандартный драйвер консоли MS-DOS, так и заменяющий его драйвер ANSI.SYS поддерживают эту особенность. Если используемый драйвер консоли поддерживает прерывание INT 29H (что определяется чтением слова конфигурации драйвера), то прикладная программа также может осуществлять быстрый вывод на консоль, используя INT 29H.


Заметим, что этот бит объявлен резервным в документации IBM и вообще игнорируется в последней документации фирмы Microsoft. Оба этих факта говорят о том, что поддержка бита SPECL в будущем не гарантируется.


БИТ3: CLOCK. Бит CLOCK устанавливается на драйвере символьного устройства, имеющего имя "CLOCK$", для обозначения этого устройства, как устройства системного времени. Так как драйвер устройства "Часы" практически всегда обеспечивается системой, необходимость использования этого бита возникает довольно редко.


Драйвер устройства "Часы" обычно является обычным драйвером символьного устройства без каких-либо дополнительных атрибутов (слово атрибутов 8008H). Время считывается командой INPUT (ввод) и устанавливается командой OUTPUT (вывод). По любой из этих команд всегда передается ровно 6 байт, имеющих следующее значение :


                # БАЙТА         РАЗМЕР        ЗНАЧЕНИЕ

                0, 1            16 бит        Количество дней с 1.1.1980г.
                2               8 бит         Минуты
                3               8 бит         Часы
                4               8 бит         Сотые доли секунды
                5               8 бит         Секунды

БИТ2: NUL. Бит NUL означает, что данный драйвер является драйвером устройства NUL. В связи с тем, что NUL-драйвер не может быть заменен, нет никакой необходимости создавать драйвер устройства NUL.


БИТЫ1и0: STDIN и STDOUT. Биты STDIN и STDOUT означают, что данный драйвер является соответственно драйвером стандартного устройства ввода и вывода. Для устройства CON, обслуживающего системную клавиатуру и монитор, эти биты почти всегда определяются вместе. Если устанавливается новый драйвер консоли (такой как ANSI.SYS) для того, чтобы добавить какие-либо новые возможности, то оба этих бита должны быть установленными. Атрибуты STDIN и STDOUT могут быть установлены только на одном драйвере из всех активных (другие копии CON-драйвера тоже могут иметь эти атрибуты, однако активным будет только последний установленный CON-драйвер).


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz