BUS_INTERFACE_STANDARD 结构 (wdm.h)

BUS_INTERFACE_STANDARD 接口结构使设备驱动程序能够直接调用父总线驱动程序例程。 此结构定义 GUID_BUS_INTERFACE_STANDARD 接口。

语法

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;

成员

Size

此结构的大小(以字节为单位)。

Version

驱动程序定义的接口版本。

Context

指向特定于接口的上下文信息的指针。

InterfaceReference

指向 InterfaceReference 例程的指针,该例程递增接口的引用计数。

InterfaceDereference

指向接口引用计数递减的 InterfaceDereference 例程的指针。

TranslateBusAddress

指向 TranslateBusAddress 例程的指针,该例程将父总线上的地址转换为逻辑地址。

GetDmaAdapter

指向 GetDmaAdapter 例程的指针,该例程返回目标设备的 DMA 适配器结构 (DMA_ADAPTER) 。

SetBusData

指向 SetBusData 例程的指针,该例程将数据写入设备的配置空间。

GetBusData

指向从设备配置空间读取数据的 GetBusData 例程的指针。

注解

BUS_INTERFACE_STANDARD 结构是 INTERFACE 结构的扩展。

设备上的某些操作是为设备的父总线驱动程序保留的。 这些操作可能包括访问总线的设备特定配置空间或对 DMA 控制器进行编程。

若要从设备的配置空间读取或写入,设备驱动程序必须通过以下两种方式之一依赖于总线驱动程序的代理:

  • 将 I/O 请求数据包 (IRP) IRP_MN_READ_CONFIG 并将 IRP_MN_WRITE_CONFIG 发送到总线驱动程序。

  • 通过从总线驱动程序获取接口。 然后,设备驱动程序可以通过直接调用 BUS_INTERFACE_STANDARD 接口结构提供的总线驱动程序例程来访问其设备的配置空间。 其成员例程 GetBusDataSetBusData 可用于分别从设备配置空间读取和写入。

有关访问配置空间的方法的详细信息,请参阅 访问设备配置空间

某些类型的设备(例如总线主控存储设备)具有板载 DMA 控制器。 但是,这些设备的设备驱动程序无法直接对这些 DMA 控制器进行编程。 相反,它们必须依赖于父总线驱动程序提供的例程。 若要使设备驱动程序为其设备对 DMA 控制器进行编程,必须先从父总线驱动程序请求适配器对象。 适配器对象包含总线驱动程序提供的例程,这些例程可用于对设备的 DMA 控制器进行编程。 设备驱动程序必须直接或间接依赖 BUS_INTERFACE_STANDARD来获取适配器对象。

如果驱动程序在 IRQL = PASSIVE_LEVEL 执行,则应通过调用 IoGetDmaAdapter 获取设备的 DMA 适配器对象。 IoGetDmaAdapter 检测总线驱动程序是否支持 BUS_INTERFACE_STANDARD 接口。 如果存在, IoGetDmaAdapter 会调用此接口的 GetDmaAdapter 成员指向的例程以获取适配器对象。 否则, IoGetDmaAdapter 调用等效的旧例程。

但是,如果驱动程序必须在 IRQL >= DISPATCH_LEVEL 运行时获取适配器对象,则它无法使用 IoGetDmaAdapter 执行此操作。 在这种情况下,驱动程序必须使用 IRP_MN_QUERY_INTERFACE 在 IRQL = PASSIVE_LEVEL 时查询 BUS_INTERFACE_STANDARD接口。

要求

要求
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)

另请参阅

DEVICE_DESCRIPTION

DMA_ADAPTER

GUID_BUS_INTERFACE_STANDARD

GetBusData

GetDmaAdapter

接口

IRP_MN_QUERY_INTERFACE

IRP_MN_READ_CONFIG

IRP_MN_WRITE_CONFIG

InterfaceDereference

InterfaceReference

IoGetDmaAdapter

SetBusData

TranslateBusAddress