다음을 통해 공유


WIA 오류 처리 아키텍처

WIA 오류 처리 아키텍처는 세 부분으로 구성됩니다. 운영 체제, 드라이버 및 애플리케이션. 오류 처리 메커니즘은 스트림 기반 데이터 전송에 의존합니다. 이 전송 모델은 Windows Vista 이상 운영 체제에서 사용할 수 있습니다. 이 새로운 오류 처리 방법론을 지원하려면 WIA 드라이버를 작성하여 이 전송 모델을 사용해야 합니다. 마찬가지로 이 새로운 오류 처리 아키텍처에 참여할 수 있도록 스트림 기반 전송 모델을 지원하기 위해 애플리케이션을 작성해야 합니다.

WIA 오류 처리는 시스템 제공, IHV 제공 및 ISV 제공 구성 요소로 구성됩니다. 다음 다이어그램에서는 각 구성 요소의 공급자를 보여 줍니다.

wia 오류 처리 구성 요소를 보여 주는 다이어그램

애플리케이션 오류 처리기, 드라이버 오류 처리기 및 기본 오류 처리기의 세 가지 가능한 오류 처리기가 있습니다. 이러한 세 가지 오류 처리기는 다음 다이어그램에 표시됩니다.

3개의 wia 오류 처리기를 보여 주는 다이어그램

또한 WIA 프록시 콜백에서 이러한 세 가지 오류 처리기를 시도하는 계층 구조도 보여 줍니다.

대부분의 측면에서 이러한 처리기는 동일합니다. 그러나 몇 가지 차이점이 있습니다. 애플리케이션 오류 처리기는 IWiaAppErrorHandler 인터페이스를 구현하는 반면 드라이버 오류 전달 확장 및 기본 오류 처리기는 IWiaErrorHandler 인터페이스를 구현합니다. 애플리케이션 오류 처리기는 콜백 개체에서 구현해야 하는 IWiaTransferCallback도 사용합니다.

디바이스 상태 코드는 IWiaErrorHandler::ReportStatushrStatus 매개 변수를 사용하여 오류 처리기에 전달됩니다. 이는 IWiaTransferCallback::WiaTransferParams 메서드의 hrErrorStatus 매개 변수에 설정된 미니드라이버와 동일한 값입니다.

hrStatus 매개 변수가 SEVERITY_SUCCESS 설정된 경우 치명적이 아닌 지연을 나타냅니다. 즉, 오류 처리 UI는 단지 모덜리스 정보 대화 상자와 전송을 취소할 기회를 제공해야 합니다. 다음에 오류 처리기가 다른 hrStatus 값(오류 처리기가 이 메시지를 지원하는지 여부)을 사용하여 메시지를 수신할 때 UI를 해제해야 합니다.

참고 하나의 모덜리스 오류 처리기 대화 상자만 동시에 표시할 수 있습니다.

오류 처리기는 SEVERITY_ERROR 디바이스 상태 메시지에 대한 응답으로 모달 UI를 표시해야 합니다.

WIA 오류 처리에는 다음과 같은 네 가지 구성 요소가 있습니다.

WIA 미니드라이버
이제 미니드라이버에서 Windows Vista의 새로운 WIA_TRANSFER_MSG_DEVICE_STATUS 디바이스 상태 메시지를 사용하여 디바이스 수준에서 문제가 발생했음을 나타낼 수 있습니다. 드라이버가 이 메시지를 보낼 때 IWiaTransferCallback::WiaTransferParams 메서드의 hrErrorStatus(및 lPercentComplete) 매개 변수도 설정해야 합니다. 상태 코드는 오류 또는 정보일 수 있습니다. 오류 상태 코드의 경우 오류를 복구할 수 있도록 오류에서 복구하려면 사용자 개입이 필요합니다. 드라이버는 hrErrorStatus 를 미리 정의된 WIA HRESULT 값(예: WIA_STATUS_WARMING_UP)으로 설정하거나 자체 사용자 지정 HRESULT를 만들 수 있습니다.

애플리케이션 오류 처리기
애플리케이션에서 오류 처리를 사용하도록 설정하려면 IWiaAppErrorHandler 인터페이스를 구현해야 합니다. 이 인터페이스는 IWiaTransfer::D ownload 및 IWiaTransfer::Upload 메서드에 전달된 애플리케이션의 콜백 개체에 의해 구현됩니다. 이 콜백 개체는 IWiaTransferCallback 인터페이스를 구현하는 데 필요합니다. IWiaAppErrorHandler를 구현하면 애플리케이션은 데이터 전송 중에 오류 처리기를 호출할 수 있음을 나타냅니다.

드라이버의 오류 처리기
드라이버의 오류 처리기는 IWiaErrorHandler 인터페이스를 구현해야 하는 드라이버 확장입니다. 오류 처리기는 모든 상태 코드에 대한 UI를 처리하고 표시할 수 있습니다. 이러한 상태 코드에는 WIA 정의 상태 코드뿐만 아니라 드라이버와 관련된 상태 코드도 포함됩니다.

기본 오류 처리기
기본 오류 처리기는 WIA에서 구현됩니다. 여러 일반 디바이스 상태 메시지에 대한 UI를 처리하고 표시합니다. 이러한 메시지는 정보 및 오류(예: WIA_ERROR_PAPER_JAM 및 WIA_STATUS_WARMING_UP)일 수 있습니다.

WIA 프록시는 오류 메시지 자체를 처리하지 않습니다. 대신 WIA 프록시는 오류 처리기에게 디바이스 상태 메시지를 처리할 수 있는 기회를 제공합니다.

오류 처리기는 사용자가 데이터 전송을 계속하거나 취소할 수 있는 상태로 시스템을 배치할 수 있는 UI를 제공합니다.

WIA_TRANSFER_MSG_DEVICE_STATUS 메시지를 받을 때 WIA 프록시는 먼저 애플리케이션 오류 처리기의 IWiaAppErrorHandler::ReportStatus 메서드를 호출합니다. 애플리케이션 콜백 루틴이 디바이스 상태 코드를 처리하지 않는 경우 WIA 프록시는 드라이버 오류 처리기의 IWiaErrorHandler::ReportStatus 구현을 호출하고, 마지막으로 WIA 프록시는 기본 오류 처리기의 IWiaErrorHandler::ReportStatus 구현을 호출합니다. 지정된 처리기가 존재하지 않거나(예: 드라이버에 오류 처리 확장이 제공되지 않을 수 있음) 드라이버의 디바이스 상태 처리기가 WIA_STATUS_NOT_HANDLED 반환하는 경우 드라이버의 처리기가 디바이스 코드를 지원하지 않음을 나타내는 경우 체인의 다음 처리기에 기회가 제공됩니다. 디바이스 상태 메시지가 처리되면 성공적으로 또는 실패하면 WIA 프록시 콜백이 반환됩니다. 따라서 드라이버 오류 처리기의 ReportStatus 메서드가 모든 메시지에 대해 S_OK 반환하는 경우 기본 오류 처리기는 디바이스 상태 메시지를 처리할 기회를 얻지 않습니다.

오류 처리기가 SEVERITY_ERROR(오류 메시지)가 있는 디바이스 상태 메시지를 지원하지 않는 경우 WIA 프록시는 상태 오류를 드라이버에 다시 반환하여 전송을 중지해야 합니다. 드라이버는 IWiaMiniDrv::d rvAcquireItemData 에서 이 HRESULT 값을 반환해야 하며 애플리케이션은 IWiaTransfer::D ownload 또는 IWiaTransfer::Upload에서 이 HRESULT를 받습니다.

오류 처리기가 SEVERITY_SUCCESS(정보 메시지)를 사용하여 디바이스 상태 메시지를 처리하지 않으면 WIA 프록시는 드라이버에 S_OK 반환합니다.

참고 애플리케이션의 콜백 루틴인 IWiaTransferCallback::TransferCallbacklMessage 가 WIA_TRANSFER_MSG_DEVICE_STATUS 설정된 메시지를 받지 않습니다. 대신 이러한 메시지가 오류 처리기로 전송됩니다.

IWiaTransferCallback, IWiaAppErrorHandlerIWiaTransfer 인터페이스는 Microsoft Windows SDK 설명서에 설명되어 있습니다.