Manipuladores de solicitação

Se o driver tiver especificado o método de expedição sequencial ou paralelo para uma fila de E/S, a estrutura chamará uma função de retorno de chamada fornecida pelo driver sempre que estiver pronta para entregar uma das solicitações da fila ao driver.

Para cada fila de E/S, o driver pode fornecer uma ou mais das seguintes funções de retorno de chamada, que são chamadas de manipuladores de solicitação:

EvtIoRead
A estrutura chama a função de retorno de chamada EvtIoRead de uma fila de E/S quando uma solicitação de leitura está disponível na fila.

EvtIoWrite
A estrutura chama a função de retorno de chamada EvtIoWrite de uma fila de E/S quando uma solicitação de gravação está disponível na fila.

EvtIoDeviceControl
A estrutura chama a função de retorno de chamada EvtIoDeviceControl de uma fila de E/S quando uma solicitação de controle de E/S do dispositivo está disponível na fila.

EvtIoInternalDeviceControl
A estrutura chama a função de retorno de chamada EvtIoInternalDeviceControl de uma fila de E/S quando uma solicitação de controle de E/S interna do dispositivo está disponível na fila.

EvtIoDefault
A estrutura chama a função de retorno de chamada EvtIoDefault de uma fila de E/S quando qualquer solicitação está disponível, se o driver não tiver fornecido a função de retorno de chamada específica do tipo de solicitação associada.

O driver registra funções de retorno de chamada quando chama WdfIoQueueCreate para criar uma fila de E/S para um dispositivo.

Cada uma dessas funções de retorno de chamada recebe dois argumentos de entrada: um identificador para a solicitação de E/S que a estrutura está entregando ao driver e um identificador para a fila de E/S que manteve a solicitação. Uma função de retorno de chamada pode determinar o dispositivo de destino chamando WdfIoQueueGetDevice.

A estrutura chama os manipuladores de solicitação do driver em um contexto de thread arbitrário. Um driver não deve esperar por um longo período de tempo durante a execução em um contexto de thread arbitrário. Em alguns casos, seu driver pode usar objetos dispatcher de kernel como mecanismos de sincronização. Para obter informações sobre quando o driver pode esperar por objetos dispatcher e o que fazer quando não puder, consulte Introdução aos Objetos do Dispatcher do Kernel.