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