Игорь Гульев - Создаем вирус и антивирус
Версии: DOS 2.00 и выше. DOS, функция 45h Дублировать описатель файла
Вход:
AH=45h
BX – существующий описатель файлаВыход:
CF=0, если функция выполнена успешно
AX – новый описатель файла, дублирующий оригинал
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. Создает дополнительный описатель файла, ссылающийся на тот же поток ввода/вывода, что и существующий описатель. Любое продвижение указателя чтения/записи одного описателя (включая любые операции чтения, записи или перемещения указателя посредством функции 42h) действует на его дубликат.
Версии: DOS 2.00 и выше. DOS, функция 46h Переназначить описатель
Вход:
AH=46h
BX – целевой описатель файла (должен уже существовать)
CX – исходный описатель файла (должен уже существовать)Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. Заставляет описатель файла (handle) ссылаться на другой файл или устройство. Если описатель в CX (источник) открыт, он закрывается, а затем становится дубликатом описателя в BX (назначения). Иными словами, описатели в CX и BX будут ссылаться на один и тот же физический файл или устройство.
Версии: DOS 2.00 и выше. DOS, функция 47h Получить текущее оглавление DOS
Вход:
AH=47h
DS:SI – адрес локального буфера для результирующего пути – 64 байта
DL – номер диска (0 – текущий, 1 – A и так далее)Выход:
CF=0, если функция выполнена успешно
AX не сохранен
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. В буфер по адресу DS:SI помещается в форме ASCIZ путь текущего оглавления для диска, указанного в DL. Путь возвращается в формате: «путьоглавление»,0. Впереди не подставляется буква диска, а сзади не подставляется символ «». Например, если текущим является корневое оглавление, эта функция вернет пустую строку (DS: [SI]=0).
Версии: DOS 2.00 и выше. DOS, функция 48h Выделить память
Вход:
AH=48h
BX – запрошенное количество памяти в 16-байтных параграфахВыход:
CF=0, если функция выполнена успешно
AX – сегментный адрес распределенного блока
CF=1, если при выполнении функции возникли ошибки
AX – код ошибки
BX – размер максимального доступного блока памяти (в параграфах)Описание. Распределяет блок памяти длиной BX параграфов, возвращая сегментный адрес этого блока в AX (блок начинается с AX:0000). Если распределение неудачно, устанавливается флаг CF, в AX возвращается код ошибки, а BX содержит максимальный размер доступной для распределения памяти (в параграфах). Чтобы определить наибольший доступный блок, общепринято устанавливать BX=FFFFh перед вызовом. Распределение завершится с ошибкой, возвратив размер максимального блока памяти в BX.
Версии: DOS 2.00 и выше. DOS, функция 49h Освободить блок памяти
Вход:
AH=49h
ES – сегментный адрес освобождаемого блока памятиВыход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. Освобождает блок памяти, начинающийся с адреса ES:0000. Этот блок становится доступным для других запросов системы. Вообще говоря, нужно освобождать лишь те блоки памяти, которые получены через функцию 48h (распределить память). Родитель отвечает за освобождение памяти порожденных процессов. Тем не менее, ничто не препятствует освобождать память чужих процессов.
Версии: DOS 2.00 и выше. DOS, функция 4Ah Изменить размер блока памяти
Вход:
AH=4Ah
ES – сегмент распределенного блока памяти
BX – нужный размер блока в 16-байтных параграфахВыход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
AX – код ошибки
BX – размер максимального доступного блока памяти (в параграфах)Описание. Изменяет размер существующего блока памяти. Когда программа получает управление, функция 4Bh уже распределила блок памяти, начиная с PSP, который содержит всю доступную память. Чтобы освободить память для запуска порождаемых процессов, блок памяти, начинающийся с PSP, необходимо сначала сжать.
Примечание.
Функция 31h и INT 27h (TSR) сжимают блок по адресу PSP.
Версии: DOS 2.00 и выше.
DOS, функция 4Bh Выполнить или загрузить программуВход:
AH=4Bh
DS:DX – адрес строки ASCIZ с именем файла, содержащего программу
ES:BX – адрес EPB (блока параметров EXEC)
AL=00h – загрузить и выполнить
AL=01h – загрузить, но не выполнять
AL=03h – загрузить программный оверлейВыход:
CF=0, если функция выполнена успешно
BX, DX не сохранены
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. Данная функция загружает в память и запускает программу, имя которой указано в регистрах DS:DX. Запущенная программа после завершения работы возвратит управление запускаемой. Если диск или путь не указаны, принимаются значения по умолчанию. ES:BX указывает на блок памяти, подготовленный как EPB, формат которого зависит от запрошенной подфункции в AL.
Версии: DOS 2.00 и выше. DOS, функция 4Ch Завершить программу
Вход:
AH=4Ch
AL – код выходаОписание. Возвращает управление от порожденного процесса его родителю, устанавливая код выхода (его можно опросить функцией 4Dh). Управление передается по адресу завершения в PSP завершающейся программы. Векторы Ctrl-Break и Critical Error восстанавливаются к старым адресам, сохраненным в родительском PSP.
Примечание. Значение ERRORLEVEL (используемое в пакетных файлах DOS) можно использовать для проверки кода выхода самой последней программы.
Версии: DOS 2.00 и выше. DOS, функция 4Dh Получить код выхода программы
Вход:
AH=4DhВыход:
AH – код выхода последнего завершившегося процесса
AH=00h – нормальное завершение
AH=01h – завершение через Ctrl-Break INT 23h
AH=02h – завершение по критической ошибке устройства INT 24h
AH=03h – завершение через функцию 31h
AL – код выходаОписание. Возвращает код выхода последнего из завершившихся процессов. Эта функция возвращает правильную информацию только однажды для каждого завершившегося процесса.
Версии: DOS 2.00 и выше. DOS, функция 4Eh Найти первый совпадающий файл
Вход:
AH=4Eh
DS:DX – адрес строки ASCIZ с именем файла (допускается использовать символы «?» и «*»)
CX – атрибут файла для сравненияВыход:
CF=0, если функция выполнена успешно
DTA заполнена данными (Таблица Б-10)
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. Если диск и/или путь не указаны, принимаются значения по умолчанию. Обобщенные символы «*» и «?» допускается использовать в имени файла и расширении.
Версии: DOS 2.00 и выше. DOS, функция 4Fh Найти следующий совпадающий файл
Вход:
AH=4Fh
DS:DX – адрес данных, возвращенных предыдущей 4Eh (Найти первый файл)
Таблица Б-10. Формат данных в DTAВыход:
CF=0, если функция выполнена успешно
DTA заполнена данными
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. Эту функцию можно использовать после вызова 4Eh. Следующее имя файла, совпадающее по обобщенному имени и атрибуту файла, копируется в буфер по адресу DS:DX вместе с другой информацией (Таблица Б-10).
Примечание. Параметр DS:DX добавлен в DOS 3.0.
Версии: DOS 2.00 и выше. DOS, функция 52h Получить адрес векторной таблицы связи (Официально не документирована)
Вход:
AH=52hВыход: ES:BX – адрес векторной таблицы связи (Таблица Б-11)
Описание. Данная функция возвращает адрес векторной таблицы связи.
Версии: DOS 2.00 и выше. DOS, функция 54h Получить переключатель верификации DOS
Вход:
AH=54hВыход:
AL=00h, если верификация выключена (OFF)
AL=01h, если верификация включена (ON)Описание. Возвращает текущий статус верификации записи DOS. Если в AL возвращается 1, то DOS считывает обратно каждый сектор, записываемый на диск, чтобы проверить правильность записи. Функция DOS 2Eh позволяет установить/изменить режим верификации.
Версии: DOS 2.00 и выше. Таблица Б-11. Формат векторной таблицы связи
DOS, функция 56h Переименовать/переместить файлВход:
AH=56h
DS:DX – адрес старого ASCIZ имени (путь/имя существующего файла)
ES:DI – адрес нового ASCIZ имени (новые путь/имя)Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. Старое имя DS:DX должно существовать и не может содержать обобщенных символов. Диск и путь необязательны (если они не указаны, принимаются значения по умолчанию). Новое имя ES:DI должно описывать несуществующий файл. Если указан диск, он должен быть тем же, что и в старом имени. Если диск или путь не указаны, принимаются текущие. Если старое и новое имя содержат разные пути (явные или принятые по умолчанию), то элемент оглавления для файла перемещается в оглавление, указанное в новом имени.