IOCTL_AVC_CLASS IOCTL (avc.h)
Le code de contrôle d’E/S IOCTL_AVC_CLASS est pris en charge uniquement en mode noyau, à l’aide du IRP_MJ_INTERNAL_DEVICE_CONTROL dispatch.
Avc.sys prend en charge deux interfaces d’appareil, selon le type de instance (homologue ou virtuel). Ces interfaces définissent les fonctionnalités exposées par le pilote pour les pilotes de sous-unités, d’autres pilotes et applications. Lors de l’initialisation, avc.sys appelle IoRegisterDeviceInterface avec GUID_AVC_CLASS (un instance homologue ou non virtuel) ou GUID_VIRTUAL_AVC_CLASS (un instance virtuel), puis utilise IoSetDeviceInterfaceState en fonction de l’état démarré ou arrêté du pilote.
Les instances homologues de avc.sys inscrivent l’interface de l’appareil identifiée par GUID_AVC_CLASS. Cette interface prend en charge un code de contrôle d’E/S, IOCTL_AVC_CLASS, qui à son tour prend en charge plusieurs codes de fonction. Les pilotes enfants des instances deavc.sys homologues ont la garantie d’avoir accès à cette interface via leur objet d’appareil parent.
Les instances virtuelles de avc.sys inscrivent l’interface d’appareil identifiée par GUID_VIRTUAL_AVC_CLASS. Cette interface prend en charge quatre codes de contrôle d’E/S :
IOCTL_AVC_CLASS
IOCTL_AVC_UPDATE_VIRTUAL_SUBUNIT_INFO
IOCTL_AVC_REMOVE_VIRTUAL_SUBUNIT_INFO
IOCTL_AVC_BUS_RESET
L’interface GUID_AVC_CLASS prend en charge tous les codes de fonction IOCTL_AVC_CLASS, bien que certains aient des limitations quant à leur utilisation. Toutefois, l’interface GUID_VIRTUAL_AVC_CLASS ne prend pas en charge tous les codes de fonction IOCTL_AVC_CLASS. La page de référence pour chaque code de fonction individuel spécifie s’il est pris en charge pour GUID_VIRTUAL_AVC_CLASS instances de avc.sys.
Les codes de fonction IOCTL_AVC_CLASS (et toutes les restrictions) sont décrits dans chaque code de fonction.
Pour plus d’informations sur les IRP et les IOCTL, consultez Gestion des IRPs.
Code principal
Mémoire tampon d’entrée/sortie
Paramètres->Others.Argument1 pointe vers une structure AVC_COMMAND_IRB ou AVC_MULTIFUNC_IRB structure. Les deux structures contiennent une structure AVC_IRB en tant qu’en-tête, comme illustré dans l’exemple suivant :
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 structure AVC_IRB contient un seul membre function . Ce membre doit être défini sur le code de fonction souhaité à partir de l’énumération AVC_FUNCTION.
La structure AVC_MULTIFUNC_IRB contient un membre d’union qui spécifie les paramètres spécifiques au type de bloc de demande d’E/S de fonction pour le code de fonction. Les paramètres et leurs significations sont documentés avec chaque code de fonction.
Paramètres->Autres.Argument1 pointe vers la même structure AVC_COMMAND_IRB ou AVC_MULTIFUNC_IRB qui a été passée en tant qu’entrée. Dans le cadre de l’exécution de la fonction, le pilote de sous-unité remplit certains sous-membres de l’union au sein de la structure avec des informations pour le pilote. Les informations retournées sont documentées avec chaque requête.
Bloc d’état
Les informations que le pilote de protocole AV/C retourne dans le bloc d’état d’E/S (Irp-IoStatus.Status>) sont documentées avec chaque requête.
Remarques
La plupart des fonctions AV/C doivent être appelées IRQL = PASSIVE_LEVEL. Quelques-uns peuvent être appelés à IRQL <= DISPATCH_LEVEL. L’IRQL respectif est documenté dans chaque fonction AV/C.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | avc.h (inclure Avc.h) |