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.

Основной код

IRP_MJ_DEVICE_CONTROL

Буфер входных и выходных данных

Параметры->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)

См. также раздел

AVC_COMMAND_IRB

AVC_FUNCTION

AVC_IRB

AVC_MULTIFUNC_IRB

IOCTL_AVC_BUS_RESET

IOCTL_AVC_REMOVE_VIRTUAL_SUBUNIT_INFO

IOCTL_AVC_UPDATE_VIRTUAL_SUBUNIT_INFO