NDIS 如何检测空闲的网络适配器
在微型端口驱动程序启用 NDIS 选择性挂起并注册其处理程序函数后,NDIS 按以下方式监视网络适配器的 I/O 活动:
NDIS 监视对微型端口驱动程序通过 NDIS_MINIPORT_DRIVER_CHARACTERISTICS 和 NDIS_MINIPORT_PNP_CHARACTERISTICS 结构注册的 I/O 处理程序函数的调用。 例如,NDIS 监视对微型端口驱动程序的 MiniportSendNetBufferLists 或 MiniportReturnNetBufferLists 的 调用,以确定驱动程序是否涉及任何数据包 I/O 活动。
NDIS 还监视过度使用协议驱动程序进行的 NdisOidRequest 和 NdisDirectOidRequest 调用。
注意 NDIS 仅监视那些对象标识符 (OID) NDIS 不直接处理的基础微型端口驱动程序的请求。
如果网络适配器在空闲超时期间未检测到适配器上的任何活动,则 NDIS 确定该网络适配器处于空闲状态。 此超时期限的持续时间由 *SSIdleTimeout 标准化 INF 关键字 (keyword) 的值指定。 有关此关键字 (keyword) 的详细信息,请参阅 NDIS 选择性挂起的标准化 INF 关键字。
网络适配器变为空闲状态后,NDIS 将启动选择性挂起操作。 通过此操作,网络适配器通过将其转换为低功耗状态将其挂起。
NDIS 通过向微型端口驱动程序发出空闲通知来开始此选择性挂起操作。 NDIS 通过调用驱动程序的 MiniportIdleNotification 处理程序函数来执行此操作。 有关微型端口驱动程序如何处理此通知的详细信息,请参阅 处理 NDIS 选择性挂起空闲通知。
如果 NDIS 检测到对网络适配器的 I/O 请求是从覆盖驱动程序发出的,或者适配器发出唤醒事件信号,则 NDIS 将取消空闲通知。 NDIS 通过调用微型端口驱动程序的 MiniportCancelIdleNotification 处理程序函数来执行此操作。
有关 NDIS 如何取消空闲通知的详细信息,请参阅 取消 NDIS 选择性挂起空闲通知。
有关微型端口驱动程序如何完成空闲通知的详细信息,请参阅 完成 NDIS 选择性挂起空闲通知。