Condividi tramite


IOCTL_AVC_CLASS IOCTL (avc.h)

Il codice di controllo di I/O IOCTL_AVC_CLASS è supportato solo dalla modalità kernel, usando il IRP_MJ_INTERNAL_DEVICE_CONTROL dispatch.

Avc.sys supporta due interfacce del dispositivo, a seconda del tipo di istanza (peer o virtuale). Queste interfacce definiscono le funzionalità esposte dal driver per driver subunit, altri driver e applicazioni. Durante l'inizializzazione, avc.sys chiama IoRegisterDeviceInterface con GUID_AVC_CLASS (un'istanza peer o non virtuale) o GUID_VIRTUAL_AVC_CLASS (un'istanza virtuale), quindi usa IoSetDeviceInterfaceState in base allo stato avviato o arrestato del driver.

Istanze peer di avc.sys registrare l'interfaccia del dispositivo identificata da GUID_AVC_CLASS. Questa interfaccia supporta un codice di controllo di I/O, IOCTL_AVC_CLASS, che a sua volta supporta più codici di funzione. I driver figlio delle istanze di avc.sys peer hanno la certezza di avere accesso a questa interfaccia tramite l'oggetto dispositivo padre.

Le istanze virtuali di avc.sys registrano l'interfaccia del dispositivo identificata da GUID_VIRTUAL_AVC_CLASS. Questa interfaccia supporta quattro codici di controllo di I/O:

  • IOCTL_AVC_CLASS

  • IOCTL_AVC_UPDATE_VIRTUAL_SUBUNIT_INFO

  • IOCTL_AVC_REMOVE_VIRTUAL_SUBUNIT_INFO

  • IOCTL_AVC_BUS_RESET

L'interfaccia GUID_AVC_CLASS supporta tutti i codici di funzione IOCTL_AVC_CLASS, anche se alcuni presentano limitazioni per l'uso. Tuttavia, l'interfaccia GUID_VIRTUAL_AVC_CLASS non supporta tutti i codici di funzione IOCTL_AVC_CLASS. La pagina di riferimento per ogni singolo codice di funzione specifica se è supportata per GUID_VIRTUAL_AVC_CLASS istanze di avc.sys.

I codici di funzione IOCTL_AVC_CLASS (e le eventuali restrizioni) sono descritti in ogni codice della funzione.

Per altre informazioni su IRP e IOCTLs, vedere Handling IRPs.

Codice principale

IRP_MJ_DEVICE_CONTROL

Buffer di input/output

Parameters->Others.Argument1 punta a una struttura AVC_COMMAND_IRB o AVC_MULTIFUNC_IRB. Entrambe le strutture contengono una struttura AVC_IRB come intestazione, come illustrato nell'esempio seguente:

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 struttura AVC_IRB contiene un singolo membro Function. Questo membro deve essere impostato sul codice della funzione desiderato dall'enumerazione AVC_FUNCTION.

La struttura AVC_MULTIFUNC_IRB contiene un membro unione che specifica i parametri specifici del tipo di blocco di richieste di I/O della funzione per il codice della funzione. I parametri e i relativi significati sono documentati con ogni codice di funzione.

Parameters->Others.Argument1 punta alla stessa struttura AVC_COMMAND_IRB o AVC_MULTIFUNC_IRB passata come input. Come parte del completamento della funzione, il driver subunit riempie alcuni membri secondari dell'unione all'interno della struttura con informazioni per il driver. Le informazioni restituite sono documentate con ogni richiesta.

Blocco di stato

Le informazioni restituite dal driver di protocollo AV/C nel blocco di stato I/O (Irp->IoStatus.Status) sono documentate con ogni richiesta.

Osservazioni

La maggior parte delle funzioni AV/C deve essere chiamata IRQL = PASSIVE_LEVEL. Alcuni possono essere chiamati in IRQL <= DISPATCH_LEVEL. Il rispettivo IRQL è documentato in ogni funzione AV/C.

Fabbisogno

Requisito Valore
intestazione avc.h (include Avc.h)

Vedere anche

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