Compartilhar via


Alterações de energia e estado no AVStream

Quando o AVStream recebe uma solicitação IRP_MN_SET_POWER , ele chama a rotina de retorno de chamada AVStrMiniDeviceSetPower de um minidriver, se o minidriver tiver fornecido um.

Quando o AVStream recebe uma solicitação definida da propriedade KSPROPERTY_CONNECTION_STATE , ele chama a rotina de retorno de chamada AVStrMiniPinSetDeviceState de um minidriver, se o minidriver tiver fornecido um.

Quando o sistema é ativado de um estado de suspensão, o AVStream pode chamar as rotinas de retorno de chamada AVStrMiniPinSetDeviceState e AVStrMiniDeviceSetPower de um minidriver no inverso da ordem esperada. Por exemplo, AVStrMiniPinSetDeviceState pode ser chamado antes deAVStrMiniDeviceSetPower.

Como resultado, o driver deve estar preparado para lidar com essa reversão da ordem de retorno de chamada esperada.

Essa reversão não acontece quando o sistema é desligado em um estado de suspensão. Ao desligar, essas duas rotinas de retorno de chamada sempre ocorrem na ordem esperada. Por exemplo, AVStrMiniPinSetDeviceState é sempre chamado antes de AVStrMiniDeviceSetPower.

Se essa reversão ocorrer, toda a sequência terá esta aparência:

Primeiro, ocorre a sequência de desligar:

  1. AVStrMiniPinSetDeviceState é chamado com uma solicitação para alterar o estado do dispositivo de KSSTATE_RUN para KSSTATE_PAUSE.

  2. AVStrMiniDeviceSetPower é chamado com uma solicitação para alterar o estado de energia de D0 para D2/D3.

  3. Neste ponto, o sistema está em estado de suspensão.

  4. Em seguida, ocorre a sequência de ligar/ligar/desliga:

  5. AVStrMiniDeviceSetPower é chamado com uma solicitação para alterar o estado de energia de D2/D3 para D0.

  6. AVStrMiniPinSetDeviceState é chamado com uma solicitação para alterar o estado do dispositivo de KSSTATE_PAUSE para KSSTATE_RUN.

Nesse cenário, as etapas 5 e 6 são as etapas invertidas da ordem esperada.

Além disso, quando um aplicativo está transmitindo e o sistema inicia uma sequência de desligar, um grafo de captura em execução é sempre colocado em um estado de pausa. Se o grafo já tiver sido interrompido, ele permanecerá parado.