微型端口适配器挂起检查和重置操作

概述

警告

对于所有 NDIS 6.83 及更高版本的驱动程序,不建议检查挂起 (CFH) 和重置操作。 有关详细信息,请参阅 NDIS 6.83 及更高版本中的 Check-for-Hang 和 Reset 操作

NDIS 调用 NDIS 微型端口驱动程序的 MiniportCheckForHangEx 函数来检查 NDIS 适配器的操作状态,该适配器表示网络接口卡 (NIC) 。 MiniportCheckForHangEx 检查适配器的内部状态,如果检测到适配器无法正常运行,则返回 TRUE

默认情况下,NDIS 大约每 2 秒调用 一次 MiniportCheckForHangEx 。 如果 MiniportCheckForHangEx 返回 TRUE,NDIS 将调用 NDIS 微型端口驱动程序的 MiniportResetEx 函数。 如果默认超时值 2 秒太小,微型端口驱动程序可以在初始化时设置不同的值,如下所示:

  1. NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 结构的 CheckForHangTimeInSeconds 成员设置为非零值。
  2. NdisMSetMiniportAttributes 函数的 MiniportAttributes 参数中传递 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 结构。

有关设置驱动程序属性的详细信息,请参阅 初始化适配器CheckForHangTimeInSeconds 的值应大于微型端口驱动程序的初始化时间。 但是,如果驱动程序初始化所花费的时间超过 CheckForHangTimeInSeconds 秒 ,则此超时将过期,导致 NDIS 调用驱动程序的 MiniportCheckForHangEx 函数。 如果 MiniportCheckForHangEx 返回 TRUE,则 NDIS 将调用驱动程序的 MiniportResetEx 函数。 因此,应将驱动程序的 MiniportCheckForHangEx 函数与驱动程序初始化同步,以便在驱动程序尚未完成初始化时 ,MiniportCheckForHangEx 不会返回 TRUE

如果微型端口驱动程序在对 MiniportCheckForHangEx 的连续两次调用中未完成 OID 请求,则 NDIS 可以调用驱动程序的 MiniportResetEx 函数。 对于某些 OID 请求,如果驱动程序在对 MiniportCheckForHangEx 的连续四次调用中未完成请求,则 NDIS 会调用 MiniportResetEx

重置操作不会影响 微型端口适配器的操作状态。 此外,重置操作正在进行时,适配器的状态可能会更改。 例如,当正在进行重置操作时,NDIS 可能会调用驱动程序的 MiniportPause 函数。 在这种情况下,驱动程序可以按任何顺序完成重置或暂停操作,同时遵循每个操作的正常要求。

对于重置操作,驱动程序可能会使传输请求数据包失败,也可以让数据包保持排队并稍后完成。 但是,应注意,在传输数据包挂起时,过分的驱动程序无法完成暂停操作。

微型端口驱动程序可以通过返回成功或失败状态同步完成重置请求。 驱动程序可以通过返回 NDIS_STATUS_PENDING异步完成重置请求。 在这种情况下,驱动程序必须调用 NdisMResetComplete 才能完成操作。

NDIS 6.83 及更高版本中的检查挂起和重置操作

在 NDIS 6.83 之前的版本中,由于电池使用时间问题,不建议对 Always On、Always Connected (AOAC) 系统执行检查挂起 (CFH) 和重置操作。 但是,驱动程序仍可以通过实现可选的 MiniportCheckForHangExMiniportResetEx 回调函数在其他非 AOAC Windows 系统上使用 CFH。

从 NDIS 6.83 开始,不建议 在所有 Windows 系统上使用这些回调函数,而不考虑电源功能。 尽管在 NDIS 6.83 及更高版本中使用 CFH 不是徽标测试冲突,但 NDIS 驱动程序应使用下表来获取有关其用法的指导。

调用方 建议 说明
面向 AOAC 系统的驱动程序 不得实现 由于定期检查挂起活动而导致电池使用时间问题
面向 Windows Server 系统的驱动程序 不得实现 CPU 压力大时导致问题
虚拟 (仅限软件) 微型端口驱动程序 不得实现 没有硬件就无法重置
其他新的 NDIS 6.83 及更高版本的驱动程序 不应实现
其他现有的 NDIS 6.82 和更早代码 不需要更改,但应考虑在将来的返工中删除“挂起检查”和“重置”

微型端口驱动程序硬件重置

微型端口驱动程序重置和停止函数