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