Аппаратные ресурсы
Аппаратные ресурсы — это назначаемые, адресуемые пути шины, которые позволяют периферийным устройствам и системным процессорам взаимодействовать друг с другом. Аппаратные ресурсы обычно включают адреса портов ввода-вывода, векторы прерываний и блоки адресов памяти относительно шины.
Прежде чем система сможет взаимодействовать с экземпляром устройства, диспетчер PnP должен назначить аппаратные ресурсы экземпляру устройства в зависимости от того, какие ресурсы доступны и какие из них может использовать экземпляр устройства. Ресурсы назначаются каждому узлу устройства в дереве устройств (при условии, что представленному устройству требуются ресурсы и эти ресурсы доступны). Диспетчер PnP отслеживает аппаратные ресурсы с помощью списков, которые он связывает с узлами устройств. В нем используются два типа списков:
Список требований к ресурсам
Устройства обычно предназначены для работы в пределах диапазона назначений ресурсов. Например, устройству может потребоваться только один вектор прерывания, но оно может использовать любой из диапазона векторов. Для каждого экземпляра устройства диспетчер PnP ведет список требований к ресурсам , в котором указываются все диапазоны аппаратных ресурсов, в которых может работать устройство. Имя списка связано с тем, что диспетчер PnP должен выбирать ресурсы из этого списка при назначении их устройству.
Код в режиме ядра определяет списки требований к ресурсам, используя IO_RESOURCE_REQUIREMENTS_LIST структуры (в качестве входных данных для системных подпрограмм или в ответ на IRP). Код пользовательского режима определяет списки требований к ресурсам, использующие структуры диспетчера конфигурации PnP в качестве входных данных для функций диспетчера конфигурации PnP.
Список ресурсов
Когда диспетчер PnP назначает ресурсы устройству, он отслеживает эти назначения, создавая список назначенных ресурсов для каждого экземпляра устройства. Эти списки можно назвать списками назначений ресурсов, но обычно это имя сокращено до списков ресурсов. Диспетчер PnP может изменять содержимое списка ресурсов по мере добавления устройств в систему или удаления из нее, а затем перераспределения ресурсов. (Ресурсы также могут быть назначены BIOS PnP. Кроме того, программное обеспечение установки с помощью INF-файлов или ввода данных пользователем может заставить диспетчер PnP назначать определенные ресурсы устройству.)
Код в режиме ядра определяет списки ресурсов с помощью CM_RESOURCE_LIST структур (в качестве входных данных для системных подпрограмм или в ответ на IRP). Код пользовательского режима задает списки ресурсов, использующие структуры диспетчера конфигурации PnP в качестве входных данных для функций диспетчера конфигурации PnP.
Диспетчер PnP хранит списки требований к ресурсам и списки ресурсов в реестре, где их можно просмотреть с помощью Regedit.exe. Драйверы могут получить доступ к этим спискам косвенно с помощью Plug and Play процедур и Plug and Play дополнительных irp. Приложения в пользовательском режиме могут использовать функции диспетчера конфигурации PnP. (Драйверы и приложения не должны напрямую обращаться к этим спискам с помощью функций реестра, так как формат хранилища может быть изменен в будущем выпуске.)
Логические конфигурации
Как списки требований к ресурсам, так и списки ресурсов содержат одну или несколько логических конфигураций. Каждая логическая конфигурация определяет либо диапазон допустимых ресурсов, либо набор конкретных ресурсов для конкретного экземпляра устройства. Кроме того, каждая логическая конфигурация для экземпляра устройства относится к одному из типов логической конфигурации. Типы конфигурации перечислены ниже. Каждому экземпляру устройства может быть назначено несколько логических конфигураций одного и того же или разного типа.
Типы логических конфигураций для списков требований к ресурсам
Базовая конфигурация
Список требований к ресурсам, определяющий диапазоны ресурсов, предоставляемые Plug and Play устройством. Драйвер должен вернуть этот список при получении IRP_MN_QUERY_RESOURCE_REQUIREMENTS IRP. (Базовую конфигурацию для устройства, отличного от PnP, можно описать в INF-файле. В этом случае программное обеспечение для установки устройства считывает INF-файл и вызывает функции диспетчера конфигурации PnP для создания списка требований.)
Отфильтрованной конфигурации
Список требований к ресурсам, который был предоставлен стеку драйверов, возможно, изменен, а затем возвращен стеком драйверов в ответ на IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP. Диспетчер PnP использует итоговую отфильтрованную конфигурацию в качестве основы для выделения ресурсов.
Переопределение конфигурации
Список требований к ресурсам, который переопределяет базовые конфигурации. Как правило, установщик устройства создает конфигурацию переопределения, если INF-файл устройства содержит раздел INF DDInstall.LogConfigOverride. Конфигурация переопределения не удаляется, если устройство физически удалено из системы.
Типы логических конфигураций для списков ресурсов
Конфигурация загрузки
Список ресурсов, определяющий ресурсы, назначенные экземпляру устройства при загрузке системы. (Для устройств PnP это конфигурация, предоставляемая BIOS. Для устройств, отличных от PnP, эти ресурсы могут быть выбраны перемычками на карта.) Драйвер должен вернуть этот список ресурсов при получении IRP_MN_QUERY_RESOURCES IRP. (Конфигурация загрузки может быть частично пустой, если BIOS не может определить все ресурсы, используемые устройством.) Диспетчер PnP может изменить этот список, если устройство удалено или перезапущено. Для устройств, отличных от PnP, этот тип конфигурации можно использовать вместо принудительной конфигурации. В этом случае он имеет более низкий приоритет конфигурации, чем эквивалентная принудительная конфигурация. Для каждого экземпляра устройства может существовать только одна конфигурация загрузки.
Принудительная настройка
Список ресурсов, определяющий ресурсы, которые должен использовать экземпляр устройства. Принудительная конфигурация не позволяет диспетчеру PnP назначать другие ресурсы экземпляру устройства. Установщик устройства может создать принудительная конфигурация на основе сведений, содержащихся в INF-файле или полученных от пользователя. Принудительная конфигурация не удаляется, если устройство физически удалено из системы. Для каждого экземпляра устройства может существовать только одна принудительная конфигурация.
Выделенная конфигурация
Список ресурсов, определяющий ресурсы, используемые экземпляром устройства в настоящее время. Для каждого экземпляра устройства может существовать только одна выделенная конфигурация.
Драйверы устройств отвечают за определение базовой конфигурации совместимого с PnP устройства, отфильтрованной конфигурации и конфигурации загрузки, а также за возврат этой информации в ответ на запросы IRP, отправленные диспетчером PnP. (Дополнительные сведения см. в разделе Добавление устройства PnP в запущенную систему.) Программное обеспечение для установки драйверов может создавать конфигурации переопределения, принудительные конфигурации и конфигурации загрузки для устройств без PnP. Диспетчер PnP поддерживает выделенную конфигурацию каждого экземпляра устройства.
Приоритет назначается каждой конфигурации при ее создании. Если диспетчер PnP обнаруживает, что экземпляру устройства назначено несколько логических конфигураций одного типа, он пытается сначала использовать ту конфигурацию с наивысшим приоритетом. Если эта конфигурация приводит к конфликтам ресурсов, она пытается выполнить настройку со следующим низким приоритетом. (Список приоритетов конфигурации см. в разделе CM_Add_Empty_Log_Conf.)