AVCSTRM_ABORT_STREAMING
Код функции AVCSTRM_ABORT_STREAMING отменяет все ожидающие запросы данных и освобождает используемые ресурсы.
Блок состояния ввода-вывода
В случае успеха avcstrm.sys присваивает Irp-IoStatus.Status> значение STATUS_SUCCESS.
Возможные возвращаемые значения ошибок:
Состояние ошибки | Описание |
---|---|
STATUS_DEVICE_REMOVED | Устройство, соответствующее операции AVCSTRM_READ , больше не существует. |
STATUS_CANCELLED | Не удалось выполнить запрос. |
STATUS_INVALID_PARAMETER | Параметр, указанный в IRP, является неправильным. |
STATUS_INSUFFICIENT_RESOURCES | Недостаточно системных ресурсов для выполнения запроса. |
STATUS_PENDING | Запрос получен, но требует дальнейшей обработки. Подпрограмма завершения ввода-вывода будет обрабатывать окончательный ответ. |
Входные данные AVC_STREAM_REQUEST_BLOCK
SizeOfThisBlock, версия и функция
Используйте макрос INIT_AVCSTRM_HEADER для инициализации этих элементов. Передайте AVCSTRM_ABORT_STREAMING в аргументе Request макроса.
AVCStreamContext
Указывает контекст потока (дескриптор), возвращаемый предыдущим вызовом AVCSTRM_OPEN , который является целевым объектом для операции записи данных.
Драйвер подсоединения должен сначала выделить IRP и структуру AVC_STREAM_REQUEST_BLOCK .
Затем он должен использовать макрос INIT_AVCSTRM_HEADER для инициализации структуры AVC_STREAM_REQUEST_BLOCK, передав AVCSTRM_READ в качестве аргумента Request в макрос.
Затем драйвер подсоединения задает член AVCStreamContext в контекст (дескриптор) потока, чтобы прервать потоковую передачу.
Чтобы отправить этот запрос, подсоединение отправляет IRP_MJ_INTERNAL_DEVICE_CONTROL IRP с элементом IoControlCode IRP, заданным для IOCTL_AVCSTRM_CLASS , а член Argument1 набора IRP — в структуру AVC_STREAM_REQUEST_BLOCK, описывающую операцию прерывания потоковой передачи.
Этот код функции должен вызываться при PASSIVE_LEVEL. При отмене IRP данных его можно выполнить в DISPATCH_LEVEL. В этом случае подсоединение должно запустить рабочий элемент и вызвать эту функцию в своей подпрограмме рабочего элемента, которая выполняется на PASSIVE_LEVEL.
Комментарии
Обратите внимание, что эта функция отменяет все потоковые irP. Чтобы отменить отдельный IRP, используйте IoCancelIrp.
Вложенная единица должна вызывать эту функцию при удалении целевого устройства или отмене исходного IRP данных для остановки потоковой операции.
Эта функция не использует член объединения CommandData в структуре AVC_STREAM_REQUEST_BLOCK.
typedef struct _AVC_STREAM_REQUEST_BLOCK {
ULONG SizeOfThisBlock;
ULONG Version;
AVCSTRM_FUNCTION Function;
.
.
PVOID AVCStreamContext;
.
.
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;
Требования
Заголовки: Объявлен в avcstrm.h. Включите avcstrm.h.