BUS_INTERFACE_STANDARD-Struktur (wdm.h)
Die BUS_INTERFACE_STANDARD-Schnittstellenstruktur ermöglicht Es Gerätetreibern, direkte Aufrufe an übergeordnete Bustreiberroutinen zu tätigen. Diese Struktur definiert die GUID_BUS_INTERFACE_STANDARD-Schnittstelle .
Syntax
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;
Member
Size
Die Größe (in Bytes) dieser Struktur.
Version
Die vom Treiber definierte Schnittstellenversion.
Context
Ein Zeiger auf schnittstellenspezifische Kontextinformationen.
InterfaceReference
Ein Zeiger auf eine InterfaceReference-Routine , die die Verweisanzahl der Schnittstelle erhöht.
InterfaceDereference
Ein Zeiger auf eine InterfaceDereference-Routine , die die Referenzanzahl der Schnittstelle verringert.
TranslateBusAddress
Ein Zeiger auf eine TranslateBusAddress-Routine , die Adressen auf dem übergeordneten Bus in logische Adressen übersetzt.
GetDmaAdapter
Ein Zeiger auf eine GetDmaAdapter-Routine , die eine DMA-Adapterstruktur (DMA_ADAPTER) für das Zielgerät zurückgibt.
SetBusData
Ein Zeiger auf eine SetBusData-Routine , die Daten in den Konfigurationsbereich des Geräts schreibt.
GetBusData
Ein Zeiger auf eine GetBusData-Routine , die Daten aus dem Konfigurationsbereich des Geräts liest.
Hinweise
Die BUS_INTERFACE_STANDARD-Struktur ist eine Erweiterung der INTERFACE-Struktur .
Einige Vorgänge auf einem Gerät sind für den übergeordneten Bustreiber des Geräts reserviert. Diese Vorgänge können den Zugriff auf den gerätespezifischen Konfigurationsraum eines Busses oder das Programmieren eines DMA-Controllers umfassen.
Um aus dem Konfigurationsraum eines Geräts zu lesen oder in diesen zu schreiben, muss sich ein Gerätetreiber auf zwei Arten auf die Agentur des Bustreibers verlassen:
Durch Senden der E/A-Anforderungspakete (IRPs) IRP_MN_READ_CONFIG und IRP_MN_WRITE_CONFIG an den Bustreiber.
Durch Abrufen einer Schnittstelle vom Bustreiber. Der Gerätetreiber kann dann auf den Konfigurationsraum seines Geräts zugreifen, indem er direkte Aufrufe an die Bustreiberroutinen durchführt, die von der BUS_INTERFACE_STANDARD-Schnittstellenstruktur bereitgestellt werden. Die Memberroutinen GetBusData und SetBusData können zum Lesen bzw. Schreiben in den Konfigurationsraum eines Geräts verwendet werden.
Weitere Informationen zu den Zugriffsmöglichkeiten auf den Konfigurationsbereich finden Sie unter Zugreifen auf den Konfigurationsbereich des Geräts.
Einige Gerätetypen, z. B. ein Busmasterspeichergerät, verfügen über DMA-Controller. Die Gerätetreiber für diese Geräte können diese DMA-Controller jedoch nicht direkt programmieren. Stattdessen müssen sie sich auf Routinen verlassen, die vom übergeordneten Bustreiber bereitgestellt werden. Damit ein Gerätetreiber den DMA-Controller für sein Gerät programmieren kann, muss er zuerst ein Adapterobjekt vom übergeordneten Bustreiber anfordern. Das Adapterobjekt enthält die vom Bustreiber bereitgestellten Routinen, die zum Programmieren des DMA-Controllers des Geräts verwendet werden können. Gerätetreiber müssen sich direkt oder indirekt auf den BUS_INTERFACE_STANDARD verlassen, um das Adapterobjekt abzurufen.
Wenn der Treiber unter IRQL = PASSIVE_LEVEL ausgeführt wird, sollte er das DMA-Adapterobjekt eines Geräts durch Aufrufen von IoGetDmaAdapter abrufen. IoGetDmaAdapter erkennt, ob der Bustreiber die BUS_INTERFACE_STANDARD-Schnittstelle unterstützt. Wenn dies der Fall ist, ruft IoGetDmaAdapter die Routine auf, auf die der GetDmaAdapter-Member dieser Schnittstelle verweist, um das Adapterobjekt abzurufen. Andernfalls ruft IoGetDmaAdapter eine entsprechende Legacyroutine auf.
Wenn ein Treiber jedoch ein Adapterobjekt abrufen muss, während er unter IRQL >= DISPATCH_LEVEL ausgeführt wird, kann er dies nicht mit IoGetDmaAdapter tun. In diesem Fall muss der Treiber die BUS_INTERFACE_STANDARD-Schnittstelle abfragen, während er noch bei IRQL = PASSIVE_LEVEL ist, indem er IRP_MN_QUERY_INTERFACE verwendet.
Anforderungen
Anforderung | Wert |
---|---|
Header | wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h) |