Создание разделяемой памяти
Сведения о функциях API приведены в таблице ниже.
Использование API
Для создания разделяемой памяти используется буфер MDL. Буфер MDL – это буфер, состоящий из одного или нескольких регионов физической памяти, которые могут быть отображены на память нескольких процессов одновременно. Для отображения буфера MDL на память процесса используется объект ядра – таблица описания памяти. Таблица описания памяти (англ. Memory Descriptor List, MDL) – структура данных, содержащая адреса и размеры регионов физической памяти, из которых состоит буфер MDL. Дескриптор буфера MDL идентифицирует таблицу описания памяти.
Чтобы создать разделяемую память, процессу нужно создать буфер MDL, отобразить его на свою память и передать дескриптор буфера MDL через IPC другим процессам, которым также нужно отобразить этот буфер MDL на свою память.
Чтобы создать буфер MDL, нужно вызвать функцию KnPmmMdlCreate(), KnPmmMdlCreateFromBuf(), KnPmmMdlCreateFromVm() или KnPmmMdlClone(). Функция KnPmmMdlCreateFromBuf() создает буфер MDL и копирует в него данные. Функция KnPmmMdlCreateFromVm() создает буфер MDL и отображает его на память вызывающего процесса. Функция KnPmmMdlClone() создает буфер MDL на основе существующего.
Чтобы зарезервировать регион виртуальной памяти и отобразить на него буфер MDL, нужно вызвать функцию KnPmmMdlMap(). Буфер MDL можно отобразить на несколько регионов виртуальной памяти одного процесса.
Буфер MDL можно использовать для передачи больших объемов данных между процессами без создания разделяемой памяти. В этом случае необходимо обеспечить, чтобы буфер MDL не отображался на память нескольких процессов одновременно. Взаимодействующие процессы должны поочередно отображать буфер MDL в свою память, считывать и/или записывать данные и освобождать регион виртуальной памяти, на который отображен этот буфер MDL.
Модуль безопасности Kaspersky Security Module не может контролировать данные, которые передаются между процессами через буфер MDL.
Удаление буфера MDL
Чтобы удалить буфер MDL, нужно выполнить следующие шаги:
- Освободить регионы виртуальной памяти, на которые отображается буфер MDL, во всех процессах, которые используют этот буфер MDL.
Чтобы выполнить этот шаг, нужно использовать функцию
KnVmUnmap(). - Закрыть или отозвать каждый дескриптор буфера MDL во всех процессах, которые владеют этими дескрипторами.
Чтобы выполнить этот шаг, нужно использовать функцию
KnHandleClose()и/илиKnHandleRevoke(), которые объявлены в заголовочном файлеsysroot-*-kos/include/coresrv/handle/handle_api.hиз состава KasperskyOS SDK.
Сведения о функциях API
Функции vmm_api.h
Функция | Сведения о функции |
|---|---|
| Назначение Создает буфер MDL. Параметры
Возвращаемые значения В случае успеха возвращает Дополнительные сведения В параметре
|
| Назначение Создает буфер MDL из физической памяти, отображенной на заданный регион виртуальной памяти, и отображает созданный буфер MDL на этот регион. Параметры
Возвращаемые значения В случае успеха возвращает Дополнительные сведения Функцию можно использовать, если заданный регион виртуальной памяти выделен с фиксацией. В параметре
|
| Назначение Создает буфер MDL и копирует в него данные из заданного буфера. Параметры
Возвращаемые значения В случае успеха возвращает Дополнительные сведения В параметре
|
| Назначение Резервирует регион виртуальной памяти и отображает на него буфер MDL. Параметры
Возвращаемые значения В случае успеха возвращает Дополнительные сведения В параметре
Допустимые комбинации флагов, задающих права доступа к региону виртуальной памяти:
|
| Назначение Создает буфер MDL на основе существующего. Буфер MDL создается из тех же регионов физической памяти, что и оригинальный. Параметры
Возвращаемые значения В случае успеха возвращает |