Служба предназначена для работы с портами ввода-вывода, MMIO, DMA, прерываниями.
Сведения о методах службы приведены в таблице ниже.
Метод
|
Назначение и параметры метода
|
Потенциальная опасность метода
|
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 – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор является клиентским IPC-дескриптором, который используется обработчиком прерывания. - [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 – код возврата.
|
Позволяет исчерпать память ядра, создавая в ней множество объектов.
|