实现 IPowerNotify

如果驱动程序的微型端口对象(请参阅音频微型端口对象接口)或流对象(请参阅音频流对象接口)需要了解电源状态更改,则可以在 QueryInterface 方法中支持 IPowerNotify 接口,并在每次发生电源更改时接收来自 PortCls 系统驱动程序的通知。

电源状态发生更改时,PortCls 会调用 IPowerNotify::PowerChangeNotify 方法,以单独通知支持 IPowerNotify 接口的每个微型端口和流对象。 在 PowerChangeNotify 调用期间,微型端口对象应缓存新的设备电源状态。 在 CAdapterCommon::Init 调用时(例如,在 Microsoft Windows 驱动程序工具包 [WDK] 中查看 Msvad 示例适配器中的实现),微型端口驱动程序应将其缓存的电源状态设置为初始值 PowerDeviceD0。

在调用 PowerChangeState 关闭电源之前,PortCls 会调用 IPowerNotify::PowerChangeNotify,以便微型端口驱动程序有机会保存任何必要的设备上下文。 例如,此上下文可能包含硬件寄存器值,这些值体现了当前筛选器拓扑和混音器线设置。 调用 PowerChangeState 以打开电源后,PortCls 会调用 PowerChangeNotify,以便微型端口驱动程序可以还原保存的上下文。

关闭电源时,PortCls 会在调用 PowerChangeNotify 之前暂停任何活动音频数据流。 通电时,PortCls 会在重启所有已暂停的音频数据流之前调用 PowerChangeNotify

微型端口驱动程序的微型端口和流对象类可以从 IPowerNotify 接口继承,并在其 NonDelegatingQueryInterface 方法中支持此接口。 可以使用头文件 Portcls.h 中的 IMP_IPowerNotify 定义将 PowerChangeNotify 方法的函数声明添加到驱动程序微型端口和流对象的类定义。