本主题概述了 NDIS 虚拟机队列(VMQs)的作状态。 有关队列状态的详细信息,请参阅编写 VMQ 驱动程序部分中的“队列状态和操作”主题。
对于每个队列,网络适配器必须支持以下一组操作状态:
未定义
已分配
设置
已暂停
跑步
停止 DMA
释放
下图显示了这些状态之间的关系。
下面定义了适配器状态:
未定义
未定义 是队列的初始状态。 在此状态下,队列未被分配。 在微型端口驱动程序收到队列分配请求之前,队列(始终存在的默认队列除外)未定义。 此外,在释放操作完成后,该项未定义,并且所有已启动的接收指示均已完成。
分配
在分配请求之后以及队列上设置了任何筛选器之前,队列处于 “已分配 ”状态。 当队列处于“设置”状态,且最后一个筛选器在队列上被清除时,筛选器也可以进入“已分配”状态。 如果微型端口驱动程序在微型端口驱动程序处于“已分配”状态时收到分配完成请求,队列将进入暂停状态。 如果微型端口驱动程序收到释放队列的请求,队列将进入 Stop DMA 状态。
设置
在 “设置” 状态中,已分配队列,并在队列上设置至少一个筛选器,但微型端口驱动程序尚未收到分配完整的 OID。 如果队列收到分配完成请求,则进入“正在运行”状态。 如果清除队列上的最后一个筛选器,则队列将进入“已分配”状态。 请注意,在队列上设置了筛选器时,无法释放队列。
已暂停
在 暂停 状态下,将分配队列,但其微型端口驱动程序不会指示收到的数据包,因为队列上没有设置筛选器。 微型端口驱动程序可以从“已分配”状态或“正在运行”状态进入暂停状态。 队列在收到筛选器集请求时进入“正在运行”状态。 队列在收到释放队列请求时进入停止 DMA 状态。
运行
在 “正在运行 ”状态下,队列设置了筛选器,队列分配已完成,网络适配器指示接收数据包。 如果清除队列上的最后一个筛选器,队列将进入暂停状态。 请注意,在队列上设置了筛选器时,无法释放队列。 此外,如果清除最后一个筛选器,微型端口驱动程序可以停止 DMA。 但是,微型端口驱动程序在这种情况下不应发送 DMA 停止状态指示。
停止 DMA
在 Stop DMA 状态中,微型端口驱动程序收到免费队列请求,并且必须停止 DMA 活动。 微型端口驱动程序必须发送 DMA 停止状态指示。 微型端口驱动程序发送状态指示后,队列处于释放状态。 请注意,在清除最后一个筛选器时,DMA 可能已停止。 但是,微型端口驱动程序应仅在收到免费队列请求时发送状态指示。
释放
在 释放 状态下,微型端口驱动程序正在等待队列上所有未完成的接收指示完成,然后释放与队列关联的资源。 释放所有资源后,队列将进入“未定义”状态。