共享内存资源分配

若要为 VM 队列分配共享内存资源,微型端口驱动程序会调用 NdisAllocateSharedMemory 函数。 例如,微型端口驱动程序在收到 OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE OID 时分配共享内存。 此外,微型端口驱动程序可以在网络适配器初始化期间为默认队列分配共享内存。 有关分配队列的详细信息,请参阅 分配 VM 队列

微型端口驱动程序可以为队列分配更多内存,直到队列被释放。 有关释放队列的详细信息,请参阅 释放 VM 队列

NDIS_SHARED_MEMORY_PARAMETERS 结构指定共享内存分配请求的共享内存参数。 微型端口驱动程序将此结构传递给 NdisAllocateSharedMemory 函数。 NDIS 将此结构传递给 NetAllocateSharedMemory 函数, (即ALLOCATE_SHARED_MEMORY_HANDLER入口点) 。

当微型端口驱动程序分配共享内存时,它会指定以下内容:

  • 队列标识符。

  • 共享内存长度。

  • 如何使用共享内存。 例如,如果共享内存用于接收缓冲区,微型端口驱动程序会指定 NdisSharedMemoryUsageReceive

如果未在 Flags 成员中设置NDIS_SHARED_MEM_PARAMETERS_CONTIGOUS标志,则可以在非连续内存中包含的散点集合列表中指定共享内存。

NDIS_SHARED_MEMORY_USAGE 枚举指定如何使用共享内存。 NDIS_SHARED_MEMORY_USAGE 枚举用于 NDIS_SHARED_MEMORY_PARAMETERSNDIS_SCATTER_GATHER_LIST_PARAMETERS 结构中。 有关 VMQ 接收数据缓冲区中的共享内存参数的信息,请参阅 接收缓冲区中的共享内存

NdisAllocateSharedMemory 函数向调用方提供以下内容:

  • 已分配内存的虚拟地址。

  • 散点集合列表。

  • 共享内存句柄 - 用于接收指示。

  • 分配句柄 - 稍后用于标识内存。

微型端口驱动程序调用 NdisFreeSharedMemory 函数以释放队列的共享内存。 如果微型端口驱动程序为非默认队列分配了共享内存,则会在释放队列时在 OID_RECEIVE_FILTER_FREE_QUEUE OID 的上下文中释放共享内存。 微型端口驱动程序释放在 MiniportHaltEx 函数上下文中为默认队列分配的共享内存。