estructura BUS_INTERFACE_STANDARD (wdm.h)

La estructura de la interfaz de BUS_INTERFACE_STANDARD permite a los controladores de dispositivo realizar llamadas directas a rutinas de controladores de autobús primarios. Esta estructura define la interfaz GUID_BUS_INTERFACE_STANDARD .

Sintaxis

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;

Miembros

Size

Tamaño, en bytes, de esta estructura.

Version

Versión de la interfaz definida por el controlador.

Context

Puntero a información de contexto específica de la interfaz.

InterfaceReference

Puntero a una rutina InterfaceReference que incrementa el recuento de referencias de la interfaz.

InterfaceDereference

Puntero a una rutina InterfaceDereference que disminuye el recuento de referencias de la interfaz.

TranslateBusAddress

Puntero a una rutina TranslateBusAddress que traduce las direcciones del bus primario a direcciones lógicas.

GetDmaAdapter

Puntero a una rutina GetDmaAdapter que devuelve una estructura del adaptador DMA (DMA_ADAPTER) para el dispositivo de destino.

SetBusData

Puntero a una rutina SetBusData que escribe datos en el espacio de configuración del dispositivo.

GetBusData

Puntero a una rutina GetBusData que lee los datos del espacio de configuración del dispositivo.

Comentarios

La estructura BUS_INTERFACE_STANDARD es una extensión de la estructura INTERFACE .

Algunas operaciones en un dispositivo están reservadas para el controlador de autobús primario del dispositivo. Estas operaciones pueden incluir el acceso al espacio de configuración específico del dispositivo de un bus o programar un controlador DMA.

Para leer o escribir en el espacio de configuración de un dispositivo, un controlador de dispositivo debe confiar en la agencia del controlador de autobús de dos maneras:

  • Mediante el envío de los paquetes de solicitud de E/S (IRP) IRP_MN_READ_CONFIG y IRP_MN_WRITE_CONFIG al controlador de autobús.

  • Al obtener una interfaz del conductor del autobús. A continuación, el controlador de dispositivo puede acceder al espacio de configuración de su dispositivo realizando llamadas directas a las rutinas del controlador de autobús proporcionadas por la estructura de interfaz de BUS_INTERFACE_STANDARD . Sus rutinas de miembro, GetBusData y SetBusData, se pueden usar para leer y escribir en el espacio de configuración de un dispositivo, respectivamente.

Para obtener más información sobre las formas de acceder al espacio de configuración, consulte Acceso al espacio de configuración de dispositivos.

Algunos tipos de dispositivos, como un dispositivo de almacenamiento de bus-mastering, tienen controladores DMA incorporados. Sin embargo, los controladores de dispositivo para estos dispositivos no pueden programar estos controladores DMA directamente. En su lugar, deben confiar en rutinas proporcionadas por el controlador de autobús primario. Para que un controlador de dispositivo programe el controlador DMA para su dispositivo, primero debe solicitar un objeto de adaptador desde el controlador de bus primario. El objeto de adaptador contiene las rutinas proporcionadas por el controlador de bus que se pueden usar para programar el controlador DMA del dispositivo. Los controladores de dispositivo deben confiar en el BUS_INTERFACE_STANDARD, ya sea directa o indirectamente, para obtener el objeto de adaptador.

Si el controlador se ejecuta en IRQL = PASSIVE_LEVEL, debe obtener el objeto de adaptador DMA de un dispositivo mediante una llamada a IoGetDmaAdapter. IoGetDmaAdapter detecta si el controlador de bus admite la interfaz BUS_INTERFACE_STANDARD . Si es así, IoGetDmaAdapter llama a la rutina a la que apunta el miembro GetDmaAdapter de esta interfaz para obtener el objeto de adaptador. De lo contrario, IoGetDmaAdapter llama a una rutina heredada equivalente.

Sin embargo, si un controlador debe obtener un objeto de adaptador mientras se ejecuta en IRQL >= DISPATCH_LEVEL, no puede hacerlo con IoGetDmaAdapter. En este caso, el controlador debe consultar la interfaz de BUS_INTERFACE_STANDARD mientras sigue en IRQL = PASSIVE_LEVEL mediante IRP_MN_QUERY_INTERFACE.

Requisitos

Requisito Valor
Header wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)

Consulte también

DEVICE_DESCRIPTION

DMA_ADAPTER

GUID_BUS_INTERFACE_STANDARD

GetBusData

GetDmaAdapter

INTERFAZ

IRP_MN_QUERY_INTERFACE

IRP_MN_READ_CONFIG

IRP_MN_WRITE_CONFIG

InterfaceDereference

InterfaceReference

IoGetDmaAdapter

SetBusData

TranslateBusAddress