Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Аппаратные ресурсы системы — это порты ввода-вывода, векторы прерываний, каналы прямого доступа к памяти (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 назначает ресурсы устройству. Платформа передает список ресурсов функции устройства и драйверам фильтров, а драйвер функции устройства выполняет любую инициализацию, необходимую для доступа к ресурсам устройства и драйвера.
Ниже описан процесс более подробно.
Водитель шины обнаруживает устройство и перечисляет его.
Платформа вызывает функцию обратного вызова драйвера шины EvtDeviceResourcesQuery, которая создает список ресурсов, описывающий конфигурацию загрузки устройства.
Платформа вызывает функцию обратного вызова драйвера шины EvtDeviceResourceRequirementsQuery, которая создает список требований к ресурсам для устройства.
Диспетчер PnP определяет, какие драйверы требует устройство и загружает их, если они еще не загружены, чтобы создать стек драйверов для устройства.
Диспетчер PnP отправляет список требований к ресурсам устройства в стек драйверов для проверки. По мере того как список перемещается по стеку драйверов, платформа вызывает каждую функцию драйвера и функцию обратного вызова фильтра EvtDeviceFilterRemoveResourceRequirements. Когда список перемещается обратно по стеку, платформа вызывает каждую функцию и функцию обратного вызова драйвера фильтра EvtDeviceFilterAddResourceRequirements. Обе эти функции обратного вызова могут изменить список требований к ресурсам.
Диспетчер PnP создает список ресурсов для устройства и отправляет его в стек драйверов для проверки. Платформа вызывает функцию обратного вызова EvtDeviceRemoveAddedResources для каждой функции и драйвера фильтра, которая удаляет ресурсы, добавленные функцией обратного вызова драйвера EvtDeviceFilterAddResourceRequirements, чтобы драйвер шины не пытался их использовать.
Платформа получает окончательный список ресурсов из диспетчера PnP и сохраняет его.
Если драйвер вызывает WdfInterruptCreate для создания объектов прерываний, платформа находит ресурсы прерывания в списке ресурсов и назначает их объектам прерывания.
После того, как устройство вошло в неинициализированное состояние D0, фреймворк вызывает функцию обратного вызова EvtDevicePrepareHardware каждого драйвера, передавая необработанные и переведенные версии списка ресурсов устройства в качестве входного аргумента. Драйвер может сохранить список ресурсов, который действителен, пока платформа не вызовет функцию обратного вызова драйвера EvtDeviceReleaseHardware.