Функция NdisAllocateMdl (ndis/mdlapi.h)

Функция NdisAllocateMdl выделяет MDL, описывающий буфер памяти по указанному виртуальному адресу.

Синтаксис

NDIS_EXPORTED_ROUTINE MDL * NdisAllocateMdl(
  [in] NDIS_HANDLE NdisHandle,
  [in] PVOID       VirtualAddress,
  [in] ULONG       Length
);

Параметры

[in] NdisHandle

Дескриптор NDIS, полученный во время инициализации вызывающего объекта. Дополнительные сведения см. в разделе Получение дескрипторов пула.

[in] VirtualAddress

Указатель на базовый виртуальный адрес буфера, описываемого MDL.

Важно  

Параметр VirtualAddress для NdisAllocateMdl принимает память только из пула без паг. Иными словами, требуется память из ExAllocatePool*(NonPagedNx), NdisAllocateMemoryWithTagPriority или NdisMAllocateSharedMemory. В частности, его не следует использовать с памятью из стека, страничного пула, глобальных данных драйвера или других областей памяти.

Если драйверу необходимо создать MDL для одного из этих непагрегированных регионов пула, он должен использовать соответствующие API ядра для этого типа памяти, например IoAllocateMdl в сочетании с MmProbeAndLockPages.

 

[in] Length

Размер буфера памяти в байтах.

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

NdisAllocateMdl возвращает указатель на выделенный MDL. Если выделение завершается сбоем, возвращаемое значение равно NULL.

Комментарии

Все многомерные списки, выделенные путем вызова NdisAllocateMdl , должны быть освобождены путем вызова функции NdisFreeMdl .

NdisAllocateMdl выделяет память и создает MDL за один шаг. Этот процесс отличается от IoAllocateMdl, который выделяет память только для MDL, то есть вызывающий объект должен создать MDL путем вызова mmBuildMdlForNonPagedPool или MmProbeAndLockPages.

Требования

Требование Значение
Минимальная версия клиента Поддерживается в NDIS 6.0 и более поздних версиях.
Целевая платформа Универсальное
Верхняя часть ndis/mdlapi.h (включая ndis.h)
Библиотека Ndis.lib
IRQL <= DISPATCH_LEVEL
Правила соответствия DDI Irql_NetBuffer_Function(ndis), NdisAllocateMdl(ndis)

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

ExAllocatePool

IoAllocateMdl

MmBuildMdlForNonPagedPool

MmProbeAndLockPages

NdisAllocateMemoryWithTagPriority

NdisFreeMdl

NdisMAllocateSharedMemory