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


Необработанные и переведенные ресурсы

Когда функция обратного вызова EvtDeviceRemoveAddedResources или EvtDevicePrepareHardware драйвера получает список ресурсов, она получает две версии списка. Одна версия представляет необработанные ресурсы устройства, а другая — переведенные ресурсы устройства. Обе версии представляют один и тот же набор аппаратных ресурсов в одном порядке.

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

  • Переведенные ресурсы — это ресурсы, определяемые физическими адресами системы, которые драйверы используют для доступа к ресурсам.

Драйвер для устройства шины PCI получает ресурсы, перечисленные в порядке, в котором они отображаются в базовых регистрах адресов (BAR) устройства. Однако дополнительные дескрипторы ресурсов могут чередуться в списке, так что ресурс с индексом X на панели bar может не совпадать с ресурсом, расположенным в той же позиции индекса в списке ресурсов.

Дополнительные сведения о необработанных и переведенных ресурсах см. в описании элементов структуры CM_PARTIAL_RESOURCE_DESCRIPTOR .

Если переведенный список ресурсов устройства содержит ресурс с элементом Type структуры CM_PARTIAL_RESOURCE_DESCRIPTOR, равным CmResourceTypeMemory, каждый драйвер, который обращается к ресурсу, должен выполнять следующие действия:

  • Функция обратного вызова EvtDevicePrepareHardware драйвера должна вызывать MmMapIoSpace , чтобы сопоставить физические адреса системы с системными виртуальными адресами.
  • Функция обратного вызова EvtDeviceReleaseHardware драйвера должна вызвать MmUnmapIoSpace , чтобы отменить сопоставление адресов.

Дополнительные сведения о сопоставлении адресов, относящихся к шине, см. в разделе Сопоставление адресов Bus-Relative с виртуальными адресами.