Создаем вирус и антивирус - Игорь Гульев
Шрифт:
Интервал:
Закладка:
ES:DI – адрес буфера для результирующего неоткрытого FCB (Таблица Б-2)
AL – битовые флаги, указывающие опции разбора (Таблица Б-5).Выход:
AL=00h, если результирующий FCB не содержит обобщенных символов
AL=01h, если результирующий FCB содержит обобщенные символы
AL=FFh, если неверно обозначение диска в имени файла
DS:SI – изменен – указывает на символ сразу вслед за именем файла
ES:DI – не изменен – указывает на неоткрытый FCBОписание.
Создает неоткрытый FCB из строки текста или параметра команды. Текст, начиная с DS:SI, анализируется как имя файла в формате D: FILENAME.EXT, и буфер по адресу ES:DI заполняется как соответственно форматированный FCB.
Таблица Б-5. Битовые флаги DOS, функция 2Ah Получить системную датуВход:
AH=2AhВыход:
AL – день недели (0 – воскресенье, 1 – понедельник, … 6 – суббота), DOS 3.0+
CX – год (от 1980 до 2099)
DH – месяц (1 до 12)
DL – день (1 до 31)Описание. Возвращает текущую дату, которая известна системе.
Версии.
DOS 2.x не гарантирует возврата в AL значения дня.
DOS 1.0+ возвращает правильный день недели.
Версии до 2.1 имеют проблемы с переходом через дату.
DOS, функция 2Bh Установить системную датуВход:
AH=2Bh
CX – год (от 1980 до 2099)
DH – месяц (от 1 до 12)
DL – день (от 1 до 31)Выход:
AL=00h, если дата корректна
AL=FFh, если дата некорректна и не измененаОписание.
Устанавливает системную дату DOS.
DOS, функция 2Ch Получить время DOSВход:
AH=2ChВыход:
CH – часы (от 0 до 23)
CL – минуты (от 0 до 59)
DH – секунды (от 0 до 59)
DL – сотые доли секунды (от 0 до 99)Описание. Возвращает текущее время, которое известно системе.
Примечание.
Поскольку системные часы имеют частоту 18.2 Гц (интервал 55мс), DL имеет точность примерно 0.04 сек.
DOS, функция 2Dh Установить время DOSВход:
AH=2Dh
CH – часы (от 0 до 23)
CL – минуты (от 0 до 59)
DH – секунды (от 0 до 59)
DL – сотые доли секунды (от 0 до 99)Выход:
AL=00h, если время корректно
AL=FFh, если время некорректно и не измененоОписание.
Устанавливает системное время DOS.
DOS, функция 2Eh Установить/сбросить переключатель верификацииВход:
AH=2Eh
AL=00h – отключить верификацию
AL=01h – включить верификациюОписание. Задает, должна ли DOS верифицировать (считывать обратно) каждый сектор, записываемый на диск. Это замедляет операции записи на диск, но гарантирует максимальную надежность записи.
DOS, функция 2Fh Получить адрес текущей DTA
Вход:
AH=2FhВыход: ES:BX – адрес начала текущей DTA
Описание. Возвращает адрес начала области ввода-вывода (DTA). Поскольку DTA глобальна для всех процессов, в рекурсивной процедуре (например, при проходе по дереву оглавления) может потребоваться сохранить адрес DTA, а впоследствии восстановить его посредством функции 1Ah.
Примечание. Эта функция изменяет сегментный регистр ES.
Версии: DOS 2.00 и выше DOS, функция 30h Получить номер версии DOS
Вход:
AH=30hВыход:
AL – старший номер версии
AH – младший номер версии
BL:CX – 24-битный серийный номер (большинство версий не поддерживают этот параметр)Описание. Возвращает в AX значение текущего номера версии DOS. Например, для DOS 3.20 в AL возвращается 03h, в AH – 14h.
Примечание. Если в AL возвращается 00h, можно предполагать, что работает DOS более ранней версии, чем DOS 2.0.
Версии: DOS 2.00 и выше. DOS, функция 31h Завершиться и остаться резидентным
Вход:
AH=31h
AL – код выхода
DX – объем памяти, оставляемой резидентной (в параграфах)Описание. Выходит в родительский процесс, сохраняя код выхода в AL. Код выхода можно получить через функцию 4Dh. DOS устанавливает начальное распределение памяти, как специфицировано в DX, и возвращает управление родительскому процессу, оставляя указанную память резидентной (число байт равно DX*16). Эта функция перекрывает функцию INT 27h, которая не возвращает код выхода и не способна установить резидентную программу, размер которой превышает 64 Кбайт.
Версии: DOS 2.00 и выше. DOS, функция 32h Получить информацию DOS о диске (Официально не документирована)
Вход:
AH=32h
DL – номер диска (0 – текущий, 1 – A и так далее)Выход:
AL=00h, если в DL был задан корректный диск
DS:BX – адрес блока информации о диске для запрошенного устройства (Таблица Б-6)
AL=FFh, если в DL был задан некорректный дискОписание.
Возвращает блок информации, представляющей интерес для приложений и утилит, которые выполняют доступ к дискам, поддерживаемым драйверами устройств, на уровне секторов.
Некоторые дисководы (особенно незагружаемые) функционируют только через свои драйвера устройств. Такие диски могут содержать неверную информацию в корневой записи и таблице разделов, что делает очень трудным определение, например, размера корневого оглавления, числа таблиц FAT и прочего. Блок информации диска содержит такие данные в хорошо форматированной структуре.Версии: DOS 2.00 и выше. Таблица Б-6. Формат блока информации о диске
DOS, функция 33h Установить/опросить статус Ctrl-Break
Вход:
AH=33h
AL=00h – опросить текущий статус контроля Ctrl-Break
AL=01h – установить статус контроля Ctrl-Break
DL – требуемый статус (0 – выключен, 1 – включен)Выход: DL – текущий статус (0 – выключен, 1 – включен)
Описание.
Если AL=00h, в DL возвращается текущий статус контроля Ctrl-Break.
Если AL=01h, в DL возвращается новый текущий статус.
Когда статус «включен», DOS при выполнении большинства функций (исключая 06h и 07h) проверяет, нажаты ли клавиши Ctrl-Break. Если это обнаружено, выполняется прерывание INT 23h (если оно не перехватывается, то процесс снимается).
При статусе «выключен» DOS проверяет на нажатие Ctrl-Break лишь при выполнении операций стандартного ввода/вывода, стандартной печати и стандартного AUX.Версии: DOS 2.00 и выше. DOS, функция 34h Получить адрес флага активности DOS (Официально не документирована)
Вход:
AH=34hВыход: ES:BX – адрес флага активности DOS
Описание.
Функция возвращает флаг активности DOS, который показывает, можно ли на данный момент вызывать функции DOS. Эту функцию использует, например, функция фоновой печати PRINT.
Если ES: [BX] не нулевой, фоновая программа (TSR либо popup) не должна использовать никаких функций DOS.Версии: DOS 2.00 и выше. DOS, функция 35h Получить вектор прерывания
Вход:
AH=35h
AL – номер прерывания (00h до FFh)Выход: ES:BX – адрес обработчика прерывания
Описание. Возвращает значение вектора прерывания для INT (AL), то есть загружает в BX 0000:[AL*4], а в ES – 0000:[(AL*4)+2].
Примечание. Эта функция изменяет сегментный регистр ES.
Версии: DOS 2.00 и выше. DOS, функция 36h Получить свободную память диска
Вход:
AH=36h
DL – номер диска (0 – текущий, 1 – A и так далее)Выход:
AX=FFFFh, если AL содержал неверный номер диска
Если функция выполнена успешно:
AX – число секторов на кластер
BX – число доступных кластеров
CX – байт на сектор
DX – всего кластеров на дискеОписание. Возвращает данные, полезные для подсчета общей и доступной дисковой памяти. Если в AX возвращено FFFFh, значит задан неверный диск. Иначе свободная память (в байтах) составляет (AX*BX*CX), всего памяти (AX*CX*DX) байт.
Версии: DOS 2.00 и выше. DOS, функция 37h Установить/опросить символ-переключатель (Официально не документирована)
Вход:
AH=37h
AL=00h – опросить текущий переключатель
AL=01h – установить символ-переключатель
DL – символ-переключательВыход:
AL=00h, если функция выполнена успешно
DL – текущий символ-переключатель DOS (если при вызове AL=00h)
AL=FFh, если использована неподдерживаемая подфункцияОписание. Устанавливает или опрашивает «Глобальный переключатель» DOS. Переключатель (SWITCHAR) – это символ, используемый в командной строке как признак опции. По умолчанию принимается «/» (например, DIR /w/p), но его можно изменить на «-» (DIR – w-p), если нужно, чтобы система была больше похожа на UNIX. Общепринято опрашивать значение SWITCHAR перед разбором области неформатированных параметров в PSP для выделения опций команды.
Примечание. Эта недокументированная команда может измениться в будущих версиях DOS. Не рекомендуется изменять SWITCHAR.
Версии: DOS 2.00 и выше. DOS, функция 38h Получить/установить информацию о стране
Вход:
AH=38h
Получить информацию:
AL=00h – получить данные для текущей страны
DS:DX – адрес локального буфера для чтения блока данных страны (Таблица Б-7)
Установить информацию:
AL=01h-FEh – установить данные для указанной страны < 255