Служба ввода-вывода

Служба предназначена для работы с портами ввода-вывода, MMIO, DMA, прерываниями.

Сведения о методах службы приведены в таблице ниже.

Методы службы io.IO (интерфейс kl.core.IO)

Метод

Назначение и параметры метода

Потенциальная опасность метода

RegisterPort

Назначение

Регистрирует порты ввода-вывода.

Параметры

  • [in] base – базовый адрес портов ввода-вывода.
  • [in] size – ширина диапазона адресов портов ввода-вывода.
  • [out] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует порты ввода-вывода.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Захватить порты ввода-вывода (рекомендуется контролировать базовый адрес и ширину диапазона адресов для портов ввода-вывода).
  • Исчерпать память ядра, создавая в ней множество объектов.

RegisterMmio

Назначение

Регистрирует регион памяти MMIO.

Параметры

  • [in] base – базовый адрес региона памяти MMIO.
  • [in] size – размер региона памяти MMIO в байтах.
  • [out] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует регион памяти MMIO.
  • [out] rc – код возврата.

Позволяет исчерпать память ядра, создавая в ней множество объектов.

RegisterDma

Назначение

Создает буфер DMA.

Параметры

  • [in] size – размер буфера DMA в байтах.
  • [in] flags – флаги, задающие параметры DMA.
  • [in] order – параметр, задающий минимальное число страниц памяти (2^order) в блоке.
  • [out] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер DMA.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Исчерпать память ядра, создавая в ней множество объектов.
  • Исчерпать оперативную память.

RegisterIrq

Назначение

Регистрирует прерывание.

Параметры

  • [in] irq – номер прерывания.
  • [out] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует прерывание.
  • [out] rc – код возврата.

Позволяет исчерпать память ядра, создавая в ней множество объектов.

MapMem

Назначение

Отображает регион памяти MMIO на регион виртуальной памяти.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует регион памяти MMIO.
  • [in] prot – флаги, задающие права доступа к региону виртуальной памяти.
  • [in] attr – флаги, задающие параметры региона виртуальной памяти (например, использование кеширования).
  • [out] address – базовый адрес региона виртуальной памяти.
  • [out] mapping – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует регион виртуальной памяти.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Захватить управление устройством при отображении региона памяти MMIO на регион виртуальной памяти (рекомендуется контролировать базовый адрес и размер региона памяти MMIO при вызове метода RegisterMmio).
  • Создать разделяемую память для межпроцессного взаимодействия, скрытого от модуля безопасности, если дескрипторами одного региона памяти MMIO владеют несколько процессов (маски прав дескрипторов должны разрешать отображение региона памяти MMIO).
  • Исчерпать память ядра, создавая в ней множество объектов.

PermitPort

Назначение

Открывает доступ к портам ввода-вывода.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует порты ввода-вывода.
  • [out] access – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор используется для доступа к портам ввода-вывода.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Захватить управление устройством (рекомендуется контролировать базовый адрес и ширину диапазона адресов для портов ввода-вывода при вызове метода RegisterPort).
  • Исчерпать память ядра, создавая в ней множество объектов.

AttachIrq

Назначение

Привязывает прерывание к дескриптору, используемому обработчиком прерывания.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует прерывание.
  • [in] flags – флаги, отражающие характеристики прерывания.
  • [out] delivery – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор используется обработчиком прерывания.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Забрать процессорное время у остальных потоков исполнения, в том числе из других процессов (поток исполнения, выполнивший привязку к прерыванию, становится потоком реального времени).
  • Сделать невозможным завершение процесса из другого процесса (процесс, поток которого выполнил привязку к прерыванию, невозможно завершить из другого процесса).
  • Остановить операционную систему (при возникновении необработанного исключения в потоке исполнения, обрабатывающем прерывание, останавливается операционная система).
  • Создать вредоносную обработку прерывания, например, некорректную обработку или задержку обработки (рекомендуется контролировать номер прерывания при вызове метода RegisterIrq).
  • Выполнить привязку к прерыванию, которое уже привязано к обработчику прерывания в другом процессе, чтобы заблокировать обработку этого прерывания.
  • Исчерпать память ядра, создавая в ней множество объектов.

AttachIrqEx

Назначение

Привязывает прерывание к дескриптору, используемому обработчиком прерывания.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует прерывание.
  • [in] flags – флаги, отражающие характеристики прерывания.
  • [in] futexPtr – указатель на фьютекс.
  • [out] delivery – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор используется обработчиком прерывания.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Забрать процессорное время у остальных потоков исполнения, в том числе из других процессов (поток исполнения, выполнивший привязку к прерыванию, становится потоком реального времени).
  • Сделать невозможным завершение процесса из другого процесса (процесс, поток которого выполнил привязку к прерыванию, невозможно завершить из другого процесса).
  • Остановить операционную систему (при возникновении необработанного исключения в потоке исполнения, обрабатывающем прерывание, останавливается операционная система).
  • Создать вредоносную обработку прерывания, например, некорректную обработку или задержку обработки (рекомендуется контролировать номер прерывания при вызове метода RegisterIrq).
  • Выполнить привязку к прерыванию, которое уже привязано к обработчику прерывания в другом процессе, чтобы заблокировать обработку этого прерывания.
  • Исчерпать память ядра, создавая в ней множество объектов.

DetachIrq

Назначение

Отвязывает прерывание от дескриптора, используемого обработчиком прерывания.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует прерывание.
  • [out] rc – код возврата.

Нет.

EnableIrq

Назначение

Возобновляет обработку прерывания.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует прерывание.
  • [out] rc – код возврата.

Нет.

DisableIrq

Назначение

Блокирует обработку прерывания.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует прерывание.
  • [out] rc – код возврата.

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

ModifyDma

Назначение

Изменяет параметры DMA.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер DMA.
  • [in] flags – флаги, задающие параметры DMA.
  • [out] rc – код возврата.

Нет.

MapDma

Назначение

Отображает буфер DMA на регион виртуальной памяти.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер DMA.
  • [in] offset – смещение в буфере DMA, с которого нужно начать отображение, в байтах.
  • [in] length – размер части буфера DMA, которую нужно отобразить, в байтах.
  • [in] hint – желаемый базовый адрес региона виртуальной памяти или 0, чтобы базовый адрес был выбран автоматически.
  • [in] prot – флаги, задающие права доступа к региону виртуальной памяти.
  • [out] address – базовый адрес региона виртуальной памяти.
  • [out] mapping – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует регион виртуальной памяти.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Создать разделяемую память для межпроцессного взаимодействия, скрытого от модуля безопасности, если дескрипторами одного буфера DMA владеют несколько процессов (маски прав дескрипторов должны разрешать отображение буфера DMA).
  • Исчерпать память ядра, создавая в ней множество объектов.

DmaGetInfo

Назначение

Позволяет получить сведения о буфере DMA.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер DMA.
  • [out] flags – флаги, отражающие параметры DMA.
  • [out] order – параметр, отражающий минимальное число страниц памяти (2^order) в блоке.
  • [out] size – размер буфера DMA в байтах.
  • [out] count – число блоков.
  • [out] frames – последовательность, содержащая сведения о блоках.
  • [out] rc – код возврата.

Нет.

DmaGetPhysInfo

Назначение

Позволяет получить сведения о физической памяти, на основе которой создан буфер DMA.

Параметры

  • [in] handle – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер DMA.
  • [out] count – число непрерывных регионов физической памяти.
  • [out] frames – последовательность, содержащая сведения о непрерывных регионах физической памяти.
  • [out] rc – код возврата.

Нет.

BeginDma

Назначение

Открывает доступ к буферу DMA для устройства.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер DMA.
  • [out] iomapping – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует объект ядра, который используется для отображения буфера DMA на диапазон IOMMU-адресов, используемых устройством.
  • [out] rc – код возврата.

Позволяет исчерпать память ядра, создавая в ней множество объектов.

В начало