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
.