Поделиться через


IRP_MN_START_DEVICE

Все драйверы PnP должны обрабатывать этот IRP.

Значение

0x00

Основной код

IRP_MJ_PNP

При отправке

Диспетчер PnP отправляет эту IRP после назначения аппаратных ресурсов, если таковые имеются, устройству. Возможно, устройство было недавно перечислено и запускается в первый раз, или устройство может перезапускаться после остановки для перебалансировки ресурсов.

Иногда диспетчер PnP отправляет IRP_MN_START_DEVICE на устройство, которое уже запущено, предоставляя набор ресурсов, отличный от набора ресурсов, используемых устройством в настоящее время. Драйвер инициирует это действие, вызывая IoInvalidateDeviceState и отвечая на последующий запрос IRP_MN_QUERY_PNP_DEVICE_STATE с установленным флагом PNP_RESOURCE_REQUIREMENTS_CHANGED. Водитель автобуса может использовать этот механизм, например, для открытия нового отверстия на мосту pci-to-PCI.

Диспетчер PnP отправляет этот IRP на PASSIVE_LEVEL IRQL в контексте системного потока.

Входные параметры

Элемент Parameters.StartDevice.AllocatedResources структуры IO_STACK_LOCATION указывает на CM_RESOURCE_LIST , описывающую аппаратные ресурсы, назначенные диспетчером PnP устройству. Этот список содержит ресурсы в необработанном виде. Используйте необработанные ресурсы для программирования устройства.

Parameters.StartDevice.AllocatedResourcesTranslated указывает на CM_RESOURCE_LIST , описывающую аппаратные ресурсы, назначенные диспетчером PnP устройству. Этот список содержит ресурсы в переведенном виде. Используйте переведенные ресурсы для подключения вектора прерываний, сопоставления пространства ввода-вывода и карты памяти.

Выходные параметры

Нет

Блок состояния ввода-вывода

Драйвер задает Irp-IoStatus.Status> значение STATUS_SUCCESS или соответствующее состояние ошибки, например STATUS_UNSUCCESSFUL или STATUS_INSUFFICIENT_RESOURCES.

Если драйверу требуется некоторое время для запуска операций запуска для устройства, он может пометить IRP в ожидании и вернуть STATUS_PENDING.

Операция

Этот IRP должен обрабатываться сначала драйвером родительской шины для устройства, а затем каждым более высоким драйвером в стеке устройств.

В ответ на этот IRP драйверы запускают устройство в первый раз или перезапускаются остановленным устройством. Точные операции, необходимые для запуска устройства, зависят от устройства, но могут включать в себя питание устройства, выполнение инициализации устройства и подключение прерывания.

Драйвер обычно может обрабатывать этот IRP таким же образом, независимо от того, запускается ли устройство в первый раз или перезапускается после IRP_MN_STOP_DEVICE, за исключением случаев, когда драйверу необходимо восстановить состояние устройства при перезагрузке после остановки.

В Операционных системах Windows Vista и более поздних версий рекомендуется, чтобы драйверы всегда подгонали IRP_MN_START_DEVICE IRP и завершают его обработку позже. Этот порядок позволяет системе асинхронно обрабатывать перезапуски устройства. (В операционных системах до Windows Vista драйверы могут возвращать STATUS_PENDING из своих процедур диспетчеризации, но диспетчер PnP не перекрывает перезапуск устройства с любой другой операцией.)

Дополнительные сведения об обработке начального IRP см. в разделе Запуск устройства.

Отправка этого IRP

Зарезервировано для системного использования. Драйверы не должны отправлять этот IRP.

Требования

Заголовок

Wdm.h (включая Wdm.h, Ntddk.h или Ntifs.h)

См. также раздел

IRP_MN_STOP_DEVICE