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 介面結構所提供的總線驅動程式例程,來存取其裝置的設定空間。 其成員例程 GetBusData 和 SetBusData 可用來分別讀取和寫入裝置的設定空間。
如需存取設定空間方式的詳細資訊,請參閱 存取裝置設定空間。
某些類型的裝置,例如總線主控儲存設備,具有內建 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) |