Share via


IRP_MN_QUERY_BUS_INFORMATION

PnP マネージャーは、この IRP を使用して、デバイスの親バスの種類とインスタンス番号を要求します。

バス ドライバーは、子デバイス (PDO) に対してこの要求を処理する必要があります。 ファンクション ドライバーとフィルター ドライバーは、この IRP を処理しません。

0x15

主要なコード

IRP_MJ_PNP

送信時

PnP マネージャーは、デバイスが列挙されるときに、この IRP を送信します。

PnP マネージャーは、任意のスレッド コンテキストで、IRQL PASSIVE_LEVEL でこの IRP を送信します。

入力パラメーター

なし

出力パラメーター

I/O 状態ブロックで返されます。

I/O 状態ブロック

バス ドライバーが、Irp->IoStatus.Status を STATUS_SUCCESS に設定するか、適切なエラー状態に設定します。

成功した場合、バス ドライバーは Irp->IoStatus.Information を、完了した PNP_BUS_INFORMATION 構造体へのポインターに設定します。 (詳細については、「操作」セクションを参照してください。) エラーが発生した場合は、バス ドライバーは Irp->IoStatus.Information を 0 に設定します。

ファンクション ドライバーとフィルター ドライバーは、この IRP を処理しません。

操作

この IRP に応答して返される情報は、バス上のデバイスのファンクション ドライバーとフィルター ドライバーで使用できます。 ファンクション ドライバーとフィルター ドライバーは、IoGetDeviceProperty を呼び出すことで、DevicePropertyBusTypeGuidDevicePropertyLegacyBusType、または DevicePropertyBusNumber を要求することができます。 複数のバス上のデバイスをサポートするファンクション ドライバーとフィルター ドライバーは、この情報を使用して、特定のデバイスが存在するバスを特定できます。

バス ドライバーは、この IRP に応答して情報を返す場合、ページングされたメモリから PNP_BUS_INFORMATION 構造体を割り当てます。 不要になると、PnP マネージャーは構造体を解放します。

PNP_BUS_INFORMATION 構造体の形式は次のとおりです。

typedef struct _PNP_BUS_INFORMATION {
    GUID BusTypeGuid;
    INTERFACE_TYPE LegacyBusType;
    ULONG BusNumber;
} PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;

構造体のメンバーは次のように定義されます。

BusTypeGuid
バス ドライバーは、BusTypeGuid に、デバイスが存在するバスの種類の GUID を設定します。 標準のバスの種類の GUID は Wdmguid.h に記載されています。 ドライバー ライターは、Uuidgen を使用して他のバスの種類の GUID を生成する必要があります。

LegacyBusType
PnP バス ドライバーは、親バスの INTERFACE_TYPELegacyBusType を設定します。 インターフェイスの種類は Wdm.h で定義されています。 一部のバスには、PCMCIABusPCIBusPNPISABus などの特定の INTERFACE_TYPE 値があります。 他のバス、特に新しいバス (USB など) の場合、バス ドライバーはこのメンバーを PNPBus に設定します。

LegacyBusType は、デバイスとの通信に使用するインターフェイスを指定します。 これは、親バスの種類に対応している場合としていない場合があります。 たとえば、PCI CardBus コントローラーに接続されている CardBus カードのインターフェイスは PCIBus です。 ですが、PCI CardBus コントローラー上の PCMCIA カードのインターフェイスは PCMCIABus です。

BusNumber
バス ドライバーは、BusNumber に、バスをコンピューター上の同じ種類の他のバスと区別する番号を設定します。 バスの番号付けスキームはバス固有です。 バスの番号は仮想にすることもできますが、IoReportResourceUsage などの レガシ インターフェイスで使用される任意の番号付けと一致する必要があります。

プラグ アンド プレイのマイナー IRP の処理に関する一般的な規則については、「プラグ アンド プレイ」を参照してください。

この IRP の送信

システムで使用するために予約されています。 ドライバーは、この IRP を送信することはできません。

IoGetDeviceProperty を呼び出すと、デバイスが接続されているバスに関する情報を取得します。

要件

ヘッダー

Wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)

関連項目

IoGetDeviceProperty