Condividi tramite


IOCTL_AVC_CLASS IOCTL (avc.h)

Il codice di controllo 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 la funzionalità esposta 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 come appropriato per lo stato avviato o arrestato del driver.

Le istanze peer di avc.sys registrano 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 garanzia 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 sull'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 (ed eventuali restrizioni) sono descritti in ogni codice di funzione.

Per altre informazioni sui runtime di integrazione e IOCTL, vedere Gestione dei runtime di integrazione.

Codice principale

IRP_MJ_DEVICE_CONTROL

Buffer di input/output

Parametri->Others.Argument1 punta a una struttura AVC_COMMAND_IRB o a una struttura 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 di unione che specifica i parametri specifici del tipo di richiesta di I/O della funzione per il codice della funzione. I parametri e i relativi significati sono documentati con ogni codice di funzione.

Parametri->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 conducente. Le informazioni restituite sono documentate con ogni richiesta.

Blocco dello stato

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

Commenti

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.

Requisiti

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

Vedi 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