Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Quando um driver cria uma fila de E/S, ele pode especificar se a fila é gerida por energia. Quando as solicitações de E/S estão disponíveis em uma fila gerenciada por energia, a estrutura entrega as solicitações ao driver somente se o dispositivo estiver em seu estado de trabalho (D0). A estrutura não permite que o dispositivo saia de seu estado de trabalho até que todas as solicitações de E/S que a estrutura entregou da fila de gerenciamento de energia para o driver tenham sido concluídas, canceladas ou adiadas.
Para obter mais informações sobre filas de E/S geridas por energia, consulte "Gerenciamento de energia para filas de E/S".
Funções de retorno de chamada para filas de Power-Managed
Se o driver usa filas de E/S gerenciadas por energia, ele pode fornecer duas funções adicionais de retorno de chamada:
EvtIoStop
A função de callback EvtIoStop para de processar uma solicitação de E/S especificada. Quando o dispositivo sai do seu estado de funcionamento (D0) ou é removido, a estrutura chama a função de retorno de chamada EvtIoStop da fila de E/S uma vez para cada solicitação de E/S que o driver não concluiu, incluindo solicitações que o driver possui e aquelas que ele encaminhou para um destino de E/S.
EvtIoResume
A função de retorno de chamada EvtIoResume retoma o processamento de uma solicitação de E/S anteriormente interrompida. A estrutura chama a função de retorno de chamada EvtIoResume de uma fila de E/S quando retoma a entrega de pedidos de E/S ao driver a partir da fila, após o dispositivo ter retornado ao seu estado operacional.
Sempre que a estrutura chama a função de retorno de chamada EvtIoStop do driver, a função normalmente conclui ou cancela a solicitação de E/S, ou chama WdfRequestStopAcknowledge para devolver a propriedade da solicitação à estrutura.
Embora isso seja opcional, deve-se, em geral, fornecer uma função de retorno de chamada EvtIoStop para uma fila gerida por energia. Ao fornecer EvtIoStop, o seu driver pode ajudar a encurtar o tempo que decorre antes de o seu dispositivo e, possivelmente, o sistema, entrar num estado de baixo consumo energético.
Se não fornecer o EvtIoStop para uma fila gerida por energia, o framework aguardará até que todas as solicitações entregues da fila gerida por energia ao driver sejam concluídas antes de mover o dispositivo (ou sistema) para um estado de energia mais baixo ou remover o dispositivo. Potencialmente, essa inação pode impedir que um sistema entre em seu estado de hibernação ou outro estado de baixa energia do sistema. Em casos extremos, pode fazer com que o sistema falhe com o código de erro 9F.
Se o seu driver não encaminhar solicitações para um destino de E/S e não retiver solicitações por um tempo indeterminado, poderá omitir com segurança o EvtIoStop para uma fila gerida por energia.
Aguardando objetos do Dispatcher
Em geral, os drivers só devem usar objetos dispatcher como mecanismos de sincronização dentro de um contexto de thread não arbitrário.
Como manipuladores de solicitação executam em um contexto de thread arbitrário, um manipulador de solicitação para uma fila gerida por alimentação não deve esperar que os objetos de despacho do kernel sejam definidos. Fazê-lo pode resultar num impasse.
Para obter mais informações sobre quando um driver pode esperar por objetos de despachante e o que fazer quando não puder, consulte Introdução aos Objetos de Despacho de Kernel.