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

主要代码

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 结构包含单个 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)

另请参阅

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