即插即用次要 IRP

本部分介绍发送到驱动程序的 PnP IRP。 所有 PnP IRP 都具有主要函数代码 IRP_MJ_PNP 和指示特定 PnP 请求的次要函数代码。

本部分提供各个 IRP 的参考信息。 请参阅即插即用,了解 IRP 的发送顺序说明、如何在 DispatchPnP 例程中处理 IRP 的讨论,以及 PnP 概念和术语的一般讨论。

对于每个 IRP 和每种驱动程序,驱动程序要么需要处理 IRP,要么可以选择处理 IRP,要么不能处理 IRP。 请参阅下表,确定驱动程序将处理哪些 IRP,然后查阅参考页以获取有关各个 IRP 的信息。 IRP 在表中按功能顺序列出,在 IRP 参考页中按字母顺序列出。

如果 IRP 在特定驱动程序的表中标记为“否”,则该驱动程序不得处理 IRP。 驱动程序必须将 IRP 传递给设备堆栈中的下一个驱动程序,如 IRP 的参考页中所述。

PnP 管理器发送这些 IRP。 PnP 驱动程序可以发送其中一些 IRP,但只能发送本节中如此说明的 IRP。

以下是 PnP IRP 的次要函数代码,以及处理它们的驱动程序类型:

PnP IRP 次要函数代码 非总线设备的函数或筛选器驱动程序 用于总线设备 (的函数驱动程序,适用于总线 FDO) 子 PDO 的总线驱动程序或总线筛选器驱动程序 ()
IRP_MN_START_DEVICE 0x00 必需 必需 必需
IRP_MN_QUERY_REMOVE_DEVICE 0x01 必需 必需 必需
IRP_MN_REMOVE_DEVICE 0x02 必需 必需 必需
IRP_MN_CANCEL_REMOVE_DEVICE 0x03 必需 必需 必需
IRP_MN_STOP_DEVICE 0x04 必需 必需 必需
IRP_MN_QUERY_STOP_DEVICE 0x05 必需 必需 必需
IRP_MN_CANCEL_STOP_DEVICE 0x06 必需 必需 必需
IRP_MN_QUERY_DEVICE_RELATIONS 0x07
- BusRelations x 可选 (1) 必需 否 (2)
- 弹出关系 x 可选
- RemovalRelations x 可选 可选
- TargetDeviceRelation x 必需
IRP_MN_QUERY_INTERFACE 0x08 可选 可选 必需 (1)
IRP_MN_QUERY_CAPABILITIES 0x09 可选 可选或必需
IRP_MN_QUERY_RESOURCES 0x0A 必需 (1)
IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B 必需 (1)
IRP_MN_QUERY_DEVICE_TEXT 0x0C 必需 (1)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D 可选 (1) 可选 (1)
IRP_MN_READ_CONFIG 0x0F 必需 (1)
IRP_MN_WRITE_CONFIG 0x10 必需 (1)
IRP_MN_EJECT 0x11 必需
IRP_MN_SET_LOCK 0x12 必需 (1)
IRP_MN_QUERY_ID 0x13
- BusQueryDeviceID x 必需
- BusQueryHardwareIDs x 可选
- BusQueryCompatibleIDs x 否或可选
- BusQueryInstanceID x 可选
- BusQueryContainerID x 必需 (3)
IRP_MN_QUERY_PNP_DEVICE_STATE 0x14 可选 可选 可选
IRP_MN_QUERY_BUS_INFORMATION 0x15 必需 (1)
IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16 必需 (1) 必需 (1) 必需 (1)
IRP_MN_SURPRISE_REMOVAL 0x17 必需 必需 必需
IRP_MN_DEVICE_ENUMERATED 0x19 必需 (1)

(1) 在某些情况下为必需或可选。 有关更多详细信息,请参阅 IRP 的参考页。

(2) 总线筛选器驱动程序可能会处理 BusRelations 的查询。

(3) Windows 7 及更高版本的 Windows 中受支持。