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