Partilhar via


Manipuladores de solicitação

Se o driver tiver especificado o método de despacho sequencial ou paralelo para uma fila de E/S, o framework chamará uma função de retorno de chamada fornecida pelo driver sempre que estiver pronta para processar uma das solicitações da fila para o 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 callback EvtIoRead de uma fila de E/S quando uma solicitação de leitura está disponível na fila.

EvtIoWrite
A estrutura de uma fila de E/S chama a função de retorno de chamada EvtIoWrite 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 de dispositivo está disponível na fila.

EvtIoInternalDeviceControl
A estrutura chama a função de retorno de chamada EvtIoInternalDeviceControl de uma fila de entrada/saída quando há uma solicitação disponível de controle de entrada/saída do dispositivo interno na fila.

EvtIoDefault
A estrutura chama a função de retorno de chamada EvtIoDefault de uma fila de E/S quando uma solicitação está disponível, caso o driver não tenha fornecido a função de retorno de chamada específica para o tipo de solicitação associado.

O controlador 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 continha a solicitação. Uma função de retorno de chamada pode determinar o dispositivo de destino chamando WdfIoQueueGetDevice.

O framework chama os manipuladores de solicitação do driver num contexto de thread arbitrário. Um driver não deve aguardar por muito tempo enquanto executa num contexto de thread arbitrário. Em alguns casos, o driver pode usar objetos dispatcher do kernel como mecanismos de sincronização. Para obter informações sobre quando o driver pode esperar por objetos de dispatcher e o que fazer quando não pode, consulte Introdução aos Objetos de Dispatcher do Kernel.