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


Диспетчер 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.