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