协议驱动程序的绑定状态
对于驱动程序管理的每个绑定, NDIS 协议驱动程序 必须支持以下操作状态:
未绑定
打开
正在运行
关闭
正在暂停
已暂停
重新启动
下图显示了这些状态之间的关系。
下面定义了协议驱动程序绑定状态:
“未绑定”状态是绑定的初始状态。 在此状态下,协议驱动程序等待 NDIS 调用 ProtocolBindAdapterEx 函数。 NDIS 调用 ProtocolBindAdapterEx 后,绑定将进入“打开”状态。 取消绑定操作完成后,绑定将从“关闭”状态返回到“未绑定”状态。
在 “打开” 状态下,协议驱动程序为绑定分配资源,并尝试打开微型端口适配器。 NDIS 调用驱动程序的 ProtocolBindAdapterEx 函数后,绑定将进入“打开”状态。 如果协议驱动程序无法绑定到微型端口适配器,则绑定将返回到“未绑定”状态。 如果驱动程序成功绑定到微型端口适配器,绑定将进入“已暂停”状态。
在 “正在运行” 状态下,协议驱动程序对绑定执行正常的发送和接收处理。 当绑定处于“正在重启”状态并且驱动程序已准备好执行发送和接收操作时,绑定将进入“正在运行”状态。
在 “关闭” 状态下,协议驱动程序关闭与微型端口适配器的绑定,然后释放绑定的资源。 NDIS 调用协议驱动程序的 ProtocolUnbindAdapterEx 函数后,绑定将进入“正在关闭”状态。 协议驱动程序完成取消绑定操作后,绑定将进入“未绑定”状态。
在 暂停 状态下,协议驱动程序完成停止绑定的发送和接收操作所需的任何操作。 当绑定处于“正在运行”状态并且 NDIS 向协议驱动程序发送 PnP 暂停通知时,绑定将进入暂停状态。 协议驱动程序必须等待其所有未完成的发送请求完成。 协议驱动程序无法使暂停操作失败。 暂停操作完成后,绑定将进入“已暂停”状态。
在 “已暂停” 状态下,协议驱动程序不对绑定执行发送或接收操作。 当绑定处于暂停状态并且暂停操作完成时,绑定将进入“已暂停”状态。 当绑定处于“打开”状态并且打开操作成功完成时,绑定将进入“已暂停”状态。 如果 NDIS 向协议驱动程序发送绑定的 PnP 重启通知,则绑定将进入“正在重启”状态。 如果 NDIS 调用驱动程序的 ProtocolUnbindAdapterEx 函数,则绑定将进入“正在关闭”状态。
在 “正在重启” 状态下,协议驱动程序完成重启绑定的发送和接收操作所需的任何操作。 当绑定处于“已暂停”状态并且 NDIS 向协议驱动程序发送 PnP 重启通知时,绑定将进入“正在重启”状态。 如果重启失败,绑定将返回到“已暂停”状态。 如果重启成功,绑定将进入“正在运行”状态。