Реализация IAdapterPowerManagement
При реализации интерфейса IAdapterPowerManagement для драйвера обратитесь к реализации класса CAdapterCommon в примерах аудиодрайверов в комплекте драйверов Microsoft Windows (WDK). Этот класс обрабатывает прерывания устройства и выполняет другие функции, общие для всех драйверов аудиоадаптера. Класс CAdapterCommon адаптера должен наследовать от интерфейса IAdapterPowerManagement и поддерживать этот интерфейс в методе NonDelegatingQueryInterface . (Дополнительные сведения об неделегирующих интерфейсах см. в описании интерфейса INonDelegatingUnknown .)
Определение IMP_IAdapterPowerManagement из файла заголовка Portcls.h можно использовать для добавления объявлений функций для методов IAdapterPowerManagement::P owerChangeState, IAdapterPowerManagement::QueryPowerChangeState и IAdapterPowerManagement::QueryDeviceCapabilities в определение класса CAdapterCommon драйвера.
Во время вызова системного драйвера PortCls к процедуре запуска устройства адаптера (см. раздел Запуск устройства) адаптер должен зарегистрировать интерфейс IAdapterPowerManagement с помощью PortCls, вызвав PcRegisterAdapterPowerManagement. Пример кода см. в разделе Функция StartDevice в примере драйвера Sysvad, который рассматривается в разделе Примеры аудиодрайверов. Первый параметр функции PcRegisterAdapterPowerManagement является указателем IUnknown на объект CAdapterCommon драйвера адаптера. PortCls запрашивает у этого объекта интерфейс IAdapterPowerManagement .
Когда PortCls вызывает метод IAdapterPowerManagement::P owerChangeStateState драйвера адаптера для изменения состояния питания устройства, драйвер адаптера должен кэшировать новое состояние питания устройства в объекте CAdapterCommon адаптера. Во время вызова CAdapterCommon::Init (см. реализацию в примере драйверов адаптера WDK) драйвер должен установить начальное состояние питания PowerDeviceD0 (описано в DeviceState) перед возвращением после успешной инициализации. Драйвер должен выполнять запись на оборудование только в том случае, если известно, что он находится в соответствующем состоянии питания.
Перед выключением питания в ответ на вызов PowerChangeState драйвер адаптера должен поместить аудиовыходы в состояние, предотвращающее шум динамиков при выключении питания. Например, процесс завершения работы может включать в себя обнуление выходных данных приложения уровня данных, отключение dacs и отключение звука линий MIDI.