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

[Advertencia: UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los controladores UMDF nuevos deben escribirse con UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2. Para obtener más información, consulta Introducción con UMDF.

El método Send envía una solicitud al destino de E/S especificado.

Sintaxis

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

Parámetros

[in] pIoTarget

Puntero a la interfaz IWDFIoTarget para el objeto de destino de E/S, que normalmente representa un controlador inferior en la pila.

[in] Flags

Or bit a bit válido de marcas con tipo WDF_REQUEST_SEND_OPTIONS_FLAGS.

[in] Timeout

Cantidad de tiempo, en unidades de tiempo del sistema (intervalos de 100 nanosegundos), que pueden transcurrir antes de que el marco cancele automáticamente la solicitud de E/S.

  • Si el valor es negativo, la hora de expiración es relativa a la hora actual del sistema.
  • Si el valor es positivo, la hora de expiración se especifica como una hora absoluta (que es relativa al 1 de enero de 1601).
  • Si el valor es cero, el marco no agota el tiempo de espera de la solicitud.
Los tiempos de expiración relativos no se ven afectados por ningún cambio en la hora del sistema que pueda producirse dentro del período de tiempo de espera especificado. Los tiempos de expiración absolutos reflejan los cambios en la hora del sistema.

Valor devuelto

Send devuelve S_OK si la operación se realiza correctamente. De lo contrario, este método devuelve uno de los códigos de error definidos en Winerror.h.

Tenga en cuenta que el valor devuelto representa el estado del intento del método Send de enviar la solicitud de E/S al destino de E/S. El valor devuelto no representa el estado de finalización de la solicitud de E/S. El controlador debe usar la interfaz IWDFRequestCompletionParams para obtener el estado de finalización de la solicitud de E/S.

Comentarios

Si Send devuelve un código de error, el controlador normalmente debe completar la solicitud con el código de error que se devuelve Send , como se muestra en la sección Ejemplo siguiente.

Si el controlador establece la marca WDF_REQUEST_SEND_OPTION_SYNCHRONOUS en el parámetro Flags y si Send envía correctamente la solicitud de E/S al destino de E/S, Send devuelve una vez que el destino de E/S completa la solicitud de E/S. En este caso, Send devuelve S_OK y el controlador puede llamar inmediatamente a IWDFIoRequest::GetCompletionParams para obtener la interfaz IWDFRequestCompletionParams . El ejemplo de código de IWDFIoRequest::GetCompletionParams muestra una llamada a Send con la marca WDF_REQUEST_SEND_OPTION_SYNCHRONOUS establecida.

Si el controlador no establece la marca de WDF_REQUEST_SEND_OPTION_SYNCHRONOUS y si Send envía correctamente la solicitud de E/S al destino de E/S, Send devuelve S_OK mientras el destino de E/S sigue procesando la solicitud de E/S de forma asincrónica. En este caso, el controlador proporciona una función de devolución de llamada IRequestCallbackRequestCompletion::OnCompletion a la que el marco llama después de que el destino de E/S complete la solicitud de E/S. Normalmente, la función de devolución de llamada OnCompletion llama a IWDFIoRequest::GetCompletionParams. En el ejemplo de código de la sección Ejemplo siguiente se muestra una llamada a Send sin la marca WDF_REQUEST_SEND_OPTION_SYNCHRONOUS.

Un controlador no puede llamar a Send para enviar una solicitud de E/S a una canalización USB, si el controlador ha configurado un lector continuo para la canalización.

Ejemplos

En el ejemplo de código siguiente se reenvía una solicitud al destino de E/S de un 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 Value
Finalización del soporte técnico No disponible en UMDF 2.0 y versiones posteriores.
Plataforma de destino Escritorio
Versión mínima de UMDF 1.5
Encabezado wudfddi.h (incluya Wudfddi.h)
Archivo DLL WUDFx.dll

Consulte también

IRequestCallbackRequestCompletion::OnCompletion

IWDFIoRequest

IWDFIoRequest::GetCompletionParams

IWDFIoTarget

WDF_REQUEST_SEND_OPTIONS_FLAGS (UMDF)