Share via


Enviando solicitações de E/S para um destino de E/S geral no UMDF

Aviso

O UMDF 2 é a versão mais recente do UMDF e substitui o UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum novo recurso está sendo adicionado ao UMDF 1 e há suporte limitado para UMDF 1 em versões mais recentes do Windows 10. Drivers universais do Windows devem usar UMDF 2.

Os exemplos umdf 1 arquivados podem ser encontrados no Windows 11, versão 22H2 – Atualização de exemplos de driver de maio de 2022.

Para obter mais informações, consulte Introdução com UMDF.

Um driver UMDF pode enviar solicitações de E/S para destinos gerais de E/S de forma síncrona ou assíncrona.

Se um driver enviar solicitações de E/S de forma síncrona, um thread de driver enviará as solicitações uma de cada vez. O thread aguarda a conclusão de cada solicitação antes de enviar a próxima. Esse processo é mais simples do que enviar as solicitações de E/S de forma assíncrona. O driver poderá enviar solicitações de E/S de forma síncrona se não enviar muitas solicitações e se o desempenho do sistema ou do dispositivo não for reduzido enquanto o driver aguarda cada solicitação de E/S.

Se um driver enviar solicitações de E/S de forma assíncrona, um thread de driver enviará cada solicitação assim que a solicitação estiver pronta para ser enviada, sem aguardar a conclusão das solicitações enviadas anteriormente. Se o driver precisar lidar com muitas solicitações de E/S em curtos períodos de tempo, o driver provavelmente não poderá aguardar a conclusão de cada solicitação antes de enviar a próxima solicitação. Caso contrário, o driver pode perder dados ou o desempenho de seus dispositivos e, possivelmente, de todo o sistema pode ser reduzido.

Antes que um driver UMDF possa enviar uma solicitação de E/S para um destino de E/S, o driver deve formatar a solicitação. A tabela a seguir lista os métodos que o driver pode chamar para formatar solicitações de E/S. O driver pode usar esses métodos para formatar uma solicitação que o driver recebeu em uma de suas filas de E/S ou que o driver criou.

Método Finalidade

IWDFIoRequest::FormatUsingCurrentType

Formata uma solicitação que o driver recebeu da estrutura para que o driver possa enviar a solicitação, não modificada, para o destino

IWDFIoTarget::FormatRequestForIoctl

Formata uma solicitação de controle de dispositivo

IWDFIoTarget::FormatRequestForRead

Formata uma solicitação de leitura

IWDFIoTarget::FormatRequestForWrite

Formata uma solicitação de gravação

IWDFIoTarget2::FormatRequestForFlush

Formata uma solicitação para liberar buffers.

IWDFIoTarget2::FormatRequestForQueryInformation

Formata uma solicitação para obter informações de arquivo.

IWDFIoTarget2::FormatRequestForSetInformation

Formata uma solicitação para definir informações de arquivo.

Para enviar a solicitação de E/S para o destino de E/S, o driver chama o método IWDFIoRequest::Send . Para enviar a solicitação de E/S de forma síncrona, o driver passa o sinalizador WDF_REQUEST_SEND_OPTION_SYNCHRONOUS para o parâmetro Flags . Caso contrário, o driver envia a solicitação de E/S de forma assíncrona. Se o driver enviar a solicitação de E/S de forma assíncrona, o driver normalmente exigirá notificação quando outro driver concluir a solicitação. O driver deve definir uma função de retorno de chamada IRequestCallbackRequestCompletion::OnCompletion e registrá-la chamando o método IWDFIoRequest::SetCompletionCallback . Para obter mais informações, consulte Concluindo solicitações de E/S.

Um driver que chama IWDFIoRequest::Send para enviar uma solicitação de E/S pode tentar cancelar a solicitação mais tarde chamando o método IWDFIoRequest::CancelSentRequest . Se o driver cancelar uma solicitação de E/S que o driver recebeu da estrutura, o driver sempre deverá concluir a solicitação chamando o método IWDFIoRequest::Complete ou IWDFIoRequest::CompleteWithInformation com o parâmetro CompletionStatus definido como STATUS_CANCELLED. Se o driver criou o objeto de solicitação, o driver chama IWDFObject::D eleteWdfObject em vez de concluir a solicitação.