AVCSTRM_CLOSE
Код функции AVCSTRM_CLOSE закрывает указанный поток и освобождает все ресурсы, выделенные в AVCSTRM_OPEN.
Блок состояния ввода-вывода
В случае успеха 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_CLOSE в аргументе Request макроса.
AVCStreamContext
Указывает контекст потока (дескриптор) закрываемого потока. Если AVCSTRM_CLOSE возвращается успешно, это значение больше не является допустимым.
Ниже приведен пример указания закрываемого потока.
pAVCStrmReq = &pStrmExt->AVCStrmReq;
RtlZeroMemory(pAVCStrmReq, sizeof(AVC_STREAM_REQUEST_BLOCK));
INIT_AVCSTRM_HEADER(pAVCStrmReq, AVCSTRM_CLOSE);
pAVCStrmReq->AVCStreamContext = pStrmExt->AVCStreamContext;
Status =
AVCStrmReqSubmitIrpSynch (
pDevExt->pBusDeviceObject,
pStrmExt->pIrpReq,
pAVCStrmReq
);
Драйвер подсоединения должен сначала выделить IRP и структуру AVC_STREAM_REQUEST_BLOCK .
Затем он должен использовать макрос INIT_AVCSTRM_HEADER для инициализации структуры AVC_STREAM_REQUEST_BLOCK, передав AVCSTRM_CLOSE в качестве аргумента Request в макрос.
Затем драйвер подсоединия задает для элемента AVCStreamContext закрываемый поток.
Чтобы отправить этот запрос, подсоединительная единица отправляет IRP_MJ_INTERNAL_DEVICE_CONTROL IRP с элементом IoControlCode IRP, который имеет значение IOCTL_AVCSTRM_CLASS , а член Argument1 набора IRP — в структуру AVC_STREAM_REQUEST_BLOCK, описывающую операцию закрытия.
Драйвер подсоединия может ожидать, что эта команда будет выполняться синхронно. Результат возвращается немедленно без ожидающих операций в avcstrm.sys.
Этот код функции должен вызываться по адресу IRQL = PASSIVE_LEVEL.
Комментарии
Эта функция использует элемент AVCStreamContext объединения 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.