Compartilhar via


Enviando solicitações de E/S de forma assíncrona

Antes de enviar uma solicitação de E/S de forma assíncrona para um destino de E/S, você deve formatar a solicitação. A tabela a seguir lista os métodos de objeto de destino de E/S que o driver pode chamar para formatar solicitações de E/S.

Método Finalidade

WdfIoTargetFormatRequestForRead

Formata uma solicitação de leitura

WdfIoTargetFormatRequestForWrite

Formata uma solicitação de gravação

WdfIoTargetFormatRequestForIoctl

Formata uma solicitação de controle de dispositivo

WdfIoTargetFormatRequestForInternalIoctl

Formata uma solicitação de controle de dispositivo interno

WdfIoTargetFormatRequestForInternalIoctlOthers

Formata uma solicitação de controle de dispositivo interno não padrão

Para enviar uma solicitação de E/S de forma assíncrona, o driver deve:

  1. Formate a solicitação.

    Use um dos métodos listados na tabela anterior para formatar suas solicitações. Para obter informações detalhadas sobre como usar esses métodos, consulte as páginas de referência dos métodos.

  2. Registre uma função de retorno de chamada CompletionRoutine .

    Se você enviar solicitações de forma assíncrona, normalmente deseja que a estrutura notifique o driver quando outro driver concluir cada solicitação. Seu driver deve definir uma função de retorno de chamada CompletionRoutine e registrá-la chamando WdfRequestSetCompletionRoutine. Para obter mais informações, consulte Concluindo solicitações de E/S.

  3. Enviar a solicitação.

    Depois que o driver formatar a solicitação e registrar uma função de retorno de chamada CompletionRoutine , o driver deverá chamar WdfRequestSend. Esse método permite que você envie solicitações de forma síncrona ou assíncrona, dependendo dos sinalizadores definidos no parâmetro RequestOptions . Para obter uma maneira mais simples de enviar solicitações de E/S de forma síncrona, consulte Enviando solicitações de E/S de forma síncrona. Para obter informações sobre como obter o status de conclusão para uma solicitação assíncrona ou para qualquer solicitação enviada chamando WdfRequestSend, consulte Concluindo solicitações de E/S.

Um driver que chama WdfRequestSend para enviar uma solicitação de E/S pode tentar cancelar a solicitação mais tarde. Para obter mais informações, consulte Cancelando solicitações de E/S.

Alguns drivers podem enviar uma única solicitação de E/S para vários dispositivos e, portanto, para vários destinos de E/S, chamando WdfRequestSend mais de uma vez para cada solicitação. Esses drivers devem chamar WdfRequestChangeTarget antes de cada chamada para WdfRequestSend após a primeira para verificar se a solicitação pode ser enviada para o próximo destino de E/S.