IRP_MN_START_DEVICE
Все драйверы PnP должны обрабатывать этот IRP.
Значение
0x00
Основной код
При отправке
Диспетчер 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) |