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