支持多组件设备呈现单个或多个功能性电源状态

[仅适用于 KMDF]

多组件设备的 KMDF 驱动程序可以为每个组件定义一个或多个功能电源状态。

在这种情况下,驱动程序直接注册到电源管理框架 (PoFx) 。 若要指定 WDF 不应注册到 PoFx,驱动程序调用 WdfDeviceAssignS0IdleSettings,并将 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 结构的 IdleTimeoutType 成员设置为 DriverManagedIdleTimeout。 通常,驱动程序从其 EvtDriverDeviceAdd 回调函数调用此方法。

接下来,驱动程序必须注册到 PoFx。 为此,驱动程序调用 PoFxRegisterDevice ,然后 调用 PoFxStartDevicePowerManagement。 首次启动设备时,驱动程序只能向 PoFx 注册一次。 执行此操作的一种方法是从驱动程序提供的 EvtDeviceSelfManagedIoInit 函数调用这些例程。 EvtDeviceSelfManagedIoInit 仅在首次启动设备时调用。

删除设备后,驱动程序必须调用 PoFxUnregisterDevice 才能从 PoFx 注销设备。 若要仅注销一次,建议驱动程序从驱动程序提供的 EvtDeviceSelfManagedIoFlush 函数调用此例程。 仅在删除设备时调用 EvtDeviceSelfManagedIoFlush。 通过在 EvtDeviceSelfManagedIoFlush 中注销,驱动程序在睡眠和重新平衡转换期间保留电源注册,并且不必为在这些转换期间保持挂起的 I/O 请求的电源引用。

当驱动程序调用 PoFxRegisterDevice 时,它会收到一个电源注册句柄 (POHANDLE) ,该句柄可用于直接与 PoFx 交互,如以下主题中所述:

此外,驱动程序可以直接调用 电源框架例程 来发送电源控制请求,并指定延迟、驻留和唤醒要求。

有关 PoFx 的详细信息,请参阅 Power Management Framework 概述