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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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