小型端口适配器检测挂起和重置操作

概述

警告

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

NDIS 调用 NDIS 微型端口驱动程序的 MiniportCheckForHangEx 函数来检查表示网络接口卡(NIC)的 NDIS 适配器的作状态。 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 及更高版本中检查挂起情况和重置操作

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

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

呼叫者 建议 注释
面向 AOAC 系统的驱动程序 禁止实施 由于定期检测挂起进程而导致电池使用时间问题
面向 Windows Server 系统的驱动程序 不得实现 在 CPU 受到压力时导致问题
虚拟(仅限软件)微型端口驱动程序 不得实现 在没有硬件的情况下无法重置
其他新的 NDIS 6.83 及更高版本的驱动程序 不应实现
其他现有 NDIS 6.82 及更早代码 不需要更改,但应考虑在未来的重新设计中移除 Check-for-Hang 和 Reset

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

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