OID_RECEIVE_FILTER_FREE_QUEUE

NDIS 协议驱动程序发出对象标识符 (OID) OID_RECEIVE_FILTER_FREE_QUEUE集请求来释放接收队列。

NDIS_OID_REQUEST 结构的 InformationBuffer 成员包含指向NDIS_RECEIVE_QUEUE_FREE_PARAMETERS结构的指针,其队列标识符的类型为 NDIS_RECEIVE_QUEUE_ID

注解

对于 NDIS 6.20 及更高版本的微型端口驱动程序,OID_RECEIVE_FILTER_FREE_QUEUE的 OID 集请求是可选的。 对于支持虚拟机队列接口的微型端口驱动程序,这是必需的。

过度分配的驱动程序发出 OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID 以分配接收队列后,它会发出OID_RECEIVE_FILTER_FREE_QUEUE OID 以释放接收队列。

当 NDIS 请求微型端口驱动程序释放 VMQ 接收队列时,它会执行以下步骤:

  1. 网络适配器将停止数据的 DMA 传输,以接收与接收队列关联的缓冲区,之后队列必须进入“DMA 已停止”状态。 网络适配器在收到 OID_RECEIVE_FILTER_CLEAR_FILTER OID 请求以清除接收队列上的最后一个设置筛选器时,可能会停止 DMA 活动。

  2. 微型端口驱动程序生成一个NDIS_STATUS_RECEIVE_QUEUE_STATE状态指示,NDIS_RECEIVE_QUEUE_STATE 结构的QueueState 成员设置为 NdisReceiveQueueOperationalStateDmaStopped,以通知 NDIS DMA 传输已停止。

  3. 微型端口驱动程序等待所有指示的接收数据包,以便该队列返回到微型端口驱动程序。

  4. 微型端口驱动程序通过调用 NdisFreeSharedMemory 释放为网络适配器的接收缓冲区分配的所有共享内存,这些缓冲区与队列相关联。

  5. 微型端口驱动程序完成OID_RECEIVE_FILTER_FREE_QUEUE OID 请求以释放接收队列。

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

过度分配的驱动程序必须先释放它在队列上设置的所有筛选器,然后才能释放队列。 此外,在调用 NdisCloseAdapterEx 函数以关闭与网络适配器的绑定之前,过度分配的驱动程序必须释放在网络适配器上分配的所有接收队列。 NDIS 在调用微型端口驱动程序的 MiniportHaltEx 函数之前,释放在网络适配器上分配的所有队列。

返回状态代码

微型端口驱动程序的 MiniportOidRequest 函数为此请求返回以下值之一:

术语 说明

NDIS_STATUS_SUCCESS

微型端口驱动程序成功完成请求。

NDIS_STATUS_PENDING

微型端口驱动程序将以异步方式完成请求。 微型端口驱动程序完成所有处理后,必须通过调用 NdisMOidRequestComplete 函数来接替请求,并传递 status 参数的NDIS_STATUS_SUCCESS

NDIS_STATUS_NOT_ACCEPTED

正在重置微型端口驱动程序。

NDIS_STATUS_REQUEST_ABORTED

微型端口驱动程序停止处理请求。 例如,NDIS 调用 MiniportResetEx 函数。

NDIS 为此请求返回以下状态代码之一:

状态代码 说明

NDIS_STATUS_SUCCESS

已成功释放请求的队列。

NDIS_STATUS_PENDING

请求正在等待完成。 请求完成后,NDIS 会将最终状态代码和结果传递给调用方 OID 请求完成处理程序。

NDIS_STATUS_INVALID_PARAMETER

队列标识符无效。

NDIS_STATUS_INVALID_LENGTH

信息缓冲区太短。 NDIS 设置数据METHOD_INFORMATIONNDIS_OID_REQUEST结构中的 BytesNeeded 成员达到所需的最小缓冲区大小。

要求

版本

在 NDIS 6.20 及更高版本中受支持。

标头

Ntddndis.h (包括 Ndis.h)

另请参阅

MiniportHaltEx

NDIS_OID_REQUEST

NDIS_RECEIVE_QUEUE_FREE_PARAMETERS

NDIS_STATUS_RECEIVE_QUEUE_STATE

NdisCloseAdapterEx

NdisFreeSharedMemory

OID_RECEIVE_FILTER_ALLOCATE_QUEUE