协议驱动程序重置操作

协议驱动程序无法在 NDIS 6.0 及更高版本中启动重置操作。

通常,基础微型端口驱动程序会重置 NIC,因为 NIC 在发送或请求操作期间超时。 此条件导致 NDIS 调用微型端口驱动程序的 MiniportCheckForHangEx 和随后 的 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) Status 收到NDIS_STATUS_RESET_END通知。

  • 不进行任何定向到基础微型端口驱动程序的 NDIS 调用,但返回资源(如使用 NdisReturnNetBufferLists 返回网络数据)的调用除外。

ProtocolStatusEx (或 ProtocolCoStatusEx) 收到NDIS_STATUS_RESET_END消息后,协议驱动程序可以继续发送网络数据和 OID 请求。