Share via


IOCTL_AVC_CLASS IOCTL (avc.h)

O código de controle de E/S IOCTL_AVC_CLASS tem suporte apenas no modo kernel, usando o IRP_MJ_INTERNAL_DEVICE_CONTROL expedição.

Avc.sys dá suporte a duas interfaces de dispositivo, dependendo do tipo de instância (par ou virtual). Essas interfaces definem a funcionalidade que o driver expõe para drivers de subunidade, outros drivers e aplicativos. Durante a inicialização, avc.sys chama IoRegisterDeviceInterface com GUID_AVC_CLASS (uma instância par ou não virtual) ou GUID_VIRTUAL_AVC_CLASS (uma instância virtual), então usa IoSetDeviceInterfaceState conforme apropriado para o estado iniciado ou interrompido do driver.

Instâncias de par deavc.sys registrar a interface do dispositivo identificada por GUID_AVC_CLASS. Essa interface dá suporte a um código de controle de E/S, IOCTL_AVC_CLASS, que, por sua vez, dá suporte a vários códigos de função. Os drivers filho de instâncias deavc.sys pares têm garantia de ter acesso a essa interface por meio de seu objeto de dispositivo pai.

Instâncias virtuais de avc.sys registrar a interface do dispositivo identificada por GUID_VIRTUAL_AVC_CLASS. Essa interface dá suporte a quatro códigos de controle de E/S:

  • IOCTL_AVC_CLASS

  • IOCTL_AVC_UPDATE_VIRTUAL_SUBUNIT_INFO

  • IOCTL_AVC_REMOVE_VIRTUAL_SUBUNIT_INFO

  • IOCTL_AVC_BUS_RESET

A interface GUID_AVC_CLASS dá suporte a todos os códigos de função IOCTL_AVC_CLASS, embora alguns tenham limitação em seu uso. No entanto, a interface GUID_VIRTUAL_AVC_CLASS não dá suporte a todos os códigos de função IOCTL_AVC_CLASS. A página de referência para cada código de função individual especifica se há suporte para GUID_VIRTUAL_AVC_CLASS instâncias de avc.sys.

Os códigos de função IOCTL_AVC_CLASS (e quaisquer restrições) são descritos em cada código de função.

Para obter mais informações sobre IRPs e IOCTLs, consulte Manipulando IRPs.

Código principal

IRP_MJ_DEVICE_CONTROL

Buffer de entrada/saída

Parâmetros->Others.Argument1 aponta para uma estrutura AVC_COMMAND_IRB ou AVC_MULTIFUNC_IRB estrutura. Ambas as estruturas contêm uma estrutura AVC_IRB como um cabeçalho, conforme ilustrado no exemplo a seguir:

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;

A estrutura AVC_IRB contém um único membro function . Esse membro deve ser definido como o código de função desejado da enumeração AVC_FUNCTION.

A estrutura AVC_MULTIFUNC_IRB contém um membro da união que especifica os parâmetros específicos do tipo de bloco de solicitação de E/S da função para o código da função. Os parâmetros e seus significados são documentados com cada código de função.

Parâmetros->Others.Argument1 aponta para a mesma estrutura de AVC_COMMAND_IRB ou AVC_MULTIFUNC_IRB que foi passada como entrada. Como parte da conclusão da função, o driver de subunidade preenche determinados submembros da união dentro da estrutura com informações para o driver. As informações retornadas são documentadas com cada solicitação.

Bloco de status

As informações que o driver de protocolo AV/C retorna no Bloco de Status de E/S (Irp-IoStatus.Status>) são documentadas com cada solicitação.

Comentários

A maioria das funções AV/C deve ser chamada de IRQL = PASSIVE_LEVEL. Alguns podem ser chamados em IRQL <= DISPATCH_LEVEL. O respectivo IRQL está documentado em cada função AV/C.

Requisitos

Requisito Valor
Cabeçalho avc.h (inclua Avc.h)

Confira também

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