Общие сведения об аппаратных ресурсах

Аппаратные ресурсы системы — это порты ввода-вывода, векторы прерываний, каналы прямого доступа к памяти (DMA) и другие пути связи, которые должны быть назначены каждому устройству, подключенном к системе. В разделах этого раздела описывается, как Kernel-Mode драйверы Driver Framework (KMDF) согласовывают требования к аппаратным ресурсам для устройства, просматривают предлагаемый список ресурсов, а затем получают назначенные ресурсы. В этом разделе также рассматривается, как драйверы KMDF и User-Mode Driver Framework (UMDF) получают доступ к назначенным ресурсам и сопоставляют их.

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

  • Конфигурация загрузки, содержащая список аппаратных ресурсов, необходимых устройству при запуске системы. (Для устройств PnP эти сведения предоставляются BIOS.)

  • Дополнительные конфигурации, в которых может работать устройство. Драйвер группирует эти дополнительные конфигурации в списке требований к ресурсам. В конечном итоге диспетчер PnP выберет ресурсы из этого списка для назначения устройству.

После создания логических конфигураций драйвер отправляет их в платформу, а платформа — диспетчеру PnP.

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

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

Затем диспетчер PnP создает список ресурсов, который представляет собой список ресурсов, которые диспетчер PnP намерен назначить устройству. Диспетчер PnP отправляет этот список драйверам устройства для проверки. На этом этапе драйверы функций и фильтров могут удалять ресурсы из списка, но не могут добавлять в него ресурсы.

Наконец, диспетчер PnP назначает ресурсы устройству. Платформа передает список ресурсов в драйверы функций и фильтров устройства, а драйвер функции устройства выполняет любую инициализацию, необходимую для доступа устройства и драйвера к ресурсам.

Следующие шаги описывают этот процесс более подробно.

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

  2. Водитель шины обнаруживает устройство и перечисляет его.

  3. Платформа вызывает функцию обратного вызова EvtDeviceResourcesQuery драйвера шины, которая создает список ресурсов , описывающий конфигурацию загрузки устройства.

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

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

  6. Диспетчер PnP отправляет список требований к ресурсам устройства в стек драйверов для проверки. По мере перемещения списка по стеку драйверов платформа вызывает каждую функцию и фильтрует функцию обратного вызова EvtDeviceFilterRemoveResourceRequirements драйвера. По мере перемещения списка в резервную копию стека платформа вызывает каждую функцию и функцию обратного вызова драйвера фильтра EvtDeviceFilterAddResourceRequirements . Обе эти функции обратного вызова могут изменять список требований к ресурсам.

  7. Диспетчер PnP создает список ресурсов для устройства и отправляет его в стек драйверов для проверки. Платформа вызывает каждую функцию и фильтрует функцию обратного вызова EvtDeviceRemoveAddedResources драйвера, которая удаляет ресурсы , добавленные функцией обратного вызова EvtDeviceFilterAddResourceRequirements драйвера, поэтому драйвер шины не будет пытаться использовать их.

  8. Платформа получает окончательный список ресурсов от диспетчера PnP и сохраняет его.

  9. Если драйвер вызывает WdfInterruptCreate для создания объектов прерываний, платформа находит ресурсы прерываний в списке ресурсов и назначает их объектам прерывания.

  10. После того как устройство перейдет в неинициализированное состояние D0, платформа вызывает функцию обратного вызова EvtDevicePrepareHardware каждого драйвера, передавая необработанные и переведенные версии списка ресурсов устройства в качестве входного аргумента. Драйвер может сохранить список ресурсов, который действителен до тех пор, пока платформа не вызовет функцию обратного вызова EvtDeviceReleaseHardware драйвера.