OID_RECEIVE_FILTER_FREE_QUEUE
NDIS 协议驱动程序发出对象标识符 (OID) OID_RECEIVE_FILTER_FREE_QUEUE集请求以释放接收队列。
NDIS_OID_REQUEST 结构的 InformationBuffer 成员包含指向具有 NDIS_RECEIVE_QUEUE_ID类型的队列标识符的 NDIS_RECEIVE_QUEUE_FREE_PARAMETERS 结构的指针。
言论
NDIS 6.20 及更高版本的微型端口驱动程序可以选择OID_RECEIVE_FILTER_FREE_QUEUE的 OID 集请求。 支持虚拟机队列接口的微型端口驱动程序是必需的。
过度分配驱动程序发出 OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID 以分配接收队列后,它会发出 OID_RECEIVE_FILTER_FREE_QUEUE OID 以释放接收队列。
当 NDIS 请求微型端口驱动程序释放 VMQ 接收队列时,它会执行以下步骤:
网络适配器停止数据的 DMA 传输,以接收与接收队列关联的缓冲区,之后队列必须进入 DMA 停止状态。 当网络适配器收到 OID_RECEIVE_FILTER_CLEAR_FILTER OID 请求以清除接收队列上的最后一个设置筛选器时,该网络适配器可能会停止 DMA 活动。
微型端口驱动程序生成一个 NDIS_STATUS_RECEIVE_QUEUE_STATE 状态指示,NDIS_RECEIVE_QUEUE_STATE 结构的 QueueState 成员设置为 NdisReceiveQueueOperationalStateDmaStopped,以通知 NDIS 已停止 DMA 传输。
微型端口驱动程序等待该队列返回到微型端口驱动程序的所有指示接收数据包。
微型端口驱动程序通过调用 NdisFreeSharedMemory释放为网络适配器接收缓冲区分配的所有共享内存。
微型端口驱动程序完成 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 设置 DATA。METHOD_INFORMATION。将 NDIS_OID_REQUEST 结构中的 BytesNeeded成员 到所需的最小缓冲区大小。 |
要求
版本 |
NDIS 6.20 及更高版本中受支持。 |
页眉 |
Ntddndis.h (包括 Ndis.h) |
另请参阅
NDIS_RECEIVE_QUEUE_FREE_PARAMETERS