AVCSTRM_READ
Код функции AVCSTRM_READ используется для отправки буфера данныхavcstrm.sys , заполненного данными из указанного потока.
Блок состояния ввода-вывода
В случае успешного выполнения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_READ в аргументе Request макроса.
AVCStreamContext
Указывает контекст потока (дескриптор), возвращаемый предыдущим вызовом AVCSTRM_OPEN , который является источником данных для операции чтения.
BufferStruct
Указывает буфер, в который должна размещаться операция чтения.
Драйвер подсоединения должен сначала выделить IRP и структуру AVC_STREAM_REQUEST_BLOCK .
Затем он должен использовать макрос INIT_AVCSTRM_HEADER для инициализации структуры AVC_STREAM_REQUEST_BLOCK, передав AVCSTRM_READ в качестве аргумента Request в макрос.
Затем драйвер подсоединения задает для элемента AVCStreamContext контекст (дескриптор) потока, предоставляющего считываемые данные. Наконец, драйвер subunit задает член BufferStruct объединения CommandData , который описывает буфер, в который операция чтения помещает данные.
Чтобы отправить этот запрос, подсеть отправляет IRP_MJ_INTERNAL_DEVICE_CONTROL IRP с элементом IoControlCode IRP, равным IOCTL_AVCSTRM_CLASS , а член Argument1 IRP — в AVC_STREAM_REQUEST_BLOCK структуре, описывающей операцию чтения.
Эта команда выполняется асинхронно. По завершении вызывается подпрограмма завершения ввода-вывода, заданная в IRP.
Этот код функции должен вызываться в IRQL = PASSIVE_LEVEL.
Комментарии
Эта функция использует элемент BufferStruct объединения CommandData в структуре AVC_STREAM_REQUEST_BLOCK, как показано ниже.
typedef struct _AVC_STREAM_REQUEST_BLOCK {
ULONG SizeOfThisBlock;
ULONG Version;
AVCSTRM_FUNCTION Function;
.
.
PVOID AVCStreamContext;
.
.
union _tagCommandData {
.
.
AVCSTRM_BUFFER_STRUCT BufferStruct;
.
.
} CommandData;
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;
Требования
Заголовки: Объявлено в avcstrm.h. Включите avcstrm.h.