5.10.2. Фн 44h - Управление устройствами (IOCTL)

Error message

Notice: Undefined index: add term path in hansel_get_breadcrumbs() (line 524 of /data/sites/msdosworld.ru/www/sites/all/modules/hansel/hansel.module).

      Вход: AH = 44h

            AL = код подфункции:

              00h - получить информацию об устройстве

              01h - задать информацию об устройстве

              02h - чтение IOCTL-строки с последовательного

                    устройства

              03h - запись  IOCTL-строки на последовательное

                    устройство

              04h - чтение IOCTL-строки с блочного устройства

              05h - запись IOCTL-строки на блочное устройство

              06h - получить состояние ввода

              07h - получить состояние вывода

              08h - проверка сменного носителя (ДОС 3.0+)

              09h - проверка сетевого устройства по имени

                    (ДОС 3.1+)

              0Ah - проверка сетевого устройства по номеру файла

                    (ДОС 3.1+)

              0Bh - параметры блокировки файлов (ДОС 3.0+)

              0Ch - управление кодовыми страницами (ДОС 3.3)

              0Dh - общее управление устройствами (ДОС 3.2+)

              0Eh - получить логическое устройство (ДОС 3.2+)

              0Fh - задать логическое устройство (ДОС 3.2+)

            Прочие регистры определяются подфн

 

      Выход: AX = код ошибки, если установлен флаг CF

             Прочие регистры зависят от подфн

 

      Описание:    Эта     подфн    обеспечивает    разнообразное

 взаимодействие  с устройствами  и файлами.  Она имеет  следующие

 ограничения:

 

      - к файлам применимы только подфн 0, 6 и 7;

      - подфн 0 и 8 не поддерживается в сети;

      - подфункции определены в следующих версиях ДОС:

 

        подфн 0-7      ДОС 2.1 и выше

        подфн 8,0Bh    ДОС 3.0 и выше

        подфн 9,0Ah    ДОС 3.1 и выше

        подфн 0Dh-0Fh  ДОС 3.2 и выше

        подфн 0Ch      ДОС 3.3

 

 ────────────────────────────────────────────────────────────────

 

      Подфн 00h: Получить информацию об устройстве

 

      Вход: BX = номер файла (устройства или дискового файла)

 

      Выход: DX = слово информации об устройстве (см. прим. 1)

 

 ────────────────────────────────────────────────────────────────

 

 

      Подфн 01h: задать информацию об устройстве

 

      Вход: BX = номер файла (только устройство)

            DX = слово информации об устройстве

                 (DH должно быть нулем)

 

      Выход: DX = слово информации об устройстве (см. прим. 1)

 

 ────────────────────────────────────────────────────────────────

 

      Подфн 02h-03h: Чтение (AL=2) или запись (AL=3) IOCTL-строки

      в управляющий канал последовательного устройства

 

      Вход: DS:DX = адрес буфера ввода или вывода

            CX = количество передаваемых байтов

            BX = номер файла (только устройство)

 

      Выход: AX = код ошибки (1, 5, 6 или 13), если флаг CF = 1

      Код  ошибки  1  означает,  что  устройство  не поддерживает

 IOCTL-строки.

 

 ────────────────────────────────────────────────────────────────

 

      Подфн 04h-05h: Чтение (AL=4) или запись (AL=5) IOCTL-строки

      в управляющий канал блочного устройства

 

      Вход: DS:DX = адрес буфера ввода или вывода

            CX = количество передаваемых байтов

            BL = номер дисковода (0=текущий, 1=A, ...)

 

      Выход: AX = код ошибки (1, 5, 6 или 13), если флаг CF = 1

             иначе

             AX = количество переданных байтов

      Код   ошибки  1   означает,  что   устройство  не поддеpжи-

 вает IOCTL-строки.

 

 ────────────────────────────────────────────────────────────────

 

      Подфн 06h-07h:  Получить состояние ввода  (AL=6) или вывода

 (AL=7)

 

      Вход: BX = номер файла (устройство или дисковый файл)

 

      Выход: AL = состояние устройства (0FFh или 0)

 

      Описание: Для дисковых файлов  возвращает состояние файла в

 AL:

      AL = 0   - конец файла

          0FFh - не конец файла

 

      Для устройств возвращает готовность  устройства к вводу или

 выводу:

 

      AL = 0   - устройство не готово

          0FFh - устройство готово

 

 

 ──────────────────────────────────────────────────────────────

 

      Подфн 08h:  Проверяет, имеет ли  блочное устройство сменный

 носитель.

 

      Вход: BL = номер дисковода (0=текущий, 1=A, ...)

 

      Выход: AX = 0 - сменный носитель (например, НГМД)

                  1 - постоянный носитель (например, жесткий диск)

      Код ошибки: 0Fh - несуществующее устройство, если бит CF=1

                   1  - сетевое устройство, если бит CF=1

 

 ────────────────────────────────────────────────────────────────

 

      Подфн  09h:  Проверяет,  является  ли  заданное  устройство

 локальным или сетевым

 

      Вход: BL = номер дисковода (0=текущий, 1=A, ...)

 

      Выход: DX =  атрибуты дисковода. Если бит 12=1  (т. е. DX &

             1000h=1000h), то диск является сетевым устройством.

 

 ────────────────────────────────────────────────────────────────

 

      Подфн  0Ah: Проверяет,  относится номер  файла к локальному

 или сетевому устройству

 

      Вход:BX = номер файла (только устройство)

 

      Выход: DX = атрибуты устройства. Если бит 15=1 (т. е.

             DX & 8000h=8000h), то устройство является сетевым.

 

      Примечание: Эту подфн не рекомендуется использовать. Лучше

 работать с сетевыми дисками как с локальными.

 

 ────────────────────────────────────────────────────────────────

 

      Подфн 0Bh: Управляет параметрами блокировки файлов.

 

      Вход: DX = количество повторных попыток до вызова Int 24h

            CX = количество циклов ожидания между повторами

 

      Выход: AX = код ошибки, если установлен флаг CF

 

      Примечание: По  умолчанию принято 3  повторных попытки и  1

 цикл ожидания.  Для этой подфн  должна быть загружена  программа

 SHARE.

 

 ────────────────────────────────────────────────────────────────

 

 

      Подфн 0Ch: Управление кодовыми страницами

 

      Вход: BX = номер файла (только устройство)

            CH = тип устройства:

                0 - неизвестен

                1 - COMn (стык C2)

                2 - CON (консоль)

                5 - LPTn (принтер)

            CL = действия:

                4Ch - начать подготовку кодовой страницы

                4Dh - окончить подготовку кодовой страницы

                4Ah - выбрать подготовленную кодовую страницу

                6Ah - получить текущую кодовую страницу

                6Bh - получить  список  подготовленных  кодовых

                      страниц

            DS:DX = адрес пакета данных (см. ниже)

 

      Выход: AX = код ошибки, если установлен флаг CF

             CD:DX - пакет   данных  может  содержать  ответную

                     информацию

 

      Описание:  Для  подготовки   кодовой  страницы  используйте

 CL=4Ch,  а  затем  ряд  обращений  к  подфн  03h. Формат кодовых

 страниц зависит от устройства; соответствующие данные хранятся в

 файлах  EGA.CPI, LCD.CPI,  4201.CPI и  5202.CPI. Структура  этих

 файлов приведена в 1.3.

 

      Пакеты данных  зависят от кода  действия и имеют  следующую

 структуру:

 

      CL = 4Ah, 4Dh, 6Ah

 

 Смещение Длина Содержимое    Комментарий

 ───────────────┬─────────┬──────────────────────────────────────

   +0       2       2    │ Длина пакета в байтах

                ├─────────┤

   +2       2   │Code Page│ Номер кодовой страницы

                └─────────┘

 ────────────────────────────────────────────────────────────────

 

      CL = 4Ch

 

 Смещение Длина Содержимое    Комментарий

 ───────────────┬─────────┬──────────────────────────────────────

   +0       2              Флаги

                ├─────────┤

   +2       2            │ Длина остальной части пакета в байтах

                ├─────────┤

   +4       2            │ Количество кодовых страниц

                ├─────────┤

   +6       2            │ Номер первой кодовой страницы

                ├─────────┤

   +8       2            │ Номер второй кодовой страницы

                └─────────┘

                  .  .  .


                ┌─────────┐

   +?       2            │ Номер последней кодовой страницы

                └─────────┘

 ────────────────────────────────────────────────────────────────

 

      Можно  указать  до  12  кодовых  страниц  в  зависимости от

 значения   MaxFonts,  заданного   в  CONFIG.SYS   при  установке

 драйвера. Номер кодовой страницы 0FFFFh = -1 означает, что ее не

 нужно подготавливать.

 

      CL = 6Bh

 

 Смещение Длина Содержимое    Комментарий

 ───────────────┬─────────┬──────────────────────────────────────

   +0       2            │ Длина пакета в байтах

                ├─────────┤

   +2       2            │ Количество аппаратных кодовых страниц

                ├─────────┤

   +4       2            │ Номер первой аппаратной кодовой

                ├─────────┤ страницы

   +6       2            │ Номер второй аппаратной кодовой

                └─────────┘ страницы

                  .  .  .

                ┌─────────┐

   +?       2            │ Номер последней аппаратной кодовой

                ├─────────┤ страницы

   +?       2            │ Количество подготовленных кодовых

                ├─────────┤ страниц

   +?       2            │ Номер первой подготовленной кодовой

                ├─────────┤ страницы

   +?       2            │ Номер втпрой подготовленной кодовой

                └─────────┘ страницы

                  .  .   .

                ┌─────────┐

   +?       2            │ Номер последней подготовленной

                └─────────┘ кодовой страницы

 ────────────────────────────────────────────────────────────────

 

      Этот  пакет возвращается  подфн по  адресу DS:BX.  Он может

 иметь  длину до  56 байтов  и содержать  до 12  аппаратных и  12

 подготовленных  кодовых  страниц   в  зависимости  от  параметра

 MaxFonts,  заданного   в  CONFIG.SYS  при   установке  драйвера.

 

 ────────────────────────────────────────────────────────────────

 

      Подфн 0Dh: Общее управление устройствами

 

      Вход: BL = номер диска (0=текущий, 1=A, ...)

            CH = старший код действия (всегда 08h)

            CL = младший код действия:

                40h = задать параметры устройства

                60h = получить параметры устройства

                41h = запись дорожки логического устройства

                61h = чтение дорожки логического устройства

                42h = форматирование   и   проверка   дорожки

 

                      логического  устройства

                62h = проверка  дорожки  логического устройства

            DS:DX = адрес пакета данных (см. ниже).

 

      Выход: AX = код ошибки, если установлен флаг CF

             DS:DX - пакет   данных  может  содержать  ответную

 информацию

 

      Формат пакета данных определяется кодом действия:

 

      CL = 40h, 60h

 

 Смещение Длина Содержимое  Комментарий

 ───────────────┬───┬────────────────────────────────────────────

   +0       1            Специальные функции

                ├───┤

   +1       1            Тип устройства (заполняется драйвером)

                ├───┴───┐

   +2       2          │ Атрибуты устройства (заполняется

                ├───────┤ драйвером)

   +4       2          │ Количество цилиндров (заполняется

                ├───┬───┘ драйвером)

   +6       1           Тип носителя

                ├───┴───────────┐

   +7     1Fh        . . .     │ BPB устройства

                ├───────────────┤

   +26h     ?        . . .     │ Структуpа дорожки (переменной

                └───────────────┘ длины)

 

      Поля этого пакета имеют следующий формат:

 

      Специальные  функции:  Это  поле  битовых  флагов. Для кода

 действия 60h определен только бит 0:

 

      Бит 0=1 - считать  блок   BPB,  возвращаемый  запросом

                "Построить BPB" к драйверу устройства;

            0 - считать  BPB  по  умолчанию  (заданный  кодом

                действия 40h)

 

 Для кода действия 40h это поле имеет вид:

 

  7 6 5 4 3 2 1 0

 ┌─┬─┬─┬─┬─┬─┬─┬─┐

 │0│0│0│0│0│ │ │ │

 └─┴─┴─┴─┴─┴┬┴┬┴┬┘ Бит:                                   Маска:

            │ │ └─>0:1=использовать BPB драйвера           a & 1

            │ │        устройства

            │ │      0=использовать по умолчанию BPB

            │ │        из этого пакета

            │ └───>1:1=игнорировать все поля этого пакета, a & 2

                      кроме структуры дорожки

            └─────>2:1=все сектора дорожки имеют           a & 4

                       одинаковую длину

 

 Тип устройства: 0 = 5 1/4"-я дискета 320 Кб/360 Кб

                 1 = 5 1/4"-я дискета 1,2 Мб

                 2 = 3 1/2"-я дискета 720 Кб

                 3 = 8"-я дискета одинарной плотности

                 4 = 8"-я дискета двойной плотности

                 5 = жесткий диск

                 6 = магнитофон

                 7 = 3 1/2"-я дискета 1,44 Мб

 

 Атрибуты устройства

 

  7 6 5 4 3 2 1 0

 ┌─┬─┬─┬─┬─┬─┬─┬─┐

 │0│0│0│0│0│0│ │ │

 └─┴─┴─┴─┴─┴─┴┬┴┬┘ Бит:                                   Маска:

              │ └─>0:1=постоянный носитель,                a & 1

                    0=сменный носитель

              └───>1:1=есть сигнал смены дискеты, 0=нет    a & 2

 

      Количество  цилиндров:  Возвращает  максимальное количество

 цилиндров,    поддеpживаемых  контpоллеpом   физического   диска

 независимо от типа носителя.

 

      Тип  носителя: Используется  для задания  типа носителя для

 устройств,   поддерживающих  несколько   типов.  Например,   для

 дисководов повышенной емкости: 0=1,2 Мб; 1=360 Кб.

 

      BPB устройства: Это таблица следующего вида:

 

 Смещение Длина  Содержимое  Комментарий

 ───────────────┬───────────┬────────────────────────────────────

  +0       0Dh     . . .   │ Блок BPB из загрузочного сектора

                ├───────┬───┘

  +0Dh      2               Количество секторов на дорожке

                ├───────┤

  +0Fh      2               Количество головок

                ├───────┤

  +11h      2               Количество открытых секторов (для

                ├───────┴───┐ разделов диска)

  +13h     0Ch     . . .   │ Резерв

                └───────────┘

   1Fh     Длина BPB устройства

 ────────────────────────────────────────────────────────────────

 

      Структура  дорожки:  Это  поле  переменной  длины,  которое

 описывает сектора дорожки диска. См. также Int 13h, фн 05h.

 

 Смещение Длина Содержимое  Комментарий

 ───────────────┬────────┬───────────────────────────────────────

   +0       2   │SectCnt │ N - количество секторов на дорожке

                ├────────┼────────┐ (например dw 9)

   +2       4   │Sec 1 No│Sec 1 Siz Номер сектора и его размер

                ├────────┼────────┤ (например, dw 1, 200h)

   +6       4   │Sec 2 No│Sec 2 Siz Номер сектора и его размер

                └────────┴────────┘ (например, dw 2, 200h)

                      .  .  .

                ┌────────┬────────┐

   +?       4   │Sec N No│Sec N Siz Номер сектора и его размер

                └────────┴────────┘ (например, dw 9, 200h)

 ────────────────────────────────────────────────────────────────

 

      Примечания:

 

      1.  Если  бит  2  специальных  функций  установлен,  то все

 сектора должны иметь одинаковый размер.

 

      2. Драйверы устройств ДОС не поддерживают таблицу структуры

 дорожки  для каждого  логического устройства.  Поэтому при смене

 носителя нужно вызывать фн 44h, подфн 0Dh, CL=40h.


 

      CL = 41h, 61h

 

 Смещение Длина Содержимое  Комментарий

 ───────────────┬───┬────────────────────────────────────────────

   +0       1   │ 0 │ Специальные функции (всегда 0)

                ├───┴───┐

   +1       2   │ head  │ Номер головки

                ├───────┤

   +3       2   │ track │ Номер дорожки

                ├───────┤

   +5       2   │ sector│ Номер первого сектора, начиная с нуля

                ├───────┤

   +7       2   │SectCnt│ Количество секторов - 1

                ├───────┴───────┐

   +9       4                  │ Длинный адрес буфера обмена

                └───────────────┘

 ────────────────────────────────────────────────────────────────

 

      CL = 42h, 62h

 

 Смещение Длина Содержимое  Комментарий

 ───────────────┬───┬────────────────────────────────────────────

   +0       1   │ 0 │ Специальные функции

                ├───┴───┐

   +1       2   │ head  │ Номер головки

                ├───────┤

   +3       2   │ track │ Номер дорожки

                └───────┘

 ────────────────────────────────────────────────────────────────

 

      Специальные функции: Определен только бит 0.

 

      На входе: бит 0=0 - форматировать дорожку

                      1 - проверить, есть ли поддержка

                          нестандартного формата дорожек

 

      На выходе: бит 0=0 - есть поддержка нестандартного формата

                           дорожек

                       1 - нет поддержки нестандартных дорожек

 

      Поддержка  нестандартного формата  дорожек означает, что Вы

 можете задавать структуру дорожки  при установке параметров (см.

 выше).

 

 ────────────────────────────────────────────────────────────────

      Подфн 0Eh: Получить логическое устройство

 

      Вход: BL = номер диска (0=текущий, 1=A, ...)

 

      Выход: AX = код ошибки, если установлен бит CF; иначе

             AL = 0 - диску  BL  соответствует  только  один

                  логический диск;

                  (1=A, 2=B, ...) - логическое имя диска,

                  присвоенное дисководу BL.

 

 

      Описание:  Эта  подфн  проверяет,  поддерживает  ли драйвер

 данного   диска   более   одного   логического  устройства.  Она

 возвращает   имя  логического   диска,  которое   использовалось

 последним для доступа к данному дисководу или 0.

 

 ───────────────────────────────────────────────────────────────

 

      Подфн 0Fh: Задать логическое устройство

 

      Вход: BL = номер диска (0=текущий, 1=A, ...)

 

      Выход: AX = код ошибки, если установлен флаг CF; иначе

             AL = 0 - диску  BL  соответствует  только  один

                  логический диск

                  (1=A, 2=B, ...) - логическое имя диска, которое

                  будет использоваться в последующих обращениях к

                  диску BL.

 

      Описание: Эта  подфн указывает драйверу  дисковода, сменить

 имя  логического  диска,  ассоциированного  с  дисководом BL. Вы

 должны   обратиться   к   ней   до   выполнения  любых  операций

 ввода-вывода на данном логическом  диске, в противном случае ДОС

 выдаст сообщение

 

      "Insert diskette for drive X..."

 

      Примечания:

 

      1. Слово информации об устройстве имеет следующий формат

 

  1 1 1 1 1 1

  5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0

 ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐

 │0│ │р е з е р в│ │ │ │ │ │ │ │ │

 └─┴┬┴─┴─┴─┴─┴─┴─┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘ Бит:                    Маска:

                 │ │ │ │ │ │ │ └─>0:1=стандартное      a & 0001h

                 │ │ │ │ │ │ │        устройство ввода

                 │ │ │ │ │ │ └───>1:1=стандартное      a & 0002h

                 │ │ │ │ │ │          устройство вывода

                 │ │ │ │ │ └─────>2:1=стандартное      a & 0004h

                 │ │ │ │ │            нуль-устройство

                 │ │ │ │ └───────>3:1=часы (CLOCK$)    a & 0008h

                 │ │ │ └─────────>4:1=специальное      a & 0010h

                 │ │ │                устройство (не

                 │ │ │                используется)

                 │ │ └───────────>5:1=двоичный режим,  a & 0020h

                 │ │                0=текстовый режим

                 │ └─────────────>6:1=нет конца файла, a & 0040h

                                   0=конец файла

                 └───────────────>7:1=устройство,      a & 0080h

                                    0=дисковый файл

    └─────────────────────────────>14:1=поддерживает    a & 4000h

                                        IOCTL

 

 Если бит 7 сброшен (дисковый файл), то

      биты 0-5: имя диска (0=A, 1=B, ...)

             6: 1 = была запись в канал

            14: 1 = поддерживает IOCTL

 

      2.  Поддержка IOCTL  означает, что  устройство обрабатывает

 подфн 2 - 5, 0Ch, 0Dh.

 

      См. также: Загружаемые драйверы устройств

Вы находитесь в разделе: 

Добавить коментарий