Método IUsbTargetPipeContinuousReaderCallbackReadComplete::OnReaderCompletion (wudfusb.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.

La función de devolución de llamada de eventos OnReaderCompletion de un controlador informa al controlador de que un lector continuo ha completado correctamente una solicitud de lectura.

Sintaxis

void OnReaderCompletion(
  [in] IWDFUsbTargetPipe *pPipe,
  [in] IWDFMemory        *pMemory,
  [in] SIZE_T            NumBytesTransferred,
  [in] PVOID             Context
);

Parámetros

[in] pPipe

Puntero a la interfaz IWDFUsbTargetPipe para la canalización USB en la que el controlador ha habilitado un lector continuo.

[in] pMemory

Puntero a la interfaz IWDFMemory para un búfer de lectura que contiene datos leídos desde la canalización USB.

[in] NumBytesTransferred

Número de bytes que contiene el búfer de lectura.

[in] Context

Puntero a la información de contexto proporcionada por el controlador que el controlador proporcionó cuando se llamaba anteriormente IWDFUsbTargetPipe2::ConfigureContinuousReader.

Valor devuelto

None

Observaciones

Para registrar una función de devolución de llamada IUsbTargetPipeContinuousReaderCallbackReadComplete::OnReaderCompletion , el controlador debe proporcionar un puntero a la interfaz IUsbTargetPipeContinuousReaderCallbackReadComplete cuando llama a IWDFUsbTargetPipe2::ConfigureContinuousReader.

Si un controlador ha creado un lector continuo para una canalización USB, el marco llama a la función de devolución de llamada OnReaderCompletion del controlador cada vez que el destino de E/S del controlador completa correctamente una solicitud de lectura. Si el destino de E/S no completa correctamente una solicitud, el marco llama a la función de devolución de llamada IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure .

Para acceder al búfer que contiene datos leídos desde el dispositivo, el controlador puede llamar a IWDFMemory::GetDataBuffer. El marco escribe los datos en el búfer, después del encabezado definido por el parámetro HeaderLength de IWDFUsbTargetPipe2::ConfigureContinuousReader. Tenga en cuenta que el puntero que IWDFMemory::GetDataBuffer devuelve apunta al principio del encabezado, pero el parámetro NumBytesTransferred de la función de devolución de llamada de OnReaderCompletion no incluye la longitud del encabezado.

De forma predeterminada, el marco elimina el objeto de memoria del búfer después de que se devuelva la función de devolución de llamada OnReaderCompletion . Sin embargo, es posible que desee que el objeto de memoria permanezca válido después de que se devuelva la función de devolución de llamada. Por ejemplo, es posible que desee que el controlador almacene el puntero de interfaz del objeto de memoria en el espacio de contexto del objeto de canalización de marco para que el controlador pueda procesar el contenido del objeto de memoria después de que se devuelva la función de devolución de llamada. Para extender la duración del objeto de memoria, la función de devolución de llamada debe llamar al método IWDFMemory::AddRef del búfer. Posteriormente, el controlador debe llamar al método IWDFMemory::Release del búfer para que el marco pueda eliminar el objeto.

El marco sincroniza las llamadas a las funciones de devolución de llamada OnReaderCompletion e IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure según las reglas siguientes:

  • Estas funciones de devolución de llamada no se ejecutan simultáneamente para una canalización USB individual.
  • Si el controlador crea varios lectores continuos para varias canalizaciones USB, con varias funciones de devolución de llamada OnReaderCompletion y OnReaderFailure , las múltiples funciones de devolución de llamada se pueden ejecutar simultáneamente.
  • Si el controlador ha especificado el valor predeterminado NumPendingReads cuando llama a IWDFUsbTargetPipe2::ConfigureContinuousReader (o si especifica cualquier valor NumPendingReads mayor que 1) y si se completa una solicitud de lectura mientras se ejecuta la función de devolución de llamada OnReaderCompletion , el marco puede llamar a la función de devolución de llamada OnReaderCompletion de nuevo antes de que se devuelva la función de devolución de llamada.
  • El marco de trabajo no sincroniza estas funciones de devolución de llamada con ninguna otra función de devolución de llamada.
Cuando el controlador llama a IWDFUsbTargetPipe2::ConfigureContinuousReader, puede especificar una función de devolución de llamada IObjectCleanup::OnCleanup . El marco llamará a esa función de devolución de llamada cuando intente eliminar el objeto de memoria, después de que se devuelva la función de devolución de llamada OnReaderCompletion .

Para obtener más información sobre la función de devolución de llamada OnReaderCompletion y los destinos de E/S USB, consulte Control de un destino de E/S USB.

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,9
Encabezado wudfusb.h (incluya Wudfusb.h)

Consulte también

IUsbTargetPipeContinuousReaderCallbackReadComplete

IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure