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)

Weitere Informationen

DEVICE_DESCRIPTION

DMA_ADAPTER

GUID_BUS_INTERFACE_STANDARD

GetBusData

GetDmaAdapter

SCHNITTSTELLE

IRP_MN_QUERY_INTERFACE

IRP_MN_READ_CONFIG

IRP_MN_WRITE_CONFIG

InterfaceDereference

InterfaceReference

IoGetDmaAdapter

SetBusData

TranslateBusAddress