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


Функция 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 и более поздних версиях.
целевая платформа Всеобщий
минимальная версия UMDF 2.33
заголовка ndis/mdlapi.h (include ndis.h)
библиотеки Ndis.lib
IRQL <= DISPATCH_LEVEL
правил соответствия DDI Irql_NetBuffer_Function(ndis), NdisAllocateMdl(ndis)

См. также

ExAllocatePool

IoAllocateMdl

MmBuildMdlForNonPagedPool

mmProbeAndLockPages

NdisAllocateMemoryWithTagPriority

NdisFreeMdl

NdisMAllocateSharedMemory