Compartir a través de


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 nuevos controladores UMDF deben escribirse mediante 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 a 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 al interfaz de 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 WDF_REQUEST_SEND_OPTIONS_FLAGSmarcas con tipo.

[in] Timeout

La 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

Enviar 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 método Send intento 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.

Observaciones

Si Enviar devuelve un código de error, el controlador normalmente debe completar la solicitud con el código de error que Enviar devuelto, como se muestra en el código de 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, Enviar devuelve después de que el destino de E/S complete 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 Enviar con la marca WDF_REQUEST_SEND_OPTION_SYNCHRONOUS establecida.

Si el controlador no establece la marca de WDF_REQUEST_SEND_OPTION_SYNCHRONOUS y si Enviar envía correctamente la solicitud de E/S al destino de E/S, Enviar 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 un IRequestCallbackRequestCompletion::OnCompletion función de devolución de llamada 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 Enviar sin la marca WDF_REQUEST_SEND_OPTION_SYNCHRONOUS.

Un controlador no puede llamar a Enviar 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 Valor
fin del soporte técnico No disponible en UMDF 2.0 y versiones posteriores.
de la plataforma de destino de Escritorio
versión mínima de UMDF 1.5
encabezado de wudfddi.h (incluya Wudfddi.h)
DLL de WUDFx.dll

Consulte también

IRequestCallbackRequestCompletion::OnCompletion

IWDFIoRequest

IWDFIoRequest::GetCompletionParams

IWDFIoTarget

WDF_REQUEST_SEND_OPTIONS_FLAGS (UMDF)