协议驱动程序重置操作
协议驱动程序无法在 NDIS 6.0 及更高版本中启动重置操作。
通常,基础微型端口驱动程序会重置 NIC,因为 NIC 在发送或请求操作期间超时。 此条件会导致 NDIS 调用微型端口驱动程序的 MiniportCheckForCheckForCheckEx ,并随后 调用 MiniportResetEx 函数。 或者,微型端口驱动程序确定 NIC 的接收功能是小型的。
如果重置由 NDIS 启动, MiniportResetEx 返回 NDIS_STATUS_PENDING,则 NDIS 将调用每个绑定协议驱动程序的 ProtocolStatusEx (或 ProtocolCoStatusEx) 函数,其状态为 NDIS_STATUS_RESET_START。 当微型端口驱动程序调用 NdisMResetComplete 时,NDIS 会再次调用状态为 (的 ProtocolStatusEx) 或 ProtocolCoStatusEx NDIS_STATUS_RESET_END。
协议驱动程序必须处理由于重置 NIC 而取消绑定上未完成的发送到基础 NIC 的可能性。 如果绑定协议驱动程序有任何挂起的传输请求,NDIS 将指示以适当的状态向协议驱动程序发送完成。 协议驱动程序必须在重置操作完成时重新提交发送请求,前提是 NIC 再次正常运行。
当协议驱动程序收到状态为 NDIS_STATUS_RESET_START 时,它应:
保留已准备好传输的任何网络数据,直到协议 (Co) 状态 收到NDIS_STATUS_RESET_END通知。
不进行定向到基础微型端口驱动程序的任何 NDIS 调用,但调用 以返回资源,例如使用 NdisReturnNetBufferLists 返回网络数据。
ProtocolStatusEx (或 ProtocolCoStatusEx) 收到 NDIS_STATUS_RESET_END 消息后,协议驱动程序可以恢复发送网络数据和 OID 请求。