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.
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