Поделиться через


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 (и все ограничения) описаны в каждом коде функции.

Дополнительные сведения об irPs и ioCTLs см. в разделе Обработка irPs.

Основной код

IRP_MJ_DEVICE_CONTROL

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

Parameters->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 содержит член объединения, указывающий параметры блока ввода-вывода функции для кода функции. Параметры и их значения документируются с каждым кодом функции.

parameters->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 (include 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