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


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

Аппаратные ресурсы системы — это порты ввода-вывода, векторы прерываний, каналы прямого доступа к памяти (DMA) и другие пути связи, которые должны быть назначены каждому устройству, подключенного к системе. В данной секции описывается, как драйверы Driver Framework (KMDF) для состояния Kernel-Mode определяют требования к аппаратным ресурсам устройства, изучают предлагаемый список ресурсов, а затем получают назначенные ресурсы. В этом разделе также обсуждается, как драйверы KMDF и фреймворк драйвера User-Mode (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.