EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL função de retorno de chamada (wdfio.h)
[Aplica-se a KMDF e UMDF]
A função de retorno de chamada de evento EvtIoDeviceControl do driver processa uma solicitação de controle de E/S do dispositivo especificada.
Sintaxe
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtWdfIoQueueIoDeviceControl;
void EvtWdfIoQueueIoDeviceControl(
[in] WDFQUEUE Queue,
[in] WDFREQUEST Request,
[in] size_t OutputBufferLength,
[in] size_t InputBufferLength,
[in] ULONG IoControlCode
)
{...}
Parâmetros
[in] Queue
Um identificador para o objeto de fila da estrutura associado à solicitação de E/S.
[in] Request
Um identificador para um objeto de solicitação de estrutura.
[in] OutputBufferLength
O comprimento, em bytes, do buffer de saída da solicitação, se um buffer de saída estiver disponível.
[in] InputBufferLength
O comprimento, em bytes, do buffer de entrada da solicitação, se um buffer de entrada estiver disponível.
[in] IoControlCode
O IOCTL (código de controle de E/S) definido pelo driver ou definido pelo sistema associado à solicitação.
Valor de retorno
Nenhum
Observações
Um driver registra uma função de retorno de chamada EvtIoDeviceControl quando chama WdfIoQueueCreate. Para obter mais informações sobre como chamar WdfIoQueueCreate, consulte Criando filas de E/S.
Se um driver tiver registrado uma função de retorno de chamada EvtIoDeviceControl para a fila de E/S de um dispositivo, a função de retorno de chamada receberá todas as solicitações de controle de E/S (IRP_MJ_DEVICE_CONTROL) da fila. Para obter mais informações, consulte Manipuladores de Solicitações.
A função de retorno de chamada EvtIoDeviceControl deve processar cada solicitação de E/S recebida de alguma maneira. Para obter mais informações, consulte processamento de solicitações de E/S.
Os drivers recebem solicitações de controle de E/S quando um aplicativo de usuário chama DeviceIoControl (descrito na documentação do SDK do Microsoft Windows) ou quando outro driver cria uma solicitação chamando WdfIoTargetSendIoctlSynchronously ou WdfIoTargetFormatRequestForIoctl.
O tipo de operação a ser executada depende do valor do parâmetro IoControlCode. Você deve determinar o conjunto de IoControlCode valores que aplicativos e outros drivers podem enviar para o driver. Para obter mais informações sobre IOCTLs, consulte Usando códigos de controle de E/S.
A maioria das operações de controle de E/S do dispositivo exige um buffer de entrada, um buffer de saída ou ambos. Para obter informações sobre como o driver pode acessar os buffers de uma solicitação, consulte Acessando buffers de dados em Framework-Based Drivers.
As técnicas que o driver pode usar para acessar os buffers de entrada e saída da solicitação (se existirem) dependem do campo TransferType do IOCTL. O valor do campo TransferType do IOCTL pode ser METHOD_BUFFERED, METHOD_DIRECT_IN, METHOD_DIRECT_OUT ou METHOD_NEITHER. Para obter mais informações sobre o campo TransferType, consulte Definindo códigos de controle de E/S.
A função de retorno de chamada EvtIoDeviceControl pode ser chamada em IRQL <= DISPATCH_LEVEL, a menos que o ExecutionLevel membro da estrutura de WDF_OBJECT_ATTRIBUTES do dispositivo ou do driver esteja definido como WdfExecutionLevelPassive.
Se o IRQL for PASSIVE_LEVEL, a estrutura chamará a função de retorno de chamada em uma região crítica .
Para obter mais informações sobre os níveis de IRQL para manipuladores de solicitação, consulte Usandode Sincronização Automática.
A função de retorno de chamada EvtIoDeviceControl de um driver não deve chamar os seguintes métodos de objeto de fila:
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Universal |
versão mínima do KMDF | 1.0 |
versão mínima do UMDF | 2.0 |
cabeçalho | wdfio.h (inclua Wdf.h) |
IRQL | <= DISPATCH_LEVEL (consulte a seção Comentários) |