IOCTL_AVC_CLASS IOCTL (avc.h)

El código de control de E/S de IOCTL_AVC_CLASS solo se admite desde el modo kernel, mediante el envío de IRP_MJ_INTERNAL_DEVICE_CONTROL.

Avc.sys admite dos interfaces de dispositivo, según el tipo de instancia (del mismo nivel o virtual). Estas interfaces definen la funcionalidad que expone el controlador para controladores de subunidad, otros controladores y aplicaciones. Durante la inicialización, avc.sys llama a IoRegisterDeviceInterface con GUID_AVC_CLASS (una instancia del mismo nivel o no virtual) o GUID_VIRTUAL_AVC_CLASS (una instancia virtual), después usa IoSetDeviceInterfaceState según corresponda para el estado iniciado o detenido del controlador.

Las instancias del mismo nivel de avc.sys registrar la interfaz de dispositivo identificada por GUID_AVC_CLASS. Esta interfaz admite un código de control de E/S, IOCTL_AVC_CLASS, que a su vez admite varios códigos de función. Se garantiza que los controladores secundarios de las instancias de avc.sys del mismo nivel tienen acceso a esta interfaz a través de su objeto de dispositivo primario.

Las instancias virtuales de avc.sys registrar la interfaz de dispositivo identificada por GUID_VIRTUAL_AVC_CLASS. Esta interfaz admite cuatro códigos de control de E/S:

  • IOCTL_AVC_CLASS

  • IOCTL_AVC_UPDATE_VIRTUAL_SUBUNIT_INFO

  • IOCTL_AVC_REMOVE_VIRTUAL_SUBUNIT_INFO

  • IOCTL_AVC_BUS_RESET

La interfaz GUID_AVC_CLASS admite todos los códigos de función IOCTL_AVC_CLASS, aunque algunos tienen limitaciones en su uso. Sin embargo, la interfaz GUID_VIRTUAL_AVC_CLASS no admite todos los códigos de función IOCTL_AVC_CLASS. La página de referencia de cada código de función individual especifica si se admite para GUID_VIRTUAL_AVC_CLASS instancias de avc.sys.

Los códigos de función IOCTL_AVC_CLASS (y las restricciones) se describen en cada código de función.

Para obtener más información sobre irP e IOPS, consulte Control de IRP.

Código principal

IRP_MJ_DEVICE_CONTROL

Búfer de entrada y salida

Parámetros->Others.Argument1 apunta a una estructura de AVC_COMMAND_IRB o AVC_MULTIFUNC_IRB estructura. Ambas estructuras contienen una estructura de AVC_IRB como encabezado, como se muestra en el ejemplo siguiente:

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;

La estructura AVC_IRB contiene un único miembro function . Este miembro debe establecerse en el código de función deseado de la enumeración AVC_FUNCTION.

La estructura AVC_MULTIFUNC_IRB contiene un miembro de unión que especifica los parámetros específicos del tipo de bloque de solicitud de E/S de la función para el código de función. Los parámetros y sus significados se documentan con cada código de función.

Parámetros->Others.Argument1 apunta a la misma estructura AVC_COMMAND_IRB o AVC_MULTIFUNC_IRB que se pasó como entrada. Como parte de la finalización de la función, el controlador de subunidad rellena determinados submembres de la unión dentro de la estructura con información para el controlador. La información devuelta se documenta con cada solicitud.

Bloque de estado

La información que devuelve el controlador de protocolo AV/C en el bloque de estado de E/S (Irp-IoStatus.Status>) se documenta con cada solicitud.

Comentarios

La mayoría de las funciones de AV/C deben llamarse IRQL = PASSIVE_LEVEL. Se puede llamar a algunos en IRQL <= DISPATCH_LEVEL. El IRQL respectivo se documenta en cada función de AV/C.

Requisitos

Requisito Valor
Header avc.h (incluir Avc.h)

Consulte también

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