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
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) |