IOCTL_AVC_CLASS IOCTL (avc.h)
Код элемента управления IOCTL_AVC_CLASS ввода-вывода поддерживается только в режиме ядра с использованием диспетчеризации IRP_MJ_INTERNAL_DEVICE_CONTROL.
Avc.sys поддерживает два интерфейса устройства в зависимости от типа экземпляра (одноранговый или виртуальный). Эти интерфейсы определяют функциональные возможности, предоставляемые драйвером для драйверов подсоединений, других драйверов и приложений. Во время инициализации avc.sys вызывает IoRegisterDeviceInterface с GUID_AVC_CLASS (одноранговый или невиртуальный экземпляр) или GUID_VIRTUAL_AVC_CLASS (виртуальный экземпляр), а затем использует IoSetDeviceInterfaceState в соответствии с запущенным или остановленным состоянием драйвера.
Одноранговые экземпляры avc.sys регистрируют интерфейс устройства, определенный GUID_AVC_CLASS. Этот интерфейс поддерживает один код элемента управления вводом-выводом, IOCTL_AVC_CLASS, который, в свою очередь, поддерживает несколько кодов функций. Дочерние драйверы одноранговых экземпляровavc.sys гарантированно имеют доступ к этому интерфейсу через родительский объект устройства.
Виртуальные экземпляры avc.sys регистрируют интерфейс устройства, определенный GUID_VIRTUAL_AVC_CLASS. Этот интерфейс поддерживает четыре кода элементов управления вводом-выводом:
IOCTL_AVC_CLASS
IOCTL_AVC_UPDATE_VIRTUAL_SUBUNIT_INFO
IOCTL_AVC_REMOVE_VIRTUAL_SUBUNIT_INFO
IOCTL_AVC_BUS_RESET
Интерфейс GUID_AVC_CLASS поддерживает все коды функций IOCTL_AVC_CLASS, хотя некоторые из них имеют ограничения на их использование. Однако интерфейс GUID_VIRTUAL_AVC_CLASS поддерживает не все коды функций IOCTL_AVC_CLASS. Справочная страница для каждого кода функции указывает, поддерживается ли он для GUID_VIRTUAL_AVC_CLASS экземпляров avc.sys.
Коды функций IOCTL_AVC_CLASS (и любые ограничения) описаны в каждом коде функции.
Дополнительные сведения об IRP и IOCTL см. в разделе Обработка IRP.
Основной код
Буфер входных и выходных данных
Параметры->Others.Argument1 указывает на структуру AVC_COMMAND_IRB или AVC_MULTIFUNC_IRB структуру. Обе структуры содержат AVC_IRB структуру в качестве заголовка, как показано в следующем примере:
typedef struct _AVC_COMMAND_IRB {
AVC_IRB Common;
.
.
.
} AVC_COMMAND_IRB, *PAVC_COMMAND_IRB;
typedef struct _AVC_MULTIFUNC_IRB {
AVC_IRB Common;
.
.
.
} AVC_MULTIFUNC_IRB, *PAVC_MULTIFUNC_IRB;
Структура AVC_IRB содержит один член Функции . Для этого элемента необходимо задать требуемый код функции из перечисления AVC_FUNCTION.
Структура AVC_MULTIFUNC_IRB содержит член объединения, который задает параметры блока запроса ввода-вывода функции для типа кода функции. Параметры и их значения задокументированы в каждом коде функции.
Параметры->Others.Argument1 указывает на ту же AVC_COMMAND_IRB или AVC_MULTIFUNC_IRB структуру, которая была передана в качестве входных данных. В рамках выполнения функции драйвер подсоединения заполняет определенные вложенные элементы объединения в структуре сведениями о драйвере. Возвращаемые сведения документируются с каждым запросом.
Блок состояния
Сведения, возвращаемые драйвером протокола AV/C в блоке состояния ввода-вывода (Irp-IoStatus.Status>), задокументированы при каждом запросе.
Комментарии
Большинство функций AV/C должны называться IRQL = PASSIVE_LEVEL. Некоторые из них могут быть вызваны в IRQL <= DISPATCH_LEVEL. Соответствующий IRQL задокументирован в каждой функции AV/C.
Требования
Требование | Значение |
---|---|
Заголовок | avc.h (включая Avc.h) |