Отмена передачи данных в Windows Vista
Это важно
В этой статье содержатся сведения, применимые к устаревшим операционным системам Windows.
В Windows Vista существует новый интерфейс, IWiaTransfer (который описан в документации по пакету SDK для Windows), который приложения используют для передачи данных на основе потоков. Этот интерфейс, в дополнение к новым методам передачи данных, содержит метод отмены, который приложение может использовать для отмены передачи данных, включая передачу нескольких элементов. С помощью этого метода можно асинхронно отменить передачу данных. Мы рекомендуем использовать эту процедуру для отмены передачи данных. Однако приложение Windows Vista также может возвращать S_FALSE из своей процедуры обратного вызова для отмены передачи.
Таким образом, для приложения WIA в Windows Vista можно отменить передачу двумя способами:
Верните S_FALSE из процедуры обратного вызова.
Вызов IWiaTransfer::Cancel.
Драйвер Windows Vista можно уведомить двумя разными способами, что приложение отменило передачу:
Драйвер получает вызов IWiaMiniDrv::drvNotifyPnPEvent с событием WIA_EVENT_CANCEL_IO. Мы рекомендуем, чтобы все операции чтения или записи в режиме ядра осуществлялись с использованием ввода-вывода OVERLAPPED. Только с помощью этой процедуры можно гарантировать немедленную отмену.
S_FALSE возвращается из двух функций обратного вызова: IWiaMiniDrvTransferCallback::GetNextStream и IWiaMiniDrvTransferCallback::SendMessage.
Когда приложение вызывает IWiaTransfer::Cancel, метод IWiaMiniDrv::drvNotifyPnPEvent должен вызываться драйвером с WIA_EVENT_CANCEL_IO. Кроме того, функции обратного вызова IWiaMiniDrvTransferCallback::GetNextStream и IWiaMiniDrvTransferCallback::SendMessage должны всегда возвращать S_FALSE после отмены передачи.
Если IWiaTransferCallback::GetNextStream возвращает WIA_STATUS_SKIP_ITEM в процессе передачи нескольких элементов, приложение пропускает (то есть не передает) текущий элемент. Возвращаемое значение S_FALSE по-прежнему означает, что весь перенос должен быть отменен.
Интерфейсы IWiaTransfer и IWiaTransferCallback описаны в документации SDK для Microsoft Windows.