Поделиться через


структура 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.

Для чтения из пространства конфигурации устройства или записи в нее водитель устройства должен полагаться на агент водителя автобуса двумя способами:

  • Отправляя пакеты запросов ввода-вывода (IRP), IRP_MN_READ_CONFIG и IRP_MN_WRITE_CONFIG водителю шины.

  • Путем получения интерфейса от водителя шины. Затем драйвер устройства может получить доступ к пространству конфигурации своего устройства, выполняя прямые вызовы к подпрограммам водителя шины, предоставляемым структурой интерфейса BUS_INTERFACE_STANDARD . Его подпрограммы-члены , GetBusData и SetBusData, можно использовать для чтения и записи в пространство конфигурации устройства соответственно.

Дополнительные сведения о способах доступа к пространству конфигурации см. в разделе Доступ к пространству конфигурации устройства.

Некоторые типы устройств, например запоминающее устройство для шины, имеют встроенные контроллеры DMA. Однако драйверы устройств для этих устройств не могут программирует эти контроллеры DMA напрямую. Вместо этого они должны полагаться на подпрограммы, предоставляемые родительским водителем автобуса. Чтобы драйвер устройства запрограммировать контроллер DMA для своего устройства, он должен сначала запросить объект адаптера у родительского драйвера шины. Объект адаптера содержит подпрограммы, предоставляемые драйвером шины, которые можно использовать для программирования контроллера DMA устройства. Драйверы устройств должны напрямую или косвенно полагаться на BUS_INTERFACE_STANDARD для получения объекта адаптера.

Если драйвер выполняется в irQL = PASSIVE_LEVEL, он должен получить объект адаптера DMA устройства, вызвав IoGetDmaAdapter. IoGetDmaAdapter определяет, поддерживает ли драйвер шины интерфейс BUS_INTERFACE_STANDARD . Если это так, IoGetDmaAdapter вызывает подпрограмму, на которую указывает элемент GetDmaAdapter этого интерфейса, для получения объекта адаптера. В противном случае IoGetDmaAdapter вызывает эквивалентную устаревшую подпрограмму.

Однако если драйвер должен получить объект адаптера во время выполнения в IRQL >= DISPATCH_LEVEL, он не может сделать это с помощью IoGetDmaAdapter. В этом случае драйвер должен запросить интерфейс BUS_INTERFACE_STANDARD , оставаясь в IRQL = PASSIVE_LEVEL с помощью IRP_MN_QUERY_INTERFACE.

Требования

Требование Значение
Заголовок 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