windows网络适配器驱动开发-配置 NetAdapterCx 电源管理(上) 所有 NetAdapterCx 客户端驱动程序都是 Windows 驱动程序框架WDF驱动程序其电源管理功能类似于所有 WDF 驱动程序。 如本文所述NetAdapterCx 驱动程序需要其他特定于网络的电源配置。典型的网络设备支持三种常见的电源管理功能当 OS 指示时网络设备可以进入较低功率Dx状态。客户端驱动程序注册可选的 WDF 事件回调以接收电源转换通知如 功能驱动程序中的支持 PnP 和电源管理中所述。如果网络设备可以在系统保持工作状态S0状态时进入其 Dx 状态则客户端驱动程序应支持空闲关闭电源。 请参阅 支持空闲电源关闭。 除了所有 WDF 设备可用的 设备空闲和唤醒行为的标准用户控制 之外NetAdapterCx 还允许通过 *IdleRestriction 进行其他特定于网络的空闲控制如 Power Management 的标准化 INF 关键字中定义。当网络设备处于 Dx 状态时如果发生预配置的唤醒条件它可以触发唤醒信号。WDF 设备可以从系统范围的低功率状态唤醒系统NetAdapterCx 为客户端驱动程序提供 API用于声明其硬件对其硬件具有唤醒支持的网络事件当网络设备处于 Dx 状态时它仍然可以响应一些常用的网络请求以保持主机系统在网络上的存在而无需唤醒主机系统。 请参阅 设置网络适配器的电源功能。设置网络适配器的电源功能配置 WDF 电源管理功能后下一步是设置网络适配器的电源功能。 电源功能分为两类低功率协议卸载功能和唤醒功能。低功率协议卸载功能客户端驱动程序通过调用适用于其硬件的以下方法来设置其低功率协议卸载功能NetAdapterPowerOffloadSetArpCapabilitiesNetAdapterPowerOffloadSetNSCapabilities唤醒功能客户端驱动程序调用以下任一方法以设置设备处于低功率状态时其硬件支持的唤醒功能DxNetAdapterWakeSetBitmapCapabilitiesNetAdapterWakeSetMagicPacketCapabilitiesNetAdapterWakeSetMediaChangeCapabilitiesNetAdapterWakeSetPacketFilterCapabilities能耗和恢复延迟当网络设备位于 Dx 中时它仍使用电源执行卸载和臂唤醒。 设备从 Dx 启动唤醒后设备再次传输数据包之前存在延迟。 设备在 Dx 中消耗的功率越深但恢复延迟越长。下表介绍了有关每次唤醒功能的电源消耗与恢复延迟之间的权衡的一般准则。唤醒功能唤醒事件功耗恢复延迟PacketFilter配置了 ReceivePacketFilter 的任何数据包匹配应小于 D0 中的时间并且设备需要保持适当的状态以便恢复延迟非常小 10 毫秒位图任何数据包匹配配置的位图模式应低于对 PacketFilter 进行武装时因为它在恢复延迟方面具有更多的纬度 300 毫秒MagicPacketMagic 数据包类似于位图 300 毫秒MediaChange已连接或断开连接的媒体类似于位图 300 毫秒一些信息与预发行的产品有关在商业发布之前可能会进行大幅修改。 Microsoft对提供的信息不作任何明示或暗示的保证。以下示例演示客户端驱动程序如何初始化其电源功能。 它在启动 net adapter 的同时执行此作但在调用 NetAdapterStart 之前。 在此示例中客户端驱动程序设置其位图、媒体更改和数据包筛选器唤醒功能。// // Set bitmap wake capabilities // NET_ADAPTER_WAKE_BITMAP_CAPABILITIES bitmapCapabilities; NET_ADAPTER_WAKE_BITMAP_CAPABILITIES_INIT(bitmapCapabilities); bitmapCapabilities.BitmapPattern TRUE; bitmapCapabilities.MaximumPatternCount deviceContext-PowerFiltersSupported; bitmapCapabilities.MaximumPatternSize 256; NetAdapterWakeSetBitmapCapabilities(Adapter, bitmapCapabilities); // // Set media change wake capabilities // NET_ADAPTER_WAKE_MEDIA_CHANGE_CAPABILITIES mediaChangeCapabilities; NET_ADAPTER_WAKE_MEDIA_CHANGE_CAPABILITIES_INIT(mediaChangeCapabilities); mediaChangeCapabilities.MediaConnect TRUE; mediaChangeCapabilities.MediaDisconnect TRUE; NetAdapterWakeSetMediaChangeCapabilities(Adapter, mediaChangeCapabilities); // // Set packet filter wake capabilities // if(deviceContext-SelectiveSuspendSupported) { NET_ADAPTER_WAKE_PACKET_FILTER_CAPABILITIES packetFilterCapabilities; NET_ADAPTER_WAKE_PACKET_FILTER_CAPABILITIES_INIT(packetFilterCapabilities); packetFilterCapabilities.PacketFilterMatch TRUE; NetAdapterWakeSetPacketFilterCapabilities(Adapter, packetFilterCapabilities); }客户端可以选择注册 EVT_NET_DEVICE_PREVIEW_POWER_OFFLOAD 和 EVT_NET_DEVICE_PREVIEW_WAKE_SOURCE 回调函数以接受或拒绝传入协议卸载和唤醒模式。