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


Создание списка требований к ресурсам

Когда драйвер шины обнаруживает дочернее устройство, он отвечает за создание списка требований к ресурсам для устройства. Каждый элемент в списке является логической конфигурацией для устройства.

После того как драйвер сообщает об устройстве во время перечисления шины, платформа вызывает функцию обратного вызова EvtDeviceResourceRequirementsQuery драйвера. Эта функция обратного вызова получает дескриптор объекта resource-requirements-list, который представляет пустой список требований к ресурсам.

Затем драйвер должен выполнить следующие действия, чтобы добавить сведения в список требований к ресурсам:

  • Создайте пустую логическую конфигурацию.

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

  • Добавьте дескрипторы ресурсов в логическую конфигурацию.

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

    1. Заполните структуру, выделенную драйвером IO_RESOURCE_DESCRIPTOR , которая указывает диапазон допустимых значений для определенного ресурса.
    2. Вызовите WdfIoResourceListAppendDescriptor или WdfIoResourceListInsertDescriptor , чтобы добавить содержимое структуры IO_RESOURCE_DESCRIPTOR в логическую конфигурацию.

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

  • Добавьте логическую конфигурацию в список требований к ресурсам.

    Чтобы добавить логическую конфигурацию в список требований к ресурсам устройства, драйвер вызывает WdfIoRequirementsListAppendIoResList или WdfIoResourceRequirementsListInsertIoResList.

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

    Если драйвер поддерживает устройство, отличное от PnP, драйвер обычно также должен вызывать WdfIoResourceRequirementsListSetSlotNumber и WdfIoResourceRequirementsListSetInterfaceType.

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