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


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

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

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

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

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

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

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

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

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