KasperskyOS Community Edition 1.1

KnIoDmaMap()

Функция объявлена в файле coresrv/io/dma.h.

Retcode KnIoDmaMap(Handle rid, rtl_size_t offset, rtl_size_t length, void *hint,

int vmflags, void **addr, Handle *handle);

Функция отображает участок DMA-буфера на адресное пространство процесса.

Входные параметры:

  • rid – дескриптор выделенного с помощью KnIoDmaCreate() DMA-буфера;
  • offset – странично-выровненное смещение начала участка от начала буфера в байтах;
  • length – размер участка; должен быть кратен размеру страницы и не превышать <размер буфера - offset>;
  • hint – виртуальный адрес начала отображения; если он равен 0, адрес выберет ядро;
  • vmflags – флаги аллокации.

В параметре vmflags можно использовать следующие флаги аллокации (vmm/flags.h):

  • VMM_FLAG_READ и VMM_FLAG_WRITE – атрибуты защиты памяти;
  • VMM_FLAG_LOW_GUARD и VMM_FLAG_HIGH_GUARD – добавление защитной страницы перед и после выделенной памяти соответственно.

Допустимые комбинации атрибутов защиты памяти:

  • VMM_FLAG_READ – разрешено чтение содержимого страницы;
  • VMM_FLAG_WRITE – разрешено изменение содержимого страницы;
  • VMM_FLAG_READ | VMM_FLAG_WRITE – разрешено чтение и изменение содержимого страницы.

Выходные параметры:

  • addr – указатель на виртуальный адрес начала отображенного участка;
  • handle – дескриптор созданного отображения.

В случае успеха функция возвращает rcOk.

Пример использования – см. KnIoDmaCreate().

Чтобы удалить созданное отображение, необходимо вызвать функцию KnIoClose(), передав в нее дескриптор отображения handle.