Отмена передачи данных в Windows Vista
Важно!
Эта статья содержит сведения, применимые к устаревшим операционным системам Windows.
В Windows Vista существует новый интерфейс IWiaTransfer (описанный в документации по Windows SDK), который приложения используют для выполнения потоковой передачи данных. Этот интерфейс, в дополнение к новым методам передачи, содержит метод Cancel , который приложение может использовать для отмены передачи данных, включая передачу нескольких элементов. С помощью этого метода можно асинхронно отменить передачу данных. Мы рекомендуем использовать эту процедуру для отмены передачи данных. Однако приложение Windows Vista также может возвращать S_FALSE из своей процедуры обратного вызова, чтобы отменить передачу.
Таким образом, приложение WIA в Windows Vista может отменить передачу двумя способами:
Возвращает S_FALSE из процедуры обратного вызова.
Вызовите IWiaTransfer::Cancel.
Драйвер Windows Vista может быть уведомлен двумя различными способами о том, что приложение отменило передачу:
Драйвер получает вызов IWiaMiniDrv::d rvNotifyPnPEvent с событием WIA_EVENT_CANCEL_IO. Рекомендуется, чтобы все операции чтения и записи в режиме ядра использовали перекрывающийся ввод-вывод. Только с помощью этой процедуры можно гарантировать немедленную отмену.
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.