Método IAdapterPowerManagement::P owerChangeState (portcls.h)
O método PowerChangeState
solicita que o dispositivo mude para um novo estado de energia.
Sintaxe
void PowerChangeState(
[in] POWER_STATE NewState
);
Parâmetros
[in] NewState
Especifica o novo estado de energia que está sendo solicitado para o dispositivo. Esse parâmetro é uma união do tipo POWER_STATE. O novo estado de energia (NewState.DeviceState) pode ser um dos valores de enumeração DEVICE_POWER_STATE mostrados na tabela a seguir.
Estado de energia | Significado |
---|---|
PowerDeviceD0 | Estado de energia total (D0). Esse código pode ser uma função do estado de energia atual. Salve o novo estado. Esse valor local é usado para determinar quando armazenar em cache acessos de propriedade e quando permitir que o driver acesse o hardware. |
PowerDeviceD1 | O estado de suspensão com a menor latência em relação ao tempo de latência necessário para retornar a D0 |
PowerDeviceD2 | Um estado de suspensão de latência média. Nesse estado, o driver do dispositivo não pode assumir que ele pode tocar no hardware, portanto, todos os acessos precisam ser armazenados em cache e o hardware restaurado ao entrar em D0. |
PowerDeviceD3 | Um estado de hibernação completo e é o estado de sono de latência mais longo. O driver não pode acessar o hardware nesse estado e deve armazenar em cache os acessos de hardware e restaurar o hardware ao retornar para D0 ou D1 |
Valor de retorno
Nenhum
Observações
PortCls chama o método PowerChangeState
em resposta a um IRP de energia de IRP_MN_SET_POWER. Essa chamada não deve falhar. PortCls e o sistema usam a chamada PowerChangeState
para colocar o dispositivo no estado de energia desejado. Quando o sistema tenta suspender ou retomar um fluxo de áudio ativo, o driver deve ser capaz de salvar ou restaurar o contexto do dispositivo adequadamente.
Para ajudar o driver, o PortCls pausará todos os fluxos de áudio ativos antes de chamar esse método para colocar o dispositivo em um estado de suspensão. Depois de chamar esse método, o PortCls desativará os fluxos de áudio ativos para ativar o dispositivo. Os miniportos podem optar por uma notificação adicional utilizando a interface de IPowerNotify.
O driver de miniporto deve executar a alteração solicitada no estado de energia do dispositivo antes de retornar da chamada PowerChangeState
. Se o driver de miniporto precisar salvar ou restaurar qualquer estado do dispositivo antes de uma alteração de estado de energia, o driver de miniporto deverá dar suporte à interface IPowerNotify, o que permite que ele receba aviso prévio de qualquer alteração desse tipo. Antes de retornar de uma chamada de PowerChangeState
bem-sucedida, o driver de miniporto deve armazenar em cache o novo estado de energia.
Embora o driver de miniporte esteja em um dos estados de suspensão (qualquer estado diferente do PowerDeviceD0), ele deve evitar gravar no hardware. O driver de miniporto deve armazenar em cache todos os acessos de hardware que precisam ser adiados até que o dispositivo seja habilitado novamente. Se o estado de energia estiver mudando de um dos estados de suspensão para o PowerDeviceD0, o driver de miniporto deverá executar quaisquer acessos de hardware adiados depois de ter ligado o dispositivo. Se o estado de energia estiver mudando do PowerDeviceD0 para um estado de suspensão, o driver de miniporto poderá executar todos os acessos de hardware necessários durante a chamada PowerChangeState
antes de habilitar o dispositivo.
Enquanto desligado, um driver de miniporto nunca é solicitado a criar um objeto de driver de miniporto ou objeto de fluxo. O PortCls sempre coloca o dispositivo no estado PowerDeviceD0 antes de chamar o método newstream do driver do miniport.
O código para esse método deve residir na memória paginada.
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Universal |
cabeçalho | portcls.h (inclua Portcls.h) |