微型端口适配器挂起检查和重置操作
概述
警告
对于所有 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 秒太小,微型端口驱动程序可以在初始化时设置不同的值,如下所示:
- 将 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 结构的 CheckForHangTimeInSeconds 成员设置为非零值。
- 在 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) 和重置操作。 但是,驱动程序仍可以通过实现可选的 MiniportCheckForHangEx 和 MiniportResetEx 回调函数在其他非 AOAC Windows 系统上使用 CFH。
从 NDIS 6.83 开始,不建议 在所有 Windows 系统上使用这些回调函数,而不考虑电源功能。 尽管在 NDIS 6.83 及更高版本中使用 CFH 不是徽标测试冲突,但 NDIS 驱动程序应使用下表来获取有关其用法的指导。
调用方 | 建议 | 说明 |
---|---|---|
面向 AOAC 系统的驱动程序 | 不得实现 | 由于定期检查挂起活动而导致电池使用时间问题 |
面向 Windows Server 系统的驱动程序 | 不得实现 | CPU 压力大时导致问题 |
虚拟 (仅限软件) 微型端口驱动程序 | 不得实现 | 没有硬件就无法重置 |
其他新的 NDIS 6.83 及更高版本的驱动程序 | 不应实现 | |
其他现有的 NDIS 6.82 和更早代码 | 不需要更改,但应考虑在将来的返工中删除“挂起检查”和“重置” |