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