Gerenciamento de energia para filas de E/S

Quando a estrutura recebe uma solicitação de E/S direcionada a um dos dispositivos do driver, a estrutura coloca a solicitação em uma fila de E/S. O driver pode obter solicitações de E/S da fila de E/S fornecendo manipuladores de solicitação ou sondando a fila. Para obter mais informações sobre filas de E/S, consulte Objetos de fila do Framework.

Ao projetar seu driver, você deve agrupar as solicitações de E/S que seu driver receberá em duas categorias:

  1. Solicitações que exigem que um dispositivo esteja em seu estado de funcionamento (D0), incluindo:

    • Solicitações de leitura ou gravação que exigem que o driver de função do dispositivo leia ou grave dados no dispositivo.
    • O controle de dispositivo solicita que uma função ou driver de barramento não possa atender sem acessar o dispositivo.
  2. Solicitações que não exigem que um dispositivo esteja em seu estado de funcionamento (D0), incluindo:

    • O controle de dispositivo solicita que uma função ou driver de barramento possa atender sem acessar o dispositivo.
    • Possivelmente todas as solicitações que um driver de filtro recebe.
    • Todas as solicitações que todos os drivers em uma pilha de driver recebem, se a pilha der suporte a um dispositivo somente de software que não se comunica com nenhum hardware.

A menos que você esteja escrevendo um driver de filtro ou um driver para uma pilha que não se comunica com o hardware, é provável que o driver receba algumas solicitações que exigem que o dispositivo esteja em seu estado de funcionamento, juntamente com algumas que não estão.

Para dar suporte a esses dois tipos de solicitações, a estrutura fornece dois tipos de filas de E/S: aquelas que são gerenciadas por energia e aquelas que não são. Quando o driver cria cada uma de suas filas de E/S, ele define o membro PowerManaged na estrutura de WDF_IO_QUEUE_CONFIG da fila como WdfTrue ou WdfFalse para indicar um dos seguintes:

  • Se o driver definir PowerManaged como WdfTrue, a fila será gerenciada 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). Portanto, sempre que o driver recebe uma solicitação de uma fila gerenciada por energia, a estrutura garante que o dispositivo esteja disponível. Se o dispositivo não estiver em seu estado de funcionamento, a estrutura armazenará solicitações na fila até que o dispositivo fique disponível.

    Se o dispositivo estiver em um estado de baixa energia porque está ocioso e se a estrutura colocar uma solicitação de E/S em uma das filas gerenciadas por energia do driver, a estrutura solicitará que a pilha de driver restaure o dispositivo ao seu estado de trabalho antes de entregar a solicitação ao driver.

    Se o dispositivo estiver em um estado de baixa energia porque o sistema não está em seu estado de trabalho (S0) e se a estrutura colocar uma solicitação de E/S em uma das filas gerenciadas por energia do driver, a estrutura aguardará até que o dispositivo retorne ao seu estado de trabalho (D0) e, em seguida, entregará a solicitação ao driver.

    Como a estrutura não entrega solicitações de E/S de uma fila gerenciada por energia para o driver se o dispositivo não estiver em seu estado de trabalho, os drivers localizados acima do proprietário da política de energia na pilha de driver não devem usar filas de E/S gerenciadas por energia. Se um driver localizado acima do proprietário da política de energia usar uma fila gerenciada por energia e se o dispositivo estiver em um estado de baixa energia, o driver não receberá a solicitação e não poderá passá-la para o proprietário da política de energia. Portanto, o proprietário da política de energia, que controla o estado de energia do dispositivo, não ativa o dispositivo.

  • Se o driver definir PowerManaged como WdfFalse, a fila não será gerenciada por energia.

    Quando as solicitações de E/S estão disponíveis em uma fila que não é gerenciada por energia, a estrutura entrega as solicitações ao driver, independentemente de o dispositivo estar em seu estado de trabalho (D0). Se você configurou sua fila para que ela receba apenas solicitações que não exigem acesso ao dispositivo, o driver poderá atender a cada solicitação, mesmo que o dispositivo não esteja disponível.

Para obter mais informações sobre filas de E/S gerenciadas por energia, consulte Usando filas de E/S gerenciadas por energia.

Alguns drivers exigem algum controle direto sobre Plug and Play (PnP) e operações de gerenciamento de energia. Esses drivers podem usar E/S autogerenciada. Para obter mais informações, consulte Usando E/S autogerenciada.