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> 设置为零。

函数和筛选器驱动程序不处理此 IRP。

Operation

为响应此 IRP 返回的信息可供总线上的设备的函数和筛选器驱动程序使用。 函数和筛选器驱动程序可以调用 IoGetDeviceProperty 以请求 DevicePropertyBusTypeGuidDevicePropertyLegacyBusTypeDevicePropertyBusNumber。 支持多个总线上的设备的函数和筛选器驱动程序可以使用此信息来确定特定设备驻留在哪个总线上。

如果总线驱动程序返回信息以响应此 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。 Wdmguid.h 中列出了标准总线类型的 GUID。 驱动程序编写器应使用 Uuidgen 为其他总线类型生成 GUID。

LegacyBusType
PnP 总线驱动程序将 LegacyBusType 设置为父总线的 INTERFACE_TYPE 。 接口类型在 Wdm.h 中定义。 某些总线具有特定的 INTERFACE_TYPE 值,例如 PCMCIABusPCIBusPNPISABus。 对于其他总线,尤其是 USB 等较新的总线,总线驱动程序将此成员设置为 PNPBus

LegacyBusType 指定用于与设备通信的接口。 这可能与父总线的类型相对应,也可能不对应。 例如,插入 PCI CardBus 控制器的 CardBus 卡 的接口为 PCIBus。 但是,PCMCIA 卡 PCI CardBus 控制器上的接口是 PCMCIABus

BusNumber
总线驱动程序将 BusNumber 设置为一个数字,用于区分该总线与计算机上的其他相同类型的总线。 总线编号方案特定于总线。 总线编号可能是虚拟的,但必须与旧接口(如 IoReportResourceUsage)使用的任何编号匹配。

有关处理即插即用次要 IRP 的一般规则,请参阅即插即用。

发送此 IRP

预留给系统使用。 驱动程序不得发送此 IRP。

调用 IoGetDeviceProperty 以获取有关设备所连接到的总线的信息。

要求

标头

Wdm.h(包括 Wdm.h、Ntddk.h 或 Ntifs.h)

另请参阅

IoGetDeviceProperty