Assembler - язык неограниченных возможностей

         

Управление файловой системой


Начиная с MS-DOS 2.0, файловая система организована в виде каталогов, которые могут содержать файлы и другие каталоги. Функции поиска файлов действуют только в пределах текущего каталога, а функции создания и удаления файлов не действуют на каталоги, несмотря на то, что на самом низком уровне каталог — тот же файл, в атрибуте которого бит 4 установлен в 1 и который содержит список имен вложенных файлов, их атрибутов и физических адресов на диске.

Функция DOS 39h — Создать каталог

Ввод: АН = 39h
DS:DX = адрес ASCIZ-строки с путем, в котором все каталоги, кроме последнего, существуют. Для версии DOS 3.3 и более ранних длина всей строки не должна превышать 64 байта
Вывод: CF = 0, если каталог создан
CF = 1 и АХ = 3, если путь не найден, 5 — если доступ запрещен

Функция LFN 39h — Создать каталог с длинным именем

Ввод: АХ = 7139h
DS:DX = адрес ASCIZ-строки с путем
Вывод: CF = 0, если каталог создан
CF = 1 и АХ = код ошибки (7100h, если функция не поддерживается)

Функция DOS 3Ah — Удалить каталог

Ввод: АН = 3Ah
DS:DX = адрес ASCIZ-строки с путем, последний каталог в котором будет удален (только если он пустой, не является текущим, не занят командой SUBST)
Вывод: CF = 0, если каталог удален
CF = 1 и АХ = 3, если путь не найден, 5 — если доступ запрещен, 10h — если удаляемый каталог — текущий

Функция LFN 3Ah — Удалить каталог с длинным именем

Ввод: АХ = 713Ah
DS:DX = адрес строки с путем
Вывод: CF = 0, если каталог удален, иначе CF = 1 и АХ = код ошибки

Функция DOS 47h — Определить текущий каталог

Ввод: АН = 47h
DL = номер диска (00h — текущий, 01h — А: и т.д.)
DS:SI = 64-байтный буфер для текущего пути (ASCIZ-строка без имени диска, первого и последнего символа «\»)
Вывод: CF = 0 и АХ = 0100h, если операция выполнена
CF = 1 и АХ = 0Fh, если указан несуществующий диск
<
/p> Функция LFN 47h — Определить текущий каталог с длинным именем

Ввод: АХ = 7147h
DL = номер диска
DS:SI = буфер для пути (ASCIZ- строка без имени диска, первого и последнего символа «\». Необязательно содержит только длинные имена — возвращается тот путь, который использовался при последней смене текущего каталога)
Вывод: CF = 0, если операция выполнена, иначе CF = 1 и АХ = код ошибки
Функция DOS 3Bh — Сменить каталог

Ввод: АН = 3Bh
DS:DX = адрес 64-байтного ASCIZ-буфера с путем, который станет текущим каталогом
Вывод: CF = 0, если произошла смена каталога, иначе CF = 1 и АХ = 3 (путь не найден)
Функция LFN 3Вh — Сменить каталог с длинным именем

Ввод: АХ = 713ВН
DS:DX = адрес ASCIZ-буфера с путем
Вывод: CF = 0, если произошла смена каталога, иначе CF = 1 и АХ = код ошибки
Перед работой с любыми функциями LFN следует один раз вызвать подфункцию A0h, чтобы определить размеры буферов для имен файлов и путей.

Функция LFN A0h — Получить информацию о разделе файловой системы VFAT

Ввод: АХ = 71A0Н
DS:DX = адрес ASCIZ-строки с именем раздела (например: db "С:\",0)
ES:DI = адрес буфера для имени файловой системы (FAT, NTFS, CDFS)
СХ = размер буфера в ES:DI (обычно достаточно 32 байта)
Вывод: СХ = 0, АХ = 0000h или 0200h

ВХ = флаги файловой системы:


    бит 0: функции поиска учитывают регистр символов

    бит 1: регистр символов сохраняется для имен каталогов

    бит 2: используются символы Unicode

    бит 14: поддерживаются функции LFN

    бит 15: включено сжатие раздела (DoubleSpace)


СХ = максимальная длина имени файла (обычно 255)
DX = максимальная длина пути (обычно 260) в Windows 95 SP1 возвращает 0000h для CD-ROM
CF = 1 и АХ = код ошибки, если произошла ошибка (7100h, если функция не поддерживается)
Кроме того, при вызове любой функции LFN следует устанавливать CF в 1 для совместимости с ранними версиями DOS. Старые версии DOS не изменяли CF, так что в результате, если функция не поддерживается, CF останется равным 1.


Содержание раздела