Partilhar via


Criação de filas de E/S

Os objetos de fila do Framework representam filas de E/S, que são contêineres para as solicitações de E/S que um driver recebe. Cada driver pode criar uma ou mais filas de E/S para cada dispositivo. O objeto de fila do framework define um conjunto de funções de retorno de chamada de evento que o driver pode fornecer e um conjunto de métodos de objeto que o driver pode chamar.

Quando a estrutura recebe uma solicitação de E/S direcionada para um dos dispositivos do driver, a estrutura coloca a solicitação na fila de E/S apropriada. Se o driver registrar um ou mais manipuladores de solicitação, a estrutura poderá notificá-lo sempre que uma solicitação de E/S estiver disponível. Como alternativa, o seu controlador pode pesquisar a fila de E/S em busca de solicitações.

A maioria dos drivers cria filas de E/S em sua função de retorno de chamada EvtDriverDeviceAdd . Para criar uma fila de E/S para um dispositivo, o driver chama o método WdfIoQueueCreate do objeto de fila de estrutura (que cria um objeto de fila de estrutura). O motorista fornece uma estrutura WDF_IO_QUEUE_CONFIG para o método. Essa estrutura contém informações de configuração sobre a fila, como o método de despacho da fila e ponteiros para manipuladores de solicitação que a estrutura chama quando as solicitações estão disponíveis na fila. A estrutura também indica se a fila será gerenciada por energia e se o driver suporta buffers de comprimento zero para as solicitações de E/S da fila.

Se o driver definir o membro DefaultQueue da estrutura WDF_IO_QUEUE_CONFIG como TRUE, a fila se tornará a fila de E/S padrão do dispositivo. Se o driver criar uma fila de E/S padrão, a estrutura colocará todas as solicitações de E/S do dispositivo nessa fila, a menos que você crie filas adicionais para receber algumas das solicitações. Um driver pode obter um identificador para a fila de E/S padrão de um dispositivo chamando o método WdfDeviceGetDefaultQueue .

Se você quiser usar mais de uma fila de E/S para um dispositivo, o driver pode chamar WdfIoQueueCreate para criar quantos objetos de fila forem necessários. Se um driver criar várias filas, ele poderá chamar WdfDeviceConfigureRequestDispatching, que instrui a estrutura a direcionar diferentes tipos de solicitações para filas diferentes. Por exemplo, você pode especificar que todas as solicitações de leitura serão entregues em uma fila e todas as solicitações de gravação serão entregues em outra fila.

Se o driver criar um conjunto de filas de E/S e chamar WdfDeviceConfigureRequestDispatching para direcionar cada tipo de solicitação que o driver pode receber para uma fila específica, o driver não precisará de uma fila padrão.

Se um driver não fornecer uma fila de E/S para solicitações de um tipo específico e se o driver for um driver de função, a estrutura concluirá solicitações desse tipo com um valor de status de conclusão de STATUS_INVALID_DEVICE_REQUEST. Se o driver for um driver de filtro e tiver chamado WdfFdoInitSetFilter, a estrutura encaminhará automaticamente essas solicitações para o driver imediatamente abaixo na pilha de drivers. Assim, por exemplo, um driver de filtro que não processa solicitações de leitura não precisa fornecer uma fila de E/S que receba solicitações de leitura.

Para obter exemplos de como os drivers podem usar filas de E/S, consulte Exemplos de usos de filas de E/S.