Поделиться через


Функция MmAllocateNonCachedMemory (ntddk.h)

Подпрограмма MmAllocateNonCachedMemory выделяет диапазон виртуальных адресов не кэшированного и выровненного кэшем памяти.

Синтаксис

PVOID MmAllocateNonCachedMemory(
  [in] SIZE_T NumberOfBytes
);

Параметры

[in] NumberOfBytes

Задает размер выделенного диапазона в байтах.

Возвращаемое значение

Если запрошенная память не может быть выделена, возвращаемое значение равно NULL. В противном случае это базовый виртуальный адрес выделенного диапазона.

Комментарии

MmAllocateNonCachedMemory можно вызвать из подпрограммы DriverEntry , чтобы выделить не кэшированный блок виртуальной памяти для различных буферов, относящихся к устройству. Функция всегда возвращает полный кратный размер страницы виртуальной памяти, не погашенной памяти системного адресного пространства, независимо от запрошенного размера выделения.

Некашированные выделения выравниваются по целочисленной кратности размера линии кэша данных процессора, чтобы предотвратить проблемы с кэшем и coherency.

Страницы физической памяти, возвращаемые MmAllocateNonCachedMemory , обычно не являются смежными страницами.

Память, выделенная MmAllocateNonCachedMemory , не инициализирована. Драйвер режима ядра должен сначала обнулить эту память, если он собирается сделать ее видимой для программного обеспечения в пользовательском режиме (чтобы избежать утечки потенциально привилегированного содержимого).

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ntddk.h (включая Ntddk.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <=APC_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs(storport), IrqlMmApcLte(wdm), SpNoWait(storport), StorPortStartIo(storport)

См. также раздел

AllocateCommonBuffer

KeGetDcacheFillSize

MmAllocateContiguousMemory

MmAllocateContiguousMemorySpecifyCache

MmFreeNonCachedMemory