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


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

Комментарии

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

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

Требования

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

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

ExAllocatePool

IoAllocateMdl

MmBuildMdlForNonPagedPool

MmProbeAndLockPages

NdisAllocateMemoryWithTagPriority

NdisFreeMdl

NdisMAllocateSharedMemory