Функция объявлена в файле coresrv/vmm/vmm_api.h
.
void *KnVmAllocate(void *addr, rtl_size_t size, int flags);
Функция резервирует диапазон физических страниц, задаваемый параметрами addr
и size
. Если указан флаг VMM_FLAG_COMMIT, функция резервирует и передает страницы за один вызов.
Параметры:
addr
– странично-выровненный базовый физический адрес; если задать addr
равным 0, система сама выберет свободный участок физической памяти; size
– размер участка памяти в байтах (должен быть кратен размеру страницы);flags
– флаги аллокации.Функция возвращает базовый виртуальный адрес зарезервированного участка. Если зарезервировать участок памяти невозможно, функция возвращает RTL_NULL.
Флаги аллокации
В параметре flags
можно использовать следующие флаги (vmm/flags.h
):
KnVmAllocate()
резервировать и передать страницы памяти в "ленивом" режиме;Допустимые комбинации атрибутов защиты памяти:
Пример
coredump->base = KnVmAllocate(RTL_NULL, vmaSize,
VMM_FLAG_READ | VMM_FLAG_RESERVE |
VMM_FLAG_WRITE | VMM_FLAG_COMMIT |
VMM_FLAG_LOCKED);
При необходимости можно изменить заданные атрибуты защиты участка памяти с помощью функции KnVmProtect()
.