Plug and Play вспомогательных irp
В этом разделе описываются PnP IRP, отправляемые драйверам. Все PnP IRP имеют основной код функции IRP_MJ_PNP и дополнительный код функции, указывающий конкретный запрос PnP.
В этом разделе содержатся справочные сведения по отдельным IRP. См. Plug and Play для описания порядка отправки irP, обсуждения того, как обрабатывать IRP в подпрограммах DispatchPnP, а также общего обсуждения концепций и терминологии PnP.
Для каждого IRP и каждого типа драйвера драйвер либо требуется для обработки IRP, может при необходимости обрабатывать IRP, либо не должен обрабатывать IRP. Обратитесь к таблице ниже, чтобы определить, какие IRP будет обрабатывать ваш драйвер, а затем обратитесь к справочным страницам для получения сведений об отдельных IRP. IrP перечислены в функциональном порядке в таблице и в алфавитном порядке на справочных страницах IRP.
Если IRP помечен как "Нет" в таблице для конкретного драйвера, этот драйвер не должен обрабатывать IRP. Драйвер должен передать IRP следующему драйверу в стеке устройств, как описано на странице справочника по IRP.
Диспетчер PnP отправляет эти IRP. Драйверы PnP могут отправлять некоторые из этих irP, но только те, которые указаны в этом разделе.
Ниже приведены дополнительные коды функций для PnP IRP и типы драйверов, которые их обрабатывают:
Код вспомогательной функции IRP PnP | Значение | Драйвер функции или фильтра для устройства, не являющееся шиной | Драйвер функции для устройства шины (для 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) |
- EjectionRelations | x | Нет | Нет | Необязательно |
- УдалениеРеляции | 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.