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


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

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

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

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

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

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

Дополнительные сведения о последовательности включения питания для водителя шины KMDF см. в разделе Последовательность включения питания для водителя шины.

Затем диспетчер 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 см. в разделе Последовательность включения питания для функции или драйвер фильтра.