Игорь Гульев - Создаем вирус и антивирус
Версии: DOS 2.00 и выше. DOS, функция 57h Установить/опросить дату/время файла
Вход:
AH=57h
AL=00h – получить дату/время файла
AL=01h – установить дату/время файла
BX – описатель файла (handle)
CX (если AL=1) – новая отметка времени в формате время файла
DX (если AL=1) – новая отметка даты в формате дата файлаВыход:
CF=0, если функция выполнена успешно
CX – (если при вызове AL=0) отметка времени файла в формате время/дата файла (Таблица Б-12)
Таблица Б-12. Формат времени файлаDX – (если при вызове AL=0) отметка даты файла в формате время/дата файла (Таблица Б-13)
Таблица Б-13. Формат даты файлаCF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. BX должен содержать описатель открытого файла (см. 3Ch или 3Dh). DX и CX задаются в формате памяти (например, младшие 8 бит даты находятся в DH).
Версии: DOS 2.00 и выше. DOS, функция 59h Получить расширенную информацию об ошибке
Вход:
AH=59h
BX=0000h (номер версии: 0000h для DOS 3.0, 3.1 и 3.2)Выход:
AX – расширенный код ошибки (0, если ошибки не было)
BH – класс ошибки
BL – предлагаемое действие
CH – сфера (где произошла ошибка)Описание. Эту функцию можно использовать, чтобы уточнить, что предпринять после сбоя функции DOS по ошибке (только DOS 3.0+). Ее можно вызывать: в обработчике критических ошибок INT 24h, после любой функции INT 21h, возвратившей флаг переноса после вызова FCB-функции, возвратившей AL=FFh.
Версии: DOS 3.00 и выше. DOS, функция 5Ah Создать уникальный временный файл
Вход:
AH=5Ah
DS:DX – адрес строки ASCIZ с диском и путем (заканчивается символом «»)
CX – атрибут файлаВыход:
CF=0, если функция выполнена успешно
AX – описатель файла
DS:DX – (не изменяется) полное ASCIZ-имя нового файла
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. Открывает (создает) файл с уникальным именем в каталоге, заданном строкой ASCIZ, на которую указывает DS:DX. COMMAND.COM вызывает эту функцию, когда создает временные «канальные» файлы, используемые при переназначении ввода-вывода. Описание пути должно быть готово к добавлению в его конец имени файла. Необходимо обеспечить минимум 12 байт в конце строки. Сама строка должна быть заполнена в одной из форм: «^: путь»,0 (указан диск и путь), «d:»,0 (текущее оглавление диска) или «d: »,0 (корневое оглавление диска).
Версии: DOS 3.00 и выше. DOS, функция 5Bh Создать новый файл
Вход:
AH=5Bh
DS:DX – адрес строки ASCIZ с именем файла
CX – атрибут файлаВыход:
CF=0, если функция выполнена успешно
AX – описатель файла
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. Файл открывается для чтения/записи в совместимом режиме доступа. Если диск и/или путь не указаны, принимаются значения по умолчанию. Этот вызов идентичен функции DOS 3Ch с тем исключением, что он вернет ошибку, если файл с заданным именем уже существует.
Версии: DOS 3.00 и выше. DOS, функция 5Ch Блокировать/разблокировать доступ к файлу
Вход:
AH=5Ch
AL – подфункция:
AL=00h – заблокировать область файла
AL=01h – разблокировать ранее заблокированную область
BX – описатель файла
CX:DX – смещение ((CX*65536)+DX) от начала файла
SI:DI – длина блокируемой области ((SI*65536)+DI) байтВыход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. Блокирует или освобождает доступ к участку файла, указанного в BX. Область файла с логическим смещением CX:DX и длиной SI:DI блокируется (захватывается) или разблокируется (освобождается). Смещение и длина обязательно должны быть указаны. Разделение файлов должно быть активизировано (командой SHARE), иначе функция вернет код ошибки «Неверный номер функции».
Версии: DOS 3.00 и выше (при обязательной загрузке SHARE). DOS, функция 62h Получить адрес PSP
Вход:
AH=62hВыход: BX – сегментный адрес PSP выполняющейся программы
Описание. Эта функция возвращает в BX адрес PSP текущей программы. Используется, для получения адреса параметров командной строки, адреса окружения DOS и другой полезной информации, содержащейся в PSP.
Версии: DOS 3.00 и выше. DOS, функция 65h Получить расширенную информацию страны
Вход:
AH=65h DOS 3.3
AL – подфункция:
AL=01h – дать расширенную информацию страны DOS 3.3
AL=02h – дать таблицу преобразования строчных букв в прописные
AL=04h – то же для символов, допустимых в именах файлов
AL=06h – дать сопоставляющую последовательность
DX – код страны
BX – кодовая страница (FFFFh – консоль)
CX – размер буфера возврата (должен быть минимум 5 байт)
ES:DI – адрес буфера возвратаВыход:
CF=0, если функция выполнена успешно
ES:DI – адрес возвращенной информации
CF=1, если при выполнении функции возникли ошибки:
AX – код ошибкиОписание. Эта функция возвращает различную национальную информацию. Используется для получения формата даты, символа валюты и других данных, необходимых для вывода и сортировки информации (во всех странах, кроме США).
Версии: DOS 3.30 и выше. DOS, функция 66h Получить/установить глобальную кодовую страницу
Вход:
AH=66h
AL – подфункция:
AL=01h – запросить текущую глобальную кодовую страницу
AL=02h – установить активную кодовую страницу
BX – (при AL=02h) кодовая страница (Таблица Б-14)
DX – (при AL=02h) системная кодовая страница (устанавливаемая при загрузке)Выход:
CF=0, если функция выполнена успешно
Таблица Б-14. Значения кодовых страницBX – (если при вызове AL=01h) текущая активная кодовая страница
DX – (если при вызове AL=01h) системная кодовая страница (устанавливаемая при загрузке)
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. Эта функция выбирает новую кодовую страницу или получает значение текущей активной кодовой страницы (страниц). Программа DOS NLSFUNC должна быть загружена до этого вызова. Функция используется в сочетании с 65h или 38h.
Примечание. Устанавливая новую активную кодовую страницу, DOS читает данные из файла COUNTRY.SYS.
Версии: DOS 3.30 и выше. DOS, функция 67h Установить число описателей файлов
Вход:
AH=67h
BX – максимальное число описателей (до FFFFh)Выход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. Эта функция устанавливает максимальное число описателей файлов, которые могут быть открыты одновременно. Если значение BX меньше 20, то принимается 20. Если значение BX меньше текущего максимума (нужно сократить число описателей), и в данный момент открыто более чем BX файлов, то изменение будет иметь место, когда число открытых файлов не будет превышать устанавливаемый максимум. Если BX больше текущего максимума (нужно увеличить число описателей), то DOS должна иметь доступную память, чтобы распределить ее под новые описатели. Функция 4Ah позволяет освободить память, чтобы она стала доступной DOS.
Версии: DOS 3.30 и выше. DOS, функция 68h Завершить файл
Вход:
AH=68h
BX – описатель завершаемого файлаВыход:
CF=0, если функция выполнена успешно
CF=1, если при выполнении функции возникли ошибки
AX – код ошибкиОписание. Эта функция заставляет DOS сбросить (записать на диск) буфера основной памяти для указанного описателя файла. DOS обычно избегает обмена с дисками, записывая данные в буфера в основной памяти до заполнения сектора или закрытия файла. Эта функция заставляет DOS немедленно записать данные на диск. Это ускоряет операции с базами данных, позволяя приложению избежать неэффективного закрытия и повторного открытия файлов.
Версии: DOS 3.3 и выше. В версиях DOS от 2.0 до 3.2 можно использовать функцию DOS 45h, чтобы создать и затем закрыть дубликат.
Приложение В Функции программирования Flash в AMIBIOS
За программирование Flash в AMIBIOS отвечает функция E0h прерывания INT 16h. При вызове прерывания INT 16h номер функции должен находиться в регистре AH, номер подфункции – в регистре AL. При возврате из функции регистр AL содержит FAh как подтверждение, что данная функция прерывания поддерживается. Флаг CF равен нулю при успешном выполнении и равен единице при ошибке.
Для уверенности в успешном выполнении функций необходимо всегда проверять AL=FAh на выходе.
Flash AMIBIOS, подфункция 00h
Получить номер версии интерфейса Flash BIOS
Вход:
AH=E0h
AL=00h
Выход:
AL=FAh
CF=1 – интерфейс Flash-BIOS отсутствует
CF=0 – интерфейс Flash-BIOS присутствует
BX – номер версии в формате BCDОписание. Возвращает номер версии интерфейса Flash-BIOS в BCD-формате. Например, версия 2.00 возвратит в BX число 0200h.