Переходы состояния для устройств PnP
В системе PnP устройство переходит через различные состояния PnP по мере настройки, запуска, возможно, остановлено для повторной балансировки ресурсов и, возможно, удаляется. В этом разделе представлен обзор состояний устройств PnP. Обзор представляет собой дорожную карту для большей части поддержки PnP, необходимой для водителя. В других частях этой документации подробно описывается каждый переход состояния.
На следующем рисунке показаны состояния PnP для устройства и переход устройства из одного состояния в другое.
Начиная с левого верхнего углу предыдущего рисунка устройство PnP физически присутствует в системе, так как либо пользователь только что вставил устройство, либо устройство присутствовало во время загрузки. Системное программное обеспечение пока не известно об устройстве.
Чтобы начать настройку программного обеспечения для устройства, диспетчер PnP и драйвер родительской шины перечисляют устройство. Диспетчер PnP, возможно, с помощью компонентов пользовательского режима, определяет драйверы для устройства, включая драйвер-функцию и любые дополнительные драйверы фильтров. Диспетчер PnP вызывает подпрограмму DriverEntry каждого драйвера, если драйвер еще не загружен. Дополнительные сведения о создании отчетов и перечислении устройства PnP см. в разделе Добавление устройства PnP в запущенную систему.
После инициализации драйвер должен быть готов к инициализации своих устройств. Диспетчер PnP вызывает подпрограмму AddDevice драйвера для каждого устройства, которое управляет драйвером.
Когда драйвер получает IRP_MN_START_DEVICE запрос от диспетчера PnP, драйвер запускает устройство и готов к обработке запросов ввода-вывода для устройства. Сведения об обработке запроса IRP_MN_START_DEVICE см. в разделе Запуск устройства.
Если диспетчер PnP должен перенастроить аппаратные ресурсы активного устройства, он отправляет IRP_MN_QUERY_STOP_DEVICE и IRP_MN_STOP_DEVICE запросы к драйверам устройства. После перенастройки аппаратных ресурсов диспетчер PnP направляет драйверы на перезагрузку устройства, отправляя запрос IRP_MN_START_DEVICE . Сведения об обработке прервать IRP см. в разделе Остановка устройства. (Драйверы для устройства, настроенного для загрузки, могут получать IRP_MN_QUERY_STOP_DEVICE и IRP_MN_STOP_DEVICE запросы до запуска устройства, хотя этот шаг не показан на предыдущем рисунке.)
В Windows 98/Me диспетчер PnP также отправляет IRP_MN_QUERY_STOP_DEVICE и IRP_MN_STOP_DEVICE запросы при отключении устройства. Драйверы в этих системах также получают запрос IRP_MN_STOP_DEVICE после неудачного запуска.
Когда устройство PnP физически удаляется из системы или уже удалено, диспетчер PnP отправляет различные irp удаления в драйверы устройства, направляя их на удаление программного представления устройства (объектов устройств и т. д.). Сведения об обработке irp удаления см. в разделе Удаление устройства.
В какой-то момент после удаления всех устройств драйвера диспетчер PnP вызывает подпрограмму выгрузки драйвера и выгружает драйвер.