Читать «Создаем вирус и антивирус» онлайн - страница 110

Игорь А. Гульев

Выход:

CF=0, если функция выполнена успешно

ES:(E)DI – селектор: смещение, содержащий структуру (Таблица Г-2).

CF=1, если при выполнении функции возникли ошибки

Описание. Данная функция возвращает информацию о свободной памяти.

Примечания.

32-битные программы должны использовать ES:EDI для адресации буфера. Только первое поле структуры гарантированно содержит правильное значение, остальные поля, в случае, если они не поддерживаются, содержат 0FFFFFFFFh (-1).

Таблица Г-2. Формат структуры информации о свободной памяти

DPMI, функция 0501h Выделить блок памяти

Вход:

AX=0501h

BX:CX – размер блока свободной памяти, который нужно выделить (в байтах)

Выход:

CF=0, если функция выполнена успешно

BX:CX – линейный адрес выделенного блока памяти

SI:DI – индекс блока памяти (используется для изменения размера и освобождения памяти)

CF=1, если при выполнении функции возникли ошибки

Описание. Данная функция выделяет блок памяти.

Примечания.

Данная функция не выделяет никаких дескрипторов.

DPMI, функция 0502h Освободить блок памяти

Вход:

AX=0502h

SI:DI – индекс блока памяти

Выход:

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Данная функция освобождает блок памяти.

Примечания.

Программа должна освободить все дескрипторы, которые были выделены для адресации этого блока памяти.

DPMI, функция 0503h Изменить размер блока памяти

Вход:

AX=0503h

BX:CX – нужный размер блока памяти (в байтах)

SI:DI – индекс блока памяти

Выход:

CF=0, если функция выполнена успешно

BX:CX – новый линейный адрес выделенного блока памяти

SI:DI – новый индекс блока памяти (используется для изменения размера и освобождения памяти)

CF=1, если при выполнении функции возникли ошибки

Описание. Данная функция изменяет размер блока памяти, выделенного функцией 0501h.

Примечания.

Данная функция может изменить линейный адрес и индекс блока памяти. Программа должна изменить все дескрипторы, которые были выделены для адресации этого блока памяти, а также для дальнейшей работы с блоком использовать новый индекс. Эта функция выдаст ошибку, если размер блока памяти будет нулевым.

DPMI, функция 0900h Получить состояние и запретить виртуальные прерывания

Вход:

AX=0900h

Выход:

CF=0

Виртуальные прерывания запрещены

AL=0 – виртуальные прерывания были запрещены

AL=1 – виртуальные прерывания были разрешены

Описание. Данная функция возвращает текущее состояние виртуальных прерываний, а затем запрещает виртуальные прерывания.

Примечания.

Регистр AH не будет изменен этой функцией. Для возвращения виртуальных прерываний в прежнее состояние нужно выполнить INT 31h.

DPMI, функция 0901h Получить состояние и разрешить виртуальные прерывания

Вход:

AX=0901h

Выход:

CF=0

Виртуальные прерывания разрешены

AL=0 – виртуальные прерывания были запрещены

AL=1 – виртуальные прерывания были разрешены

Описание. Данная функция возвращает текущее состояние виртуальных прерываний, а затем разрешает виртуальные прерывания.

Примечания. Регистр AH не будет изменен этой функцией. Для возвращения виртуальных прерываний в прежнее состояние нужно выполнить INT 31h.