Windows Vista에서 데이터 전송 취소
Windows Vista에는 애플리케이션이 스트림 기반 데이터 전송을 수행하는 데 사용하는 새로운 인터페이스인 IWiaTransfer(Windows SDK 설명서에 설명되어 있습니다)가 있습니다. 이 인터페이스는 새 전송 방법 외에도 다중 항목 전송을 포함하여 애플리케이션이 데이터 전송을 취소하는 데 사용할 수 있는 Cancel 메서드를 포함합니다. 이 메서드를 사용하면 데이터 전송을 비동기적으로 취소할 수 있습니다. 이 절차를 사용하여 데이터 전송을 취소하는 것이 좋습니다. 그러나 Windows Vista 애플리케이션은 콜백 루틴에서 S_FALSE 반환하여 전송을 취소할 수도 있습니다.
따라서 Windows Vista의 WIA 애플리케이션에서 전송을 취소하는 방법에는 두 가지가 있습니다.
콜백 루틴에서 S_FALSE 반환합니다.
IWiaTransfer::Cancel을 호출합니다.
Windows Vista 드라이버는 애플리케이션이 전송을 취소한 두 가지 방법으로 알림을 받을 수 있습니다.
드라이버는 WIA_EVENT_CANCEL_IO 이벤트와 함께 해당 IWiaMiniDrv::d rvNotifyPnPEvent 에 대한 호출을 받습니다. 모든 커널 모드 읽기 또는 쓰기 작업은 OVERLAPPED I/O를 사용하는 것이 좋습니다. 이 절차를 통해 서만 즉시 취소를 보장할 수 있습니다.
S_FALSE 두 개의 콜백 함수인 IWiaMiniDrvTransferCallback::GetNextStream 및 IWiaMiniDrvTransferCallback::SendMessage에서 반환됩니다.
애플리케이션이 IWiaTransfer::Cancel을 호출하는 경우 IWiaMiniDrv::d rvNotifyPnPEvent 메서드를 WIA_EVENT_CANCEL_IO 드라이버에 호출해야 합니다. 또한 IWiaMiniDrvTransferCallback::GetNextStream 및 IWiaMiniDrvTransferCallback::SendMessage 콜백 함수는 전송이 취소된 후 항상 S_FALSE 반환해야 합니다.
IWiaTransferCallback::GetNextStream이 다중 항목 전송 중에 WIA_STATUS_SKIP_ITEM 반환하는 경우 애플리케이션이 현재 항목을 건너뛰고(즉, 전송하지 않음) 됩니다. S_FALSE 반환 값은 전체 전송을 취소해야 한다는 의미입니다.
IWiaTransfer 및 IWiaTransferCallback 인터페이스는 Microsoft Windows SDK 설명서에 설명되어 있습니다.