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