Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

MS-DOS для программиста

© Александр Фролов, Григорий Фролов
Том 19, М.: Диалог-МИФИ, 1995, 253 стр.

[Назад] [Содеожание] [Дальше]

4.2. Общее управление устройством GENERIC IOCTL

Подфункция 0Dh функции 44h прерывания INT 21h обеспечивает механизм взаимодействия между прикладным программным обеспечением и драйверами блочных устройств. Эта подфункция позволяет программам читать и изменять параметры устройств, предоставляет возможность выполнять чтение, запись, форматирование и проверку дорожек диска на низком уровне с помощью драйвера устройства.

При вызове функции вы должны загрузить регистры процессора следующим образом:

Регистр Содержание
AH 44h
AL 0Dh
BL Номер устройства НМД или НГМД (0 - текущий диск, 1 - А: и т. д.)
CH Код категории устройства: 08h - дисковое устройство
CL Операция:
40h - установить параметры устройства;
60h - получить параметры устройства;
41h - записать дорожку;
61h - прочитать дорожку;
42h - форматировать дорожку;
62h - проверить дорожку
DS:DX Указатель на блок параметров

Если функция выполнилась без ошибки, флаг переноса CF сброшен. В противном случае этот флаг установлен, при этом регистр AX содержит код ошибки.

Через регистры DS:DX функции необходимо передать адрес подготовленного блока параметров, формат которого зависит от выполняемой операции. Опишем этот формат для наиболее важных операций.

  • Получить/установить параметры устройства (CL = 40h/60h)
Смещение Размер Содержимое поля
0 1 Специальные функции:Бит 0:Если установить этот бит в операции с кодом 60h, можно извлечь текущий BPB . Результат аналогичен выполнению команды драйвера с кодом 2 (построить BPB). Если этот бит сброшен, надо извлечь BPB, используемый по умолчанию.Бит 1:Если этот бит установлен, функция игнорирует все поля в блоке параметров, кроме поля описания физической структуры дорожки на данном устройстве.Бит 2:Если этот бит установлен, все секторы на дорожке имеют одинаковый размер
1 1 Тип устройства, возвращаемый драйвером:

0 - НГМД емкостью 320 или 360 Кбайт с диаметром 5,25";
1 - НГМД емкостью 1,2 Мбайт и диаметром 5,25";
2 - НГМД емкостью 720 Кбайт и диаметром 3,5";
3 - НГМД диаметром 8" нормальной плотности;
4 - НГМД диаметром 8" двойной плотности;
5 - жесткий диск;
6 - накопитель на магнитной ленте;
7 - НГМД емкостью 1,44 Мбайт и диаметром 3,5", а также прочие дисковые устройства
2 2 Атрибуты устройства, возвращаемые драйвером. В этом поле используются только два младших бита.
Бит 0 - признак возможности замены среды носителя данных (0 - заменяемая, 1 - не заменяемая).Бит 1 - признак наличия аппаратного контроля замены дискеты (1 - контроль выполняется, 0 - контроль не выполняется). Остальные биты зарезервированы и должны содержать 0
4 2 Максимальное количество дорожек на физическом устройстве. Это поле устанавливается драйвером
6 1 Тип среды носителя данных. Используется для устройств, поддерживающих несколько типов носителей данных. Например, если в НГМД высокой плотности установлена дискета высокой плотности, тип равен 0, а если установлена дискета двойной плотности - 1
7 31 BPB для устройства. Если бит 0 поля специальных функций сброшен, то в этом поле находится новый BPB для устройства. Если бит 0 установлен, драйвер устройства возвращает BPB для всех последующих запросов на построение BPB
38 ? Таблица разметки дорожки, имеет переменную длину

Таблица разметки дорожки начинается с двухбайтового слова, содержащего общее количество секторов на дорожке. Затем для каждого сектора в таблице находится по два двухбайтовых слова, содержащих номер сектора (1, 2 и т. д.) и размер сектора. То есть для каждого сектора в таблице содержится два слова.

Если в поле "специальные функции" бит 2 установлен в 1, размеры всех секторов должны быть одинаковыми.

  • Записать/прочитать дорожку (CL = 41h/61h)
Смещение Размер Содержимое поля
0 1 Специальные функции (это поле всегда содержит 0)
1 2 Номер головки
3 2 Номер дорожки
5 2 Номер начального сектора (нумерация секторов, в отличие от нумерации головок и дорожек начинается с 0)
7 2 Общее количество секторов на дорожке, уменьшенное на единицу
9 4 Дальний указатель на буфер обмена с диском, в который помещается считываемая информация или откуда берется записываемая информация
  • Форматировать/проверить дорожку (CL = 42h/62h)
Смещение Размер Содержимое поля
0 1 Специальные функции. Для этой операции определен только бит 0. Перед вызовом команды значение, равное 0, требуется для форматирования дорожки. Если этот бит установлен в 1, то проверяется возможность использования заданного формата дорожки. Если после выполнения команды значение бита равно 0, то заданный формат дорожки и заполненную таблицу разметки дорожки можно использовать. Если значение бита 0 равно 1, то указанный формат дорожки не поддерживается
1 2 Номер головки для форматирования или проверки
3 2 Номер дорожки для форматирования или проверки

Перед началом выполнения операции программа должна получить и сохранить текущие параметры устройства. Для получения текущих параметров устройства необходимо выполнить операцию с кодом 60h. Затем программа должна установить новые параметры устройства, которые будут использованы в операциях чтения, записи, проверки или форматирования. Для установки параметров программа должна выполнить операцию с кодом 40h.

После выполнения операции программа должна восстановить первоначальные параметры устройства, выполнив операцию с кодом 40h.

[Назад] [Содеожание] [Дальше]