Compartir a través de


Arquitectura de control de errores de WIA

La arquitectura de control de errores de WIA se compone de tres partes. El sistema operativo, el controlador y la aplicación. El mecanismo de control de errores se basa en transferencias de datos basadas en secuencias. Este modelo de transferencia está disponible en Windows Vista y en sistemas operativos posteriores. Los controladores WIA deben escribirse para usar este modelo de transferencia si son compatibles con esta nueva metodología de control de errores. De forma similar, las aplicaciones también deben escribirse para admitir el modelo de transferencia basado en secuencias para poder participar en esta nueva arquitectura de control de errores.

El control de errores de WIA se compone de componentes suministrados por el sistema, suministrados por IHV e ISV. En el diagrama siguiente se muestra el proveedor de cada componente.

diagrama que ilustra los componentes de control de errores de wia.

Hay tres controladores de errores posibles: el controlador de errores de la aplicación, el controlador de errores del controlador y el controlador de errores predeterminado. Estos tres controladores de errores se muestran en el diagrama siguiente.

diagrama que ilustra los tres controladores de errores wia.

La imagen también muestra la jerarquía en la que se prueban estos tres controladores de errores mediante la devolución de llamada del proxy WIA.

En la mayoría de los aspectos, estos controladores son idénticos. Sin embargo, hay un par de diferencias. El controlador de errores de la aplicación implementa la interfaz IWiaAppErrorHandler , mientras que la extensión de entrega de errores del controlador y el controlador de errores predeterminado implementan la interfaz IWiaErrorHandler . El controlador de errores de la aplicación también usará IWiaTransferCallback, que se debe implementar en el objeto de devolución de llamada.

El código de estado del dispositivo se pasa a un controlador de errores con el parámetro hrStatus de IWiaErrorHandler::ReportStatus. Este es el mismo valor que el minidriver establecido en el parámetro hrErrorStatus del método IWiaTransferCallback::WiaTransferParams .

Si el parámetro hrStatus se establece en SEVERITY_SUCCESS, representa un retraso no grave. Esto significa que la interfaz de usuario de control de errores simplemente debe proporcionar un modelo, un cuadro de diálogo informativo y una posibilidad de cancelar la transferencia. La interfaz de usuario debe descartarse la próxima vez que el controlador de errores reciba un mensaje con un valor hrStatus diferente (si el controlador de errores admite este mensaje).

Nota Solo se puede mostrar un cuadro de diálogo de controlador de errores de modeless al mismo tiempo.

Un controlador de errores debe mostrar la interfaz de usuario modal en respuesta a un mensaje de estado del dispositivo de SEVERITY_ERROR.

Hay cuatro componentes implicados en el control de errores de WIA:

Minidriver WIA
El minidriver ahora puede usar el nuevo, nuevo para Windows Vista, WIA_TRANSFER_MSG_DEVICE_STATUS mensaje de estado del dispositivo para indicar que algo ha ocurrido en el nivel de dispositivo. Cuando el controlador envía este mensaje, también debe establecer el parámetro hrErrorStatus (y posiblemente también el lPercentComplete) del método IWiaTransferCallback::WiaTransferParams . El código de estado puede ser un error o informativo. En el caso de un código de estado de error, se requiere intervención del usuario para recuperarse del error, siempre que se pueda recuperar el error. Un controlador puede establecer hrErrorStatus en un valor HRESULT de WIA predefinido, como WIA_STATUS_WARMING_UP, o crear su propio HRESULT personalizado.

Controlador de errores de la aplicación
Para que una aplicación habilite el control de errores, debe implementar la interfaz IWiaAppErrorHandler . Esta interfaz se implementa mediante el objeto de devolución de llamada de la aplicación que pasó a los métodos IWiaTransfer::D ownload e IWiaTransfer::Upload . Este objeto de devolución de llamada es necesario para implementar la interfaz IWiaTransferCallback . Al implementar IWiaAppErrorHandler, una aplicación indica que permite invocar controladores de errores durante las transferencias de datos.

Controlador de errores del controlador
El controlador de errores del controlador es una extensión de controlador que debe implementar la interfaz IWiaErrorHandler. El controlador de errores puede controlar y mostrar la interfaz de usuario para cualquier código de estado; estos códigos de estado incluyen códigos de estado definidos por WIA, así como códigos de estado específicos del controlador.

Controlador de errores predeterminado
WIA implementa el controlador de errores predeterminado. Controla y muestra la interfaz de usuario para una serie de mensajes de estado de dispositivo genéricos. Estos mensajes pueden ser informativos y de error, por ejemplo: WIA_ERROR_PAPER_JAM y WIA_STATUS_WARMING_UP.

El proxy WIA no controla los propios mensajes de error. En su lugar, el proxy WIA ofrece a los controladores de errores la oportunidad de controlar un mensaje de estado del dispositivo.

El controlador de errores proporciona la interfaz de usuario que permite al usuario intentar colocar el sistema en un estado en el que se puede continuar o cancelar la transferencia de datos.

Al recibir un mensaje de WIA_TRANSFER_MSG_DEVICE_STATUS, el proxy WIA llama primero al método IWiaAppErrorHandler::ReportStatus del controlador de errores de la aplicación. Si la rutina de devolución de llamada de la aplicación no controla el código de estado del dispositivo, el proxy WIA invocará la implementación del controlador de errores IWiaErrorHandler::ReportStatus y, por último, el proxy WIA invocará la implementación de IWiaErrorHandler::ReportStatus del controlador de errores predeterminado. Si un controlador determinado no existe (por ejemplo, es posible que el controlador no venga con una extensión de control de errores) o si el controlador de estado del dispositivo del controlador devuelve WIA_STATUS_NOT_HANDLED, lo que indica que el controlador del controlador no admite el código del dispositivo, el siguiente controlador de la cadena tendrá una oportunidad. Una vez que se controla un mensaje de estado del dispositivo, ya sea correctamente o no, se devolverá la devolución de llamada del proxy WIA. Por lo tanto, si el método ReportStatus del controlador de errores devuelve S_OK para cada mensaje, el controlador de errores predeterminado nunca tendrá la oportunidad de controlar cualquiera de los mensajes de estado del dispositivo.

Si ningún controlador de errores admite un mensaje de estado del dispositivo con SEVERITY_ERROR (mensaje de error), el proxy WIA devolverá el error de estado al controlador, que a su vez debe detener la transferencia. El controlador debe devolver este valor HRESULT de IWiaMiniDrv::d rvAcquireItemData y la aplicación recibirá este HRESULT de IWiaTransfer::D ownload o IWiaTransfer::Upload.

Si ningún controlador de errores controla un mensaje de estado del dispositivo con SEVERITY_SUCCESS (mensaje informativo), el proxy WIA devolverá S_OK al controlador.

Nota La rutina de devolución de llamada de la aplicación, IWiaTransferCallback::TransferCallback, nunca recibirá un mensaje con lMessage establecido en WIA_TRANSFER_MSG_DEVICE_STATUS. En su lugar, estos mensajes se enviarán a los controladores de errores.

Las interfaces IWiaTransferCallback,IWiaAppErrorHandler e IWiaTransfer se describen en la documentación de Microsoft Windows SDK.