Plug and Play Minor IRPs

This section describes the PnP IRPs that are sent to drivers. All PnP IRPs have the major function code IRP_MJ_PNP and a minor function code indicating the particular PnP request.

This section provides reference information for the individual IRPs. See Plug and Play for a description of the order in which the IRPs are sent, a discussion of how to handle IRPs in DispatchPnP routines, and a general discussion of PnP concepts and terminology.

For each IRP and each kind of driver, a driver is either required to handle the IRP, can optionally handle the IRP, or must not handle the IRP. Consult the table below to identify which IRPs your driver will handle and then consult the reference pages for information about the individual IRPs. The IRPs are listed in functional order in the table and in alphabetical order in the IRP reference pages.

If an IRP is marked "No" in the table for a particular driver, that driver must not handle the IRP. The driver must pass the IRP to the next driver in the device stack as described in the reference page for the IRP.

The PnP manager sends these IRPs. PnP drivers can send some of these IRPs, but only those so noted in this section.

The following are the minor function codes for PnP IRPs, and the driver types that handle them:

PnP IRP minor function code Value Function or filter driver for nonbus device Function driver for bus device (for bus FDO) Bus driver or bus filter driver (for child PDOs)
IRP_MN_START_DEVICE 0x00 Required Required Required
IRP_MN_QUERY_REMOVE_DEVICE 0x01 Required Required Required
IRP_MN_REMOVE_DEVICE 0x02 Required Required Required
IRP_MN_CANCEL_REMOVE_DEVICE 0x03 Required Required Required
IRP_MN_STOP_DEVICE 0x04 Required Required Required
IRP_MN_QUERY_STOP_DEVICE 0x05 Required Required Required
IRP_MN_CANCEL_STOP_DEVICE 0x06 Required Required Required
- BusRelations x Optional (1) Required No (2)
- EjectionRelations x No No Optional
- RemovalRelations x Optional Optional No
- TargetDeviceRelation x No No Required
IRP_MN_QUERY_INTERFACE 0x08 Optional Optional Required (1)
IRP_MN_QUERY_CAPABILITIES 0x09 Optional Optional or Required
IRP_MN_QUERY_RESOURCES 0x0A No No Required (1)
IRP_MN_QUERY_DEVICE_TEXT 0x0C No No Required (1)
IRP_MN_READ_CONFIG 0x0F No No Required (1)
IRP_MN_WRITE_CONFIG 0x10 No No Required (1)
IRP_MN_EJECT 0x11 No No Required
IRP_MN_SET_LOCK 0x12 No No Required (1)
- BusQueryDeviceID x No No Required
- BusQueryHardwareIDs x No No Optional
- BusQueryCompatibleIDs x No No or Optional
- BusQueryInstanceID x No No Optional
- BusQueryContainerID x No No Required (3)
IRP_MN_QUERY_PNP_DEVICE_STATE 0x14 Optional Optional Optional
IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16 Required (1) Required (1) Required (1)
IRP_MN_SURPRISE_REMOVAL 0x17 Required Required Required
IRP_MN_DEVICE_ENUMERATED 0x19 No No Required (1)

(1) Required or optional in certain situations. See the reference page for the IRP for more details.

(2) Bus filter drivers might handle a query for BusRelations.

(3) Supported in Windows 7 and later versions of Windows.