Поделиться через


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.

См. также:

INIT_AVCSTRM_HEADER

IRP_MJ_INTERNAL_DEVICE_CONTROL

IOCTL_AVCSTRM_CLASS

AVCSTRM_FUNCTION