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


Пользователь подключает устройство

В следующем сценарии узел устройства включает драйвер шины KMDF и одну или несколько функций KMDF или драйверов фильтров, поддерживающих устройство PnP.

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

  • Драйвер шины для устройства обнаруживает устройство и вызывает WdfChildListAddOrUpdateChildDescriptionAsPresent. (Этот процесс называется динамическим перечислением.)

  • Платформа вызывает функцию обратного вызова драйвера шины EvtChildListCreateDevice, поэтому драйвер шины может вызвать WdfDeviceCreate, чтобы создать объект устройства фреймворка для физического устройства (PDO).

  • Платформа вызывает функции обратного вызова драйвера шины EvtDeviceResourcesQuery и EvtDeviceResourceRequirementsQuery, чтобы определить системные аппаратные ресурсы, необходимые устройству.

Дополнительные сведения о последовательности включения для драйвера шины KMDF см. в разделе Power-Up Sequence for a Bus Driver.

Затем диспетчер PnP определяет, какие дополнительные драйверы (драйверы функций и драйверы фильтров) требуются для устройства. Если эти драйверы еще не загружены, диспетчер PnP загружает их и вызывает подпрограммы DriverEntry . Для каждой функции или драйвера фильтра выполняются следующие действия:

  • Платформа вызывает функцию обратного вызова EvtDriverDeviceAdd для каждого дополнительного драйвера, чтобы драйвер смог вызвать WdfDeviceCreate и создать объект устройства фреймворка, представляющий устройство для драйвера. Драйверы функций создают функциональный объект устройства (FDO), а драйверы фильтров создают объект устройства фильтра (Filter DO).

  • Платформа вызывает каждую функцию и функцию обратного вызова драйвера фильтра EvtDeviceFilterRemoveResourceRequirements, а затем вызывает функцию обратного вызова EvtDeviceFilterAddResourceRequirements каждого драйвера. Непосредственно перед запуском устройства платформа вызывает функцию обратного вызова EvtDeviceRemoveAddedResources . Эти три функции обратного вызова позволяют драйверам фильтров и функций изменять список аппаратных ресурсов, необходимых устройству, прежде чем диспетчер PnP назначает ресурсы устройству. Дополнительные сведения см. в разделе "Аппаратные ресурсы" для драйверов Framework-Based

  • Платформа гарантирует, что устройство достигло своего рабочего состояния питания (D0).

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

    1. Платформа вызывает функцию обратного вызова EvtDevicePrepareHardware драйвера (если она существует) и передает список аппаратных ресурсов, назначенных диспетчеру PnP устройству.
    2. Платформа вызывает функцию обратного вызова драйвера EvtDeviceD0Entry (если она существует).
    3. Платформа вызывает функцию обратного вызова драйвера EvtInterruptEnable (если она существует) для каждого прерывания, а затем функцию обратного вызова драйвера EvtDeviceD0EntryPostInterruptsEnabled (если она существует), чтобы драйвер мог включить прерывания устройства.
    4. Если оборудование и драйвер поддерживают DMA, фреймворк вызывает функции обратного вызова EvtDmaEnablerFill, EvtDmaEnablerEnableи EvtDmaEnablerSelfManagedIoStart (если они существуют) для каждого созданного канала DMA.
    5. Платформа вызывает функцию обратного вызова драйвера EvtChildListScanForChildren (если такая функция существует).
    6. Платформа запускает все очереди ввода-вывода, управляемые питанием устройства.
    7. Если драйвер использует самоуправляемый ввод-вывод, фреймворк вызывает функцию обратного вызова драйвера EvtDeviceSelfManagedIoInit.

Для получения дополнительной информации о последовательности включения для драйверов функции KMDF или драйверов фильтров смотрите Power-Up Последовательность для драйвера функции или фильтра.