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

概述

警告

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

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

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

  1. 结构结构的 CheckFor一NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES InSeconds成员设置为 非零值。
  2. NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTESNdisMSetMiniportAttributes 函数的 MiniportAttributes 参数中传递。

有关设置驱动程序属性的信息,请参阅 初始化适配器CheckFor一个TimeInSeconds 的值应大于微型端口驱动程序的初始化时间。 但是,如果驱动程序的初始化时间长 于 CheckForCheckTimeInSeconds 秒,则此超时将过期,从而导致 NDIS 调用驱动程序 的 MiniportCheckForCheckCheckEx 函数。 如果 MiniportCheckForCheckCheckEx 返回 TRUE,则 NDIS 将调用驱动程序 的 MiniportResetEx 函数。 出于此原因,应同步驱动程序 的 MiniportCheckFor使用驱动程序 初始化功能,使 MiniportCheckFor使用Ex 在驱动程序尚未完成初始化时不会返回 TRUE

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

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

对于重置操作,驱动程序可能会传输请求数据包失败,也可以将其保留为排队状态,稍后再完成。 但是,应该注意,过度传输的驱动程序在其传输数据包挂起时无法完成暂停操作。

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

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

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

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

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

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

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