Share via


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 da Estrutura.

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

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

    • Solicitações de leitura ou gravação que exigem que o driver de funções do dispositivo leia ou escreva 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 trabalho (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 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 hardware, é provável que o driver receba algumas solicitações que exigem que o dispositivo esteja em seu estado de trabalho, juntamente com algumas que não o fazem.

Para dar suporte a esses dois tipos de solicitações, a estrutura fornece dois tipos de filas de E/S: aquelas 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 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 trabalho, a estrutura armazenará solicitações na fila até que o dispositivo fique disponível.

    Se o dispositivo estiver em um estado de baixa potência porque ele 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 para seu estado de trabalho antes de entregar a solicitação ao driver.

    Se o dispositivo estiver em um estado de baixa potência 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 estado de trabalho (D0) e entregue a solicitação ao driver.

    Como a estrutura não fornece 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 dapolítica de energiana 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 potência, 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 fornece 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, seu 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 de Power-Managed.

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 Self-Managed E/S.