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:
AVStrMiniPinSetDeviceState é chamado com uma solicitação para alterar o estado do dispositivo de KSSTATE_RUN para KSSTATE_PAUSE.
AVStrMiniDeviceSetPower é chamado com uma solicitação para alterar o estado de energia de D0 para D2/D3.
Neste ponto, o sistema está em estado de suspensão.
Em seguida, ocorre a sequência de ligar/ligar/desliga:
AVStrMiniDeviceSetPower é chamado com uma solicitação para alterar o estado de energia de D2/D3 para D0.
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.