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
ターゲット デバイスの DMA アダプター構造 (DMA_ADAPTER) を返す GetDmaAdapter ルーチンへのポインター。
SetBusData
デバイスの構成空間にデータを書き込む SetBusData ルーチンへのポインター。
GetBusData
デバイスの構成領域からデータを読み取る GetBusData ルーチンへのポインター。
注釈
BUS_INTERFACE_STANDARD構造体は、INTERFACE 構造体の拡張です。
デバイス上の一部の操作は、デバイスの親バス ドライバー用に予約されています。 これらの操作には、バスのデバイス固有の構成空間へのアクセスや DMA コントローラーのプログラミングが含まれる場合があります。
デバイスの構成領域から読み取りまたは書き込みを行うには、デバイス ドライバーは次の 2 つの方法のいずれかでバス ドライバーの機関に依存する必要があります。
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 では取得できません。 この場合、ドライバーは、IRQL = PASSIVE_LEVELのままで、IRP_MN_QUERY_INTERFACE を使用してBUS_INTERFACE_STANDARD インターフェイスのクエリ を実行する必要があります。
要件
要件 | 値 |
---|---|
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |