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


Функция 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)

См. также

AllocateCommonBuffer

KeGetDcacheFillSize

MmAllocateContiguousMemory

MmAllocateContiguousMemorySpecifyCache

MmFreeNonCachedMemory