NdisAllocateMdl 函数 (ndis/mdlapi.h)

NdisAllocateMdl 函数分配一个 MDL,用于描述指定虚拟地址处的内存缓冲区。

Syntax

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

参数

[in] NdisHandle

调用方初始化期间获取的 NDIS 句柄。 有关详细信息,请参阅 “获取池句柄”。

[in] VirtualAddress

指向 MDL 描述的缓冲区基虚拟地址的指针。

重要提示  

NdisAllocateMdlVirtualAddress 参数仅接受来自非分页池的内存。 换句话说,它需要 ExAllocatePool*(NonPagedNx)、 NdisAllocateMemoryWithTagPriorityNdisMAllocateSharedMemory 中的内存。 具体而言,它 不应 与堆栈、分页池、驱动程序全局数据或其他内存区域的内存一起使用。

如果驱动程序需要为其中一个非非分页池区域生成 MDL,则应为该类型的内存(例如 IoAllocateMdlMmProbeAndLockPages 结合使用)使用适当的内核 API。

 

[in] Length

内存缓冲区的大小(以字节为单位)。

返回值

NdisAllocateMdl 返回指向分配的 MDL 的指针。 如果分配失败,则返回值为 NULL

注解

通过调用 NdisAllocateMdl 分配的所有 MDL 都必须通过调用 NdisFreeMdl 函数来释放。

NdisAllocateMdl 分配内存并在一个步骤中生成 MDL。 此过程不同于仅为 MDL 分配内存的 IoAllocateMdl,这意味着调用方必须通过调用 MmBuildMdlForNonPagedPoolMmProbeAndLockPages 来生成 MDL。

要求

Requirement 价值
最低支持的客户端 NDIS 6.0 及更高版本中受支持。
目标平台 普遍
最低 UMDF 版本 2.33
Header ndis/mdlapi.h (include ndis.h)
Library Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 Irql_NetBuffer_Function(ndis)NdisAllocateMdl(ndis)

另请参阅

ExAllocatePool

IoAllocateMdl

MmBuildMdlForNonPagedPool

MmProbeAndLockPages

NdisAllocateMemoryWithTagPriority

NdisFreeMdl

NdisMAllocateSharedMemory