Функция MmAllocateNonCachedMemory (ntddk.h)
Подпрограмма MmAllocateNonCachedMemory выделяет диапазон виртуальных адресов, не кэшируемых и выровненных в кэше памяти.
Синтаксис
PVOID MmAllocateNonCachedMemory(
[in] SIZE_T NumberOfBytes
);
Параметры
[in] NumberOfBytes
Задает размер в байтах выделенного диапазона.
Возвращаемое значение
Если запрошенная память не может быть выделена, возвращаемое значение NULL. В противном случае это базовый виртуальный адрес выделенного диапазона.
Замечания
MmAllocateNonCachedMemory можно вызвать из подпрограммы DriverEntry, чтобы выделить не кэшированный блок виртуальной памяти для различных буферов, относящихся к устройству. Функция всегда возвращает полный размер страницы виртуальной памяти, неупакованной памяти, независимо от запрошенного размера выделения.
Не кэшированные выделения выравниваются по целочисленной части размера строки кэша данных процессора, чтобы предотвратить проблемы с кэшем и согласованности.
Страницы физической памяти, которые MmAllocateNonCachedMemory возвращаются, как правило, не являются смежными страницами.
Память, которая mmAllocateNonCachedMemory выделяется неинициализировано. Драйвер в режиме ядра должен сначала ноль этой памяти, если он будет отображаться в программном обеспечении в пользовательском режиме (чтобы избежать утечки потенциально привилегированного содержимого).
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
заголовка | ntddk.h (include Ntddk.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <=APC_LEVEL |
правил соответствия DDI | HwStorPortProhibitedDIs(storport), IrqlMmApcLte(wdm), SpNoWait(storport), StorPortStartIo(storport) |