Partager via


structure BUS_INTERFACE_STANDARD (wdm.h)

La structure d’interface BUS_INTERFACE_STANDARD permet aux pilotes de périphérique d’effectuer des appels directs aux routines de pilotes de bus parentes. Cette structure définit l’interface GUID_BUS_INTERFACE_STANDARD .

Syntaxe

typedef struct _BUS_INTERFACE_STANDARD {
  USHORT                 Size;
  USHORT                 Version;
  PVOID                  Context;
  PINTERFACE_REFERENCE   InterfaceReference;
  PINTERFACE_DEREFERENCE InterfaceDereference;
  PTRANSLATE_BUS_ADDRESS TranslateBusAddress;
  PGET_DMA_ADAPTER       GetDmaAdapter;
  PGET_SET_DEVICE_DATA   SetBusData;
  PGET_SET_DEVICE_DATA   GetBusData;
} BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD;

Membres

Size

Taille, en octets, de cette structure.

Version

Version de l’interface définie par le pilote.

Context

Pointeur vers des informations de contexte spécifiques à l’interface.

InterfaceReference

Pointeur vers une routine InterfaceReference qui incrémente le nombre de références de l’interface.

InterfaceDereference

Pointeur vers une routine InterfaceDereference qui décrémente le nombre de références de l’interface.

TranslateBusAddress

Pointeur vers une routine TranslateBusAddress qui traduit les adresses du bus parent en adresses logiques.

GetDmaAdapter

Pointeur vers une routine GetDmaAdapter qui retourne une structure d’adaptateur DMA (DMA_ADAPTER) pour l’appareil cible.

SetBusData

Pointeur vers une routine SetBusData qui écrit des données dans l’espace de configuration de l’appareil.

GetBusData

Pointeur vers une routine GetBusData qui lit les données de l’espace de configuration de l’appareil.

Remarques

La structure BUS_INTERFACE_STANDARD est une extension de la structure INTERFACE .

Certaines opérations sur un appareil sont réservées au pilote de bus parent de l’appareil. Ces opérations peuvent inclure l’accès à l’espace de configuration propre à l’appareil d’un bus ou la programmation d’un contrôleur DMA.

Pour lire ou écrire dans l’espace de configuration d’un appareil, un pilote de périphérique doit s’appuyer sur l’agence du pilote de bus de deux manières :

  • En envoyant les paquets de demandes d’E/S (IRP) IRP_MN_READ_CONFIG et IRP_MN_WRITE_CONFIG au pilote de bus.

  • En obtenant une interface à partir du pilote de bus. Le pilote de périphérique peut ensuite accéder à l’espace de configuration de son appareil en effectuant des appels directs aux routines de pilotes de bus fournies par la structure d’interface BUS_INTERFACE_STANDARD . Ses routines membres, GetBusData et SetBusData, peuvent être utilisées pour lire et écrire dans l’espace de configuration d’un appareil, respectivement.

Pour plus d’informations sur les façons d’accéder à l’espace de configuration, consultez Accès à l’espace de configuration de l’appareil.

Certains types d’appareils, tels qu’un périphérique de stockage de mastering de bus, ont des contrôleurs DMA intégrés. Toutefois, les pilotes de périphérique de ces appareils ne peuvent pas programmer ces contrôleurs DMA directement. Au lieu de cela, ils doivent s’appuyer sur les routines fournies par le pilote de bus parent. Pour qu’un pilote de périphérique programme le contrôleur DMA pour son appareil, il doit d’abord demander un objet adaptateur au pilote de bus parent. L’objet adaptateur contient les routines fournies par le pilote de bus qui peuvent être utilisées pour programmer le contrôleur DMA de l’appareil. Les pilotes de périphérique doivent s’appuyer sur le BUS_INTERFACE_STANDARD, directement ou indirectement, pour obtenir l’objet adaptateur.

Si le pilote s’exécute à IRQL = PASSIVE_LEVEL, il doit obtenir l’objet d’adaptateur DMA d’un appareil en appelant IoGetDmaAdapter. IoGetDmaAdapter détecte si le pilote de bus prend en charge l’interface BUS_INTERFACE_STANDARD . Si c’est le cas, IoGetDmaAdapter appelle la routine pointée par le membre GetDmaAdapter de cette interface pour obtenir l’objet adaptateur. Sinon, IoGetDmaAdapter appelle une routine héritée équivalente.

Toutefois, si un pilote doit obtenir un objet d’adaptateur lors de l’exécution à IRQL >= DISPATCH_LEVEL, il ne peut pas le faire avec IoGetDmaAdapter. Dans ce cas, le pilote doit rechercher l’interface BUS_INTERFACE_STANDARD toujours dans IRQL = PASSIVE_LEVEL à l’aide de IRP_MN_QUERY_INTERFACE.

Configuration requise

Condition requise Valeur
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h)

Voir aussi

DEVICE_DESCRIPTION

DMA_ADAPTER

GUID_BUS_INTERFACE_STANDARD

GetBusData

GetDmaAdapter

INTERFACE

IRP_MN_QUERY_INTERFACE

IRP_MN_READ_CONFIG

IRP_MN_WRITE_CONFIG

InterfaceDereference

InterfaceReference

IoGetDmaAdapter

SetBusData

TranslateBusAddress