Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с файловой системой DOS.doc
Скачиваний:
1
Добавлен:
16.11.2019
Размер:
299.01 Кб
Скачать

Void far *drv_addr;

unsigned char media;

unsigned char acc_flag;

struct _DDCB_ far *next;

unsigned reserv2;

unsigned built;

} DDCB;

#pragma pack()

Для получения адреса блока DDCB конкретного дисковода можно воспользоваться недокументированной функцией 32h. Она имеет следующий формат вызова:

На входе:

AH = 32h

DL = Номер дисковода (0 - текущий, 1 - А:, 2 - В:, и т.д.)

На выходе:

AL = 0, если был задан правильный номер дисковода; 0FFh, если был задан неправильный номер дисковода;

DS:BX = Адрес блока DDCB

Для получения адреса блока DDCB текущего диска можно воспользоваться недокументированной функцией 1Fh, которая имеет формат, аналогичный функции 32h, за исключением того, что не надо задавать номер дисковода в регистре DL.

Какая еще полезная информация может быть получена при использовании функций MS-DOS?

С помощью функции 33h программа может проверить или установить флаг Ctrl-Break и узнать номер диска, с которого выполнялась загрузка операционной системы:

На входе:

AH = 33h

AL = Код подфункции: 0 - Проверить текущее состояние флага Ctrl-Break; 1 - Установить флаг Ctrl-Break; 5 - Определить номер диска, который был использован для загрузки операционной системы.

DL = Значение устанавливаемого флага Ctrl-Break для подфункции 1 (0 - OFF, 1 - ON).

На выходе:

DL = Текущее состояние флага Ctrl-Break для подфункции 0; Номер диска, использованного для загрузки операционной системы для подфункции 5 (1 - А:, 2 - В:, и т.д.).

Сведения о диске, который был использован для загрузки операционной системы, могут понадобиться вам для поиска файла, содержащего командный интерпретатор или программу DOSSHELL.

Состояние флага Ctrl-Break влияет на возможность прервать выполнение программы нажатием комбинации клавиш Ctrl-Break или Ctrl-C. Если флаг находится в состоянии OFF, DOS проверяет эту комбинацию клавиш только при вызове функций стандартного ввода/вывода на консоль, принтер и последовательный порт. Если флаг установлен в состояние ON, комбинация клавиш проверяется и при вызове других функций MS-DOS. Если операционная система зафиксировала нажатие указанной комбинации клавиш, она выполняет прерывание INT 23h, которое завершает работу текущей программы.

Функция 2Fh возвращает в регистровой паре ES:BX адрес текущей области DTA (Disk Transfer Area), которая используется при поиске файлов в каталогах.

Функция 54h позволяет программе узнать текущее состояние флага проверки записывающейся на диск информации. В регистре AL эта функция возвращает текущее состояние флага. Если содержимое регистра равно 1, операционная система после записи сектора считывает его для проверки. Разумеется, такая проверка снижает скорость работы программы. Если после вызова функции регистр AL содержит 0, проверка записи не выполняется.

Для установки флага проверки записи можно использовать функцию 2Eh. Перед вызовом функции в регистр AL необходимо занести новое значение флага проверки: 0 - проверка не нужна; 1 - должна выполняться проверка записанной информации.