Поделиться через


Реализация IPowerNotify

Если объектам miniport вашего драйвера (см. раздел Audio Miniport Object Interfaces) или объектам потоковой передачи (см. раздел Интерфейсы объектов аудиопотока) необходимо знать об изменениях состояния питания, они могут поддерживать интерфейс IPowerNotify в методах QueryInterface и получать уведомления от системного драйвера PortCls при каждом изменении питания.

При изменении состояния питания PortCls вызывает метод IPowerNotify::P owerChangeNotify , чтобы по отдельности уведомлять каждый из объектов miniport и stream, поддерживающих интерфейс IPowerNotify . Во время вызова PowerChangeNotify объект miniport должен кэшировать новое состояние питания устройства. Во время вызова CAdapterCommon::Init (например, см. реализацию в примере адаптера Msvad в комплекте драйверов Microsoft Windows [WDK]) драйвер мини-порта должен установить для кэшированного состояния питания начальное значение PowerDeviceD0.

Перед выключением powerChangeState PortCls вызывает IPowerNotify::P owerChangeNotify , чтобы предоставить драйверу мини-порта возможность сохранить любой необходимый контекст устройства. Этот контекст может включать значения регистра оборудования, которые, например, воплощают текущую топологию фильтра и параметры линии микшера. После вызова PowerChangeState для включения питания PortCls вызывает PowerChangeNotify , чтобы драйвер мини-порта смог восстановить сохраненный контекст.

При выключении portCls приостанавливает все активные потоки звуковых данных перед вызовом PowerChangeNotify. При выключении portCls вызывает PowerChangeNotify перед перезапуском приостановленных потоков аудиоданных.

Классы объектов miniport и stream драйвера минипорта могут наследовать от интерфейса IPowerNotify и поддерживать этот интерфейс в методе NonDelegatingQueryInterface . Вы можете использовать определение IMP_IPowerNotify из файла заголовка Portcls.h, чтобы добавить объявление функции для метода PowerChangeNotify в определение класса для объектов miniport и stream драйвера.