IOCTL_AVC_CLASS IOCTL (avc.h)
IOCTL_AVC_CLASS I/O 控制代码仅在使用 IRP_MJ_INTERNAL_DEVICE_CONTROL 调度的内核模式下受支持。
Avc.sys 支持两个设备接口,具体取决于实例的类型 (对等或虚拟) 。 这些接口定义驱动程序为子单元驱动程序、其他驱动程序和应用程序公开的功能。 在初始化期间, avc.sys 使用GUID_AVC_CLASS (对等实例或非虚拟实例) 或GUID_VIRTUAL_AVC_CLASS (虚拟实例) 调用 IoRegisterDeviceInterface ,然后根据驱动程序的启动或停止状态使用 IoSetDeviceInterfaceState 。
avc.sys 的对等实例注册由 GUID_AVC_CLASS 标识的设备接口。 此接口支持一个 I/O 控制代码,IOCTL_AVC_CLASS,这反过来又支持多个函数代码。 保证对等 avc.sys 实例的子驱动程序通过其父设备对象访问此接口。
虚拟实例avc.sys 注册由GUID_VIRTUAL_AVC_CLASS标识的设备接口。 此接口支持四个 I/O 控制代码:
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 结构包含单个 Function 成员。 此成员必须设置为来自 AVC_FUNCTION 枚举的所需函数代码。
AVC_MULTIFUNC_IRB 结构包含一个联合成员,该成员为函数代码指定特定于函数 I/O 请求块类型的参数。 参数及其含义随每个函数代码一起记录。
参数->Others.Argument1 指向作为输入传递的相同AVC_COMMAND_IRB或AVC_MULTIFUNC_IRB结构。 作为完成函数的一部分,子单元驱动程序使用驱动程序的信息填充结构内联合的某些子成员。 返回的信息随每个请求一起记录。
状态块
每个请求都记录了 AV/C 协议驱动程序在 I/O 状态块 (Irp-IoStatus.Status>) 中返回的信息。
注解
大多数 AV/C 函数必须称为 IRQL = PASSIVE_LEVEL。 可以在 IRQL <= DISPATCH_LEVEL 调用一些代码。 每个 AV/C 函数中都记录了相应的 IRQL。
要求
要求 | 值 |
---|---|
Header | avc.h (包括 Avc.h) |