Диспетчер PnP перераспределяет системные ресурсы

Если пользователь добавляет устройство в систему и если устройству требуются системные ресурсы, которые диспетчер PnP уже назначил другому устройству, диспетчер PnP пытается переназначить ресурсы.

Во время этого процесса диспетчер PnP останавливает устройства и выводит их из рабочего состояния (D0). Затем он доставляет новые списки ресурсов на устройства, чтобы они могли перезапуститься, используя новые ресурсы.

При перераспределении ресурсов диспетчер PnP не изменяет назначение ресурсов устройства, если один из драйверов устройства имеет:

Последовательность Power-Down

Для каждого драйвера функции и фильтра, поддерживающего остановленное устройство, платформа последовательно выполняет следующие действия по одному драйверу за раз, начиная с драйвера, который является самым высоким в стеке драйверов:

  1. Если драйвер использует самоуправляемый ввод-вывод, платформа вызывает функцию обратного вызова EvtDeviceSelfManagedIoSuspend драйвера.

  2. Платформа останавливает все очереди ввода-вывода устройства, управляемые питанием.

  3. Если оборудование и драйвер поддерживают DMA, платформа вызывает функции обратного вызова EvtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlush и EvtDmaEnablerDisable для каждого созданного канала DMA.

  4. Вызывает функции обратного вызова EvtDeviceD0ExitPreInterruptsDisabled и EvtInterruptDisable (если они существуют), чтобы драйвер мог отключить прерывания устройства.

  5. Платформа вызывает функцию обратного вызова EvtDeviceD0Exit драйвера (если она существует).

  6. Платформа вызывает функцию обратного вызова EvtDeviceReleaseHardware драйвера (если она существует), передавая список аппаратных ресурсов, назначенных диспетчером PnP устройству.

Водитель автобуса является самым низким драйвером в стеке и называется последним. Когда платформа вызывает функцию обратного вызова EvtDeviceD0Exit водителя шины, она передает дескриптор объекту устройства платформы, представляющий PDO устройства и значение TargetStateWdfPowerDeviceD3Final. Драйвер шины может управлять тем, когда платформа вызывает функцию обратного вызова EvtDeviceReleaseHardware , вызывая WdfDeviceInitSetReleaseHardwareOrderOnFailure.

Последовательность Power-Up

Первым водителем называется водитель автобуса. Когда платформа вызывает функцию обратного вызова EvtDeviceD0Entry водителя шины, функция обратного вызова восстанавливает устройство (дочернее устройство шины) в рабочее состояние (D0).

Для каждого драйвера функции и фильтра, поддерживающего устройство, платформа последовательно выполняет по одному драйверу, начиная с самого низкого уровня в стеке драйверов:

  1. Платформа вызывает функцию обратного вызова EvtDevicePrepareHardware драйвера (если она существует), передавая список аппаратных ресурсов, назначенных диспетчером PnP устройству.

  2. Платформа вызывает функцию обратного вызова EvtDeviceD0Entry драйвера (если она существует).

  3. Платформа вызывает функции обратного вызова EvtInterruptEnable и EvtDeviceD0EntryPostInterruptsEnabled (если они существуют), чтобы драйвер мог включить прерывания устройства.

  4. Если оборудование и драйвер поддерживают DMA, платформа вызывает функции обратного вызова EvtDmaEnablerFill, EvtDmaEnablerEnable иEvtDmaEnablerSelfManagedIoStart для каждого созданного канала DMA.

  5. Платформа вызывает функцию обратного вызова EvtChildListScanForChildren драйвера (если она существует).

  6. Платформа перезапускает все очереди ввода-вывода устройства, управляемые питанием.

  7. Если драйвер использует самоуправляемый ввод-вывод, платформа вызывает функцию обратного вызова EvtDeviceSelfManagedIoRestart драйвера.