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.
Основной код
Буфер входных и выходных данных
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) |