Implementando iPowerNotify
Se os objetos de miniporto do driver (consulte Interfaces de objeto de miniporto de áudio) ou objetos de fluxo (consulte Interfaces de objeto de fluxo de áudio) precisarem saber sobre alterações de estado de energia, eles poderão dar suporte à interface IPowerNotify em seus métodos QueryInterface e receber notificação do driver do sistema PortCls sempre que ocorrer uma alteração de energia.
Quando o estado de energia é alterado, PortCls chama o método IPowerNotify::P owerChangeNotify para notificar individualmente cada um dos objetos de miniporto e fluxo que dão suporte à interface IPowerNotify . Durante a chamada PowerChangeNotify , um objeto miniport deve armazenar em cache o novo estado de energia do dispositivo. Durante a chamada CAdapterCommon::Init (por exemplo, consulte a implementação no adaptador de exemplo Msvad no Microsoft Windows Driver Kit [WDK]), o driver de miniport deve definir seu estado de energia armazenado em cache como o valor inicial PowerDeviceD0.
Antes de chamar PowerChangeState para desligar, PortCls chama IPowerNotify::P owerChangeNotify para dar ao driver de miniporto a oportunidade de salvar qualquer contexto de dispositivo necessário. Esse contexto pode incluir os valores de registro de hardware que incorporam a topologia de filtro atual e as configurações de linha de mixer, por exemplo. Depois de chamar PowerChangeState para ligar, PortCls chama PowerChangeNotify para que o driver de miniporte possa restaurar o contexto salvo.
Ao desligar, PortCls pausa todos os fluxos de dados de áudio ativos antes de chamar PowerChangeNotify. Ao ligar, PortCls chama PowerChangeNotify antes de reiniciar os fluxos de dados de áudio pausados.
As classes de objeto miniport e stream do driver de miniport podem herdar da interface IPowerNotify e dar suporte a essa interface em seu método NonDelegatingQueryInterface . Você pode usar a definição de IMP_IPowerNotify do arquivo de cabeçalho Portcls.h para adicionar a declaração de função para o método PowerChangeNotify à definição de classe para os objetos de miniporto e fluxo do driver.