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










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

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

Функция 44H - управление вводом/выводом для устройств (IOCTL)

Как мы упоминали, не все устройства поддерживают вызов IOCTL-функции. Те драйверы, которые обеспечивают управление вводом/выводом, не обязательно поддерживают все возможности IOCTL-функции. Тем не менее, IOCTL является настолько мощным средством управления работой устройств, что понуждает многих программистов поближе познакомиться с его возможностями. Знание того, что можно сделать с помощью IOCTL, несомненно определяет решение программиста о том, какими функциональными особенностями наделить драйвер устройства.


Функция управления вводом/выводом имеет три основных режима, которые определяются передаваемым в регистре AL кодом функции :


- Конфигурация устройства (коды 0, 1 и в последних версиях MS-DOS, коды 8, 0BH, 0EH и 0FH);


- Управление каналом ввода/вывода (коды с 2 по 5 и в MS-DOS версии 3.2, коды 0CH и 0DH);


- Запрос статуса устройства (коды 6 и 7).


Список кодов функций, поддерживаемых IOCTL, показан в таблице 6-1.


Запрос статуса устройства возвращает либо индикатор готовности (0FFH) либо не готовности (0). В руководстве программиста фирма Microsoft предупреждает о том, что код статуса может быть некорректным на момент возвращения управления вызывающей программе. Вероятно, в руководстве имеется в виду будущая возможность мультизадачности MS-DOS. Можно только надеяться, что когда появятся будущие версии, Microsoft найдет способ возвращать корректную информацию. Как бы то ни было, до тех пор пока MS-DOS не стала многозадачной, проблемы неточности статуса не должно существовать.


Мы уже упоминали возможности канала управления устройством IOCTL. Попросту говоря, это средство пересылки буфера данных по вспомогательному каналу. Механизм этого вызова идентичен вызову функций ввода/вывода на основе ДОМД (функции 3FH и 40H), за исключением кодов функций, определяемых содержимым регистра AX. Предназначены ли данные, передаваемые по дополнительному каналу, для устройства или для самого драйвера - это дело разработчика.


Не будьте, однако, ослеплены простотой этой функции и не воспринимайте ее как всего-лишь еще одну функцию ввода/вывода. В соответствующем приложении, IOCTL может блестяще выступать в роли вторичного канала для взаимодействия с драйвером. Фирма Microsoft обеспечила "запасную дверь" для решения непредвиденных проблем. Они говорят - "Вам кажется, что наш интерфейс с драйверами слишком ограничен ? Должен быть более гибким ? Что же, попробуйте вот это." Такой подход является огромным шагом вперед по сравнению с подходом "У нас нет этого, значит Вам это не нужно !", который не так давно был весьма распространен в среде разработчиков систем.


                                                               Таблица 6-1
                     Функции управления вводом/выводом (IOCTL)
         ДДДДДДВДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
           Код і Версия іПримечаниеі           Назначение
          (AL=)і MS-DOS і          і
         ДДДДДДЕДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
           0:  і  2.0+  і #1,#2    іПолучить информацию устройства
           1:  і  2.0+  і          іУстановить информацию устройства
           2:  і  2.0+  і #3,#6    іЧитать из управляющего канала СУ
           3:  і  2.0+  і #3,#6    іПисать в управляющий канал СУ
           4:  і  2.0+  і #3,#7    іЧитать из управляющего канала БУ
           5:  і  2.0+  і #3,#7    іПисать в управляющий канал БУ
           6:  і  2.0+  і #1       іПолучить входную информацию
           7:  і  2.0+  і #1       іПолучить выходную информацию
           8:  і  3.0+  і #2       іБУ поддерживает смену носителя ?
           9:  і  3.2+  і          іБУ локальное или удаленное ?
           A:  і  3.2+  і          іОписатель локальный или удаленный ?
           B:  і  3.0+  і #4       іИзменить счетчик попыток
           C:  і  3.3+  і #5       іЗапрос на переключение кодовых страниц
           D:  і  3.3+  і #5       іЗапрос IOCTL для блоковых устройств
           E:  і  3.3+  і #5       іПолучить имя логического диска
           F:  і  3.3+  і #5       іУстановить имя логического диска
         ДДДДДДБДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
         Примечание #1: Функция поддерживает как файлы, так и устройства.
         Примечание #2: Функция не поддерживает сетевую работу.
         Примечание #3: Функция разрешается  битом  14  словом  атрибутов
                        драйвера  и  поддержка определяется битом 14 слова
                        конфигурации.
         Примечание #4: Функция требует загрузки команды SHARE.
         Примечание #5: Функция разрешена битом 6 слова атрибутов драйвера.
         Примечание #6: СУ - символьное устройство.
         Примечание #7: БУ - блоковое устройство.

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

Hosted by uCoz