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 要描述的缓冲区的基虚拟地址的指针。

重要说明  

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

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

 

[in] Length

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

返回值

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

注解

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

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

要求

要求
最低受支持的客户端 在 NDIS 6.0 及更高版本中受支持。
目标平台 通用
最低 UMDF 版本 2.33
标头 ndis/mdlapi.h (包括 ndis.h)
Library Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 Irql_NetBuffer_Function (ndis) NdisAllocateMdl (ndis)

另请参阅

ExAllocatePool

IoAllocateMdl

MmBuildMdlForNonPagedPool

MmProbeAndLockPages

NdisAllocateMemoryWithTagPriority

NdisFreeMdl

NdisMAllocateSharedMemory