Compartilhar via


Método IWDFIoRequest::Send (wudfddi.h)

[Aviso: UMDF 2 é a versão mais recente do UMDF e substitui 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. Para obter mais informações, consulte Introdução com UMDF.]

O método Send envia uma solicitação para o destino de E/S especificado.

Sintaxe

HRESULT Send(
  [in] IWDFIoTarget *pIoTarget,
  [in] ULONG        Flags,
  [in] LONGLONG     Timeout
);

Parâmetros

[in] pIoTarget

Um ponteiro para a interface IWDFIoTarget para o objeto de destino de E/S, que normalmente representa um driver inferior na pilha.

[in] Flags

Um OR bit a bit válido de sinalizadores do tipo WDF_REQUEST_SEND_OPTIONS_FLAGS.

[in] Timeout

A quantidade de tempo, em unidades de tempo do sistema (intervalos de 100 nanossegundos), que pode decorrer antes que a estrutura cancele automaticamente a solicitação de E/S.

  • Se o valor for negativo, o tempo de expiração será relativo à hora atual do sistema.
  • Se o valor for positivo, o tempo de expiração será especificado como uma hora absoluta (que é relativa a 1º de janeiro de 1601).
  • Se o valor for zero, a estrutura não atingiu o tempo limite da solicitação.
Os tempos de expiração relativos não são afetados por nenhuma alteração na hora do sistema que possa ocorrer dentro do período de tempo limite especificado. Os tempos de expiração absolutos refletem as alterações de tempo do sistema.

Retornar valor

Enviar retornará S_OK se a operação for bem-sucedida. Caso contrário, esse método retornará um dos códigos de erro definidos em Winerror.h.

Observe que o valor retornado representa o status da tentativa do método Send de enviar a solicitação de E/S para o destino de E/S. O valor retornado não representa o status de conclusão da solicitação de E/S. O driver deve usar a interface IWDFRequestCompletionParams para obter a status de conclusão da solicitação de E/S.

Comentários

Se Send retornar um código de erro, o driver normalmente deverá concluir a solicitação com o código de erro retornado por Send , como mostra o código na seção Exemplo a seguir.

Se o driver definir o sinalizador WDF_REQUEST_SEND_OPTION_SYNCHRONOUS no parâmetro Flags e, se Enviar enviar com êxito enviar a solicitação de E/S para o destino de E/S, Enviar retornará após o destino de E/S concluir a solicitação de E/S. Nesse caso, Send retorna S_OK e o driver pode chamar imediatamente IWDFIoRequest::GetCompletionParams para obter a interface IWDFRequestCompletionParams . O exemplo de código em IWDFIoRequest::GetCompletionParams mostra uma chamada para Enviar com o sinalizador WDF_REQUEST_SEND_OPTION_SYNCHRONOUS definido.

Se o driver não definir o sinalizador WDF_REQUEST_SEND_OPTION_SYNCHRONOUS e, se Enviar enviar com êxito enviar a solicitação de E/S para o destino de E/S, Enviar retornará S_OK enquanto o destino de E/S ainda estiver processando a solicitação de E/S de forma assíncrona. Nesse caso, o driver fornece uma função de retorno de chamada IRequestCallbackRequestCompletion::OnCompletion que a estrutura chama depois que o destino de E/S conclui a solicitação de E/S. Normalmente, a função de retorno de chamada OnCompletion chama IWDFIoRequest::GetCompletionParams. O exemplo de código na seção Exemplo a seguir mostra uma chamada para Enviar sem o sinalizador WDF_REQUEST_SEND_OPTION_SYNCHRONOUS.

Um driver não poderá chamar Enviar para enviar uma solicitação de E/S para um pipe USB, se o driver tiver configurado um leitor contínuo para o pipe.

Exemplos

O exemplo de código a seguir encaminha uma solicitação para o destino de E/S de um dispositivo.

    IWDFIoRequest* FxRequest;

    //
    // Set the completion callback.
    // When the lower request is completed, the driver is 
    // notified through the completion callback. 
    //

    IRequestCallbackRequestCompletion *completionCallback = 
        QueryIRequestCallbackRequestCompletion();
 
    FxRequest->SetCompletionCallback(
                                     completionCallback,
                                     NULL  //pContext
                                     );

    completionCallback->Release();
 
    //
    // Format the I/O request.  
 
    FxRequest->FormatUsingCurrentType( );

    //
    // Send down the request.
    //
    HRESULT hrSend = S_OK;
 
    hrSend = FxRequest->Send(
                             m_FxIoTarget,
                             0, // Asynchronous
                             0  // No time-out
                             );
 
    if (S_OK != hrSend) {
        //
        // If the send failed, the driver must complete the 
        // request with the failure.
        FxRequest->CompleteWithInformation(hrSend, 0);
    }

Requisitos

Requisito Valor
Fim do suporte Indisponível no UMDF 2.0 e posterior.
Plataforma de Destino Área de Trabalho
Versão mínima do UMDF 1.5
Cabeçalho wudfddi.h (include Wudfddi.h)
DLL WUDFx.dll

Confira também

IRequestCallbackRequestCompletion::OnCompletion

IWDFIoRequest

IWDFIoRequest::GetCompletionParams

IWDFIoTarget

WDF_REQUEST_SEND_OPTIONS_FLAGS (UMDF)